Estoy desarrollando una herramienta de IA para encontrar los errores de los equipos conocidos y encontrar nuevos patrones de falla. Este archivo de registro está basado en el tiempo y tiene mensajes conocidos (información y error). Estoy usando una biblioteca de JavaScript El evento cae para mostrar los datos de una manera suave, pero mi trabajo real y mis dudas son cómo entrenar a la IA para encontrar lo conocido patrones y encontrar nuevos patrones posibles. Tengo algunos requisitos:
1 - La herramienta debe: a. no depende de la instalación de entornos adicionales o b. cuanto menos, mejor (el escenario perfecto es ejecutar la herramienta completamente en el navegador en modo independiente);
2 - Posibilidad de fragmentar el analizador de patrones, una especie de modularidad, un módulo por error;
¿Cuál es el tipo de algoritmo recomendado para hacer esto (red neuronal, algoritmo genético, etc.)? ¿Existe algo para trabajar usando JavaScript? Si no, ¿cuál es el mejor lenguaje para hacer esta IA?
fuente
Respuestas:
Correlación entre entradas
La primera recomendación es garantizar que se presenten las advertencias adecuadas y las entradas informativas en el archivo de registro junto con los errores en los componentes de aprendizaje automático de la solución. Todas las entradas de registro son datos de entrada potencialmente útiles si es posible que existan correlaciones entre mensajes informativos, advertencias y errores. A veces, la correlación es fuerte y, por lo tanto, crítica para maximizar la tasa de aprendizaje.
Los administradores del sistema a menudo experimentan esto como una serie de advertencias seguidas de un error causado por la condición indicada en las advertencias. La información en las advertencias es más indicativa de la causa raíz de la falla que la entrada de error creada cuando el sistema o un subsistema falla críticamente.
Si uno está construyendo un tablero de estado del sistema para un equipo o una serie de máquinas que interactúan, lo que parece ser el caso en esta pregunta, la causa raíz de los problemas y alguna capacidad de alerta temprana es la información clave para mostrar.
Además, no todas las malas condiciones de salud del sistema terminan en fracaso.
Las únicas entradas de registro que deben eliminarse por filtración antes de la presentación al mecanismo de aprendizaje son las que seguramente son irrelevantes y no están correlacionadas. Este puede ser el caso cuando el archivo de registro es una agregación de registros de varios sistemas. En tal caso, las entradas para el sistema independiente que se está analizando se deben extraer como un aislamiento de las entradas que no podrían correlacionarse con los fenómenos que se analizan.
Es importante tener en cuenta que limitar el análisis a una entrada a la vez limita enormemente la utilidad del tablero. La salud de un sistema no es igual a las indicaciones de salud de la entrada de registro más reciente. Ni siquiera es la suma lineal de las indicaciones de estado de las N entradas más recientes.
El estado del sistema tiene relaciones muy no lineales y muy dependientes del tiempo con muchas entradas. Los patrones pueden surgir gradualmente a lo largo de los días en muchos tipos de sistemas. La red neuronal de la base (o una base) en el sistema debe estar capacitada para identificar estas indicaciones no lineales de salud, peligros inminentes y condiciones de riesgo si se desea un tablero altamente útil. Para mostrar la probabilidad de una falla inminente o un problema de control de calidad, debe ingresar una ventana de tiempo completo de entradas de registro de longitud considerable en esta red neuronal.
Distinción entre patrones conocidos y desconocidos
Observe que la identificación de patrones conocidos es diferente en un aspecto importante que la identificación de nuevos patrones. La idiosincrasia de la sintaxis de entrada de errores conocidos ya se ha identificado, lo que reduce considerablemente la carga de aprendizaje en las etapas de normalización de entrada del procesamiento de esas entradas. Primero se debe descubrir la idiosincrasia sintáctica de los nuevos tipos de error.
Las entradas de un tipo conocido también se pueden separar de las que son desconocidas, lo que permite el uso de tipos de entrada conocidos como datos de entrenamiento para ayudar en el aprendizaje de nuevos patrones sintácticos. El objetivo es presentar información sintácticamente normalizada al análisis semántico.
Primera etapa de normalización específica de los archivos de registro
Si la marca de tiempo siempre está en el mismo lugar en las entradas, convertirla a milisegundos relativos y quizás eliminar cualquier carácter 0x0d antes de que los caracteres 0x0a se puedan hacer antes que cualquier otra cosa como primer paso en la normalización. Las trazas de pila también se pueden plegar en matrices delimitadas por tabulaciones de niveles de traza para que haya una correspondencia uno a uno entre las entradas de registro y las líneas de registro.
La información sintácticamente normalizada que surge tanto de las entradas conocidas como desconocidas de las entradas de tipo error y no error se puede presentar a las redes no supervisadas para la identificación ingenua de categorías de una estructura semántica. No queremos clasificar números o variables de texto como nombres de usuario o números de serie de piezas.
Si la información sintácticamente normalizada se marca apropiadamente para indicar símbolos altamente variables como conteos, capacidades, métricas y marcas de tiempo, se puede aplicar la extracción de características para aprender los patrones de expresión de una manera que mantenga la distinción entre estructura semántica y variables. Mantener esa distinción permite el seguimiento de tendencias más continuas (menos discretas) en las métricas del sistema. Cada entrada puede tener cero o más variables de este tipo, ya sea que se conozcan a priori o se hayan adquirido recientemente mediante extracción de características.
Las tendencias se pueden graficar contra el tiempo o contra el número de instancias de un tipo particular. Tales gráficos pueden ayudar en la identificación de fatiga mecánica, el enfoque de condiciones de exceso de capacidad u otros riesgos que se intensifican hasta un punto de falla. Se pueden entrenar redes neuronales adicionales para producir indicadores de advertencia cuando las tendencias indican que tales condiciones son inminentes.
Registro perezoso
Todo este análisis de registro sería discutible si los arquitectos de software y los oficiales de tecnología dejaran de dejar el formato de almacenamiento de información importante del sistema a los diversos caprichos convenientes de los desarrolladores de software. Los archivos de registro son generalmente un desastre, y la extracción de información estadística sobre patrones en ellos es uno de los desafíos más comunes en el control de calidad del software. La probabilidad de que el rigor se aplique universalmente al registro es pequeña, ya que ninguno de los marcos de registro populares fomenta el rigor. Es muy probable que esta pregunta se haya visto con frecuencia.
Sección de requisitos de esta pregunta específica
En el caso específico presentado en esta pregunta, el requisito # 1 indica una preferencia para ejecutar el análisis en el navegador, lo cual es posible pero no recomendado. A pesar de que ECMA es un lenguaje de script maravilloso y la maquinaria de expresión regular que puede ser de ayuda en el aprendizaje de analizadores está integrada en ECMA (que cumple con la otra parte del requisito # 1, que no requiere instalaciones adicionales), los lenguajes no compilados no son tan buenos eficiente como Java. E incluso Java no es tan eficiente como C debido a la recolección de basura y las ineficiencias que se producen al delegar la asignación del código de bytes al código de máquina para ejecutar el tiempo.
Muchos experimentos en el aprendizaje automático emplean Python, otro lenguaje maravilloso, pero la mayoría del trabajo que hice en Python se transfirió a C ++ computacionalmente eficiente por casi 1,000 a una ganancia de velocidad en muchos casos. Incluso la búsqueda del método C ++ fue un cuello de botella, por lo que los puertos usan muy poca herencia, en estilo ECMA, pero mucho más rápido. En el código típico del núcleo tradicional, las estructuras C y el uso del puntero de función eliminan la sobrecarga de vtable.
El segundo requisito de los controladores modulares es razonable e implica un entorno de reglas desencadenado que muchos pueden verse tentados a pensar que es incompatible con las arquitecturas NN, pero no lo es. Una vez que se han identificado las categorías de patrones, la búsqueda de las más comunes primero en los datos de entrada adicionales ya está implícita en la distinción conocida / desconocida ya incluida en el proceso anterior. Sin embargo, existe un desafío con este enfoque modular.
Debido a que el estado del sistema a menudo se indica por tendencias y no por entradas individuales (como se discutió anteriormente) y porque el estado del sistema no es una suma lineal del valor de estado de las entradas individuales, el enfoque modular para manejar las entradas no se debe canalizar a la pantalla sin más análisis. De hecho, aquí es donde las redes neuronales proporcionarán las mayores ganancias funcionales en el monitoreo de la salud. Las salidas de los módulos deben ingresar a una red neuronal que pueda ser entrenada para identificar estas indicaciones no lineales de salud, peligros inminentes y condiciones de riesgo.
Además, el aspecto temporal del comportamiento previo al fallo implica que una ventana de tiempo completo de entradas de registro de longitud considerable debe entrar en esta red. Esto implica además lo inapropiado de ECMA o Python como una opción para la porción computacionalmente intensiva de la solución. (Tenga en cuenta que la tendencia en Python es hacer lo que hago con C ++: usar diseño orientado a objetos, encapsulación y patrones de diseño fáciles de seguir para el código de supervisión y un código similar al kernel muy computacionalmente eficiente para el aprendizaje real y otros datos computacionalmente intensivos o intensivos en datos funciones.)
Escogiendo Algoritmos
No es recomendable elegir algoritmos en las etapas iniciales de la arquitectura (como se indicó al final de la pregunta). Arquitecta el proceso primero. Determine los componentes de aprendizaje, el tipo de ellos necesarios, su estado objetivo después del entrenamiento, dónde se puede usar el refuerzo y cómo se generará la señal de bienestar / error para reforzar / corregir el comportamiento deseado de la red. Base estas determinaciones no solo en el contenido de visualización deseado, sino también en el rendimiento esperado, los requisitos de recursos informáticos y la tasa de aprendizaje efectiva mínima. Los algoritmos, el lenguaje y la planificación de la capacidad del sistema solo se pueden seleccionar de manera significativa después de que todas esas cosas se definan al menos de manera aproximada.
Trabajo similar en producción
El análisis adaptativo simple se está ejecutando en el laboratorio aquí como parte de la automatización de redes sociales, pero solo para conjuntos limitados de símbolos y patrones secuenciales. Se escala sin reconfiguración a una base arbitrariamente grande de unidades lingüísticas, prefijos, terminaciones y sufijos, limitados solo por nuestras capacidades de hardware y rendimiento. La existencia de bibliotecas de expresiones regulares fue útil para mantener el diseño simple. Utilizamos la biblioteca de la serie PCRE versión 8 alimentada por una forma ansiotrópica de DCNN para la extracción de características de una ventana que se mueve a través del texto de entrada con un tamaño de ventana configurable y un tamaño de incremento de movimiento. La heurística aplicada a las estadísticas de texto de entrada reunidas en un primer paso produce un conjunto de PCRE hipotéticos dispuestos en dos capas.
La optimización ocurre para aplicar pesos probabilísticos más altos a los mejores PCRE en una búsqueda de texto perturbado caóticamente. Utiliza las mismas estrategias de convergencia de descenso de gradiente utilizadas en la propagación de espalda NN en el entrenamiento. Es un enfoque ingenuo que no hace suposiciones como la existencia de trazas, archivos o errores. Se adaptaría igualmente a los mensajes árabes y a los españoles.
La salida es un gráfico dirigido arbitrariamente en la memoria, que es similar a un volcado de una base de datos orientada a objetos.
Aunque un algoritmo reentrante para una versión de refuerzo está apagado y la señal de bienestar ya está disponible, otro trabajo se adelantó al analizador adaptativo o al siguiente paso para usar el trabajo para lenguaje natural: unir los gráficos dirigidos con el gráfico dirigido persistente filtros que representan ideas, que imitarían el aspecto de recolección de ideas de la comprensión del lenguaje.
Comentarios finales
El sistema tiene componentes y arquitectura de proceso similar al problema de análisis de registro y prueba los conceptos enumerados anteriormente. Por supuesto, cuanto más desorganización en la forma en que se realiza el registro entre los desarrolladores del sistema que realiza el registro, más difícil es que un agente humano o artificial desambigue las entradas. Algunos registros del sistema han tenido un control de calidad tan pobre durante tanto tiempo que el registro es casi inútil.
fuente