Design AI para análise de arquivos de log


12

Estou desenvolvendo uma ferramenta de IA para encontrar erros de equipamentos conhecidos e encontrar novos padrões de falha. Estou usando uma biblioteca JavaScript Event drops para mostrar os dados de maneira suave, mas meu trabalho e minhas dúvidas reais são como treinar a IA para encontrar o conhecido padrões e encontre novos padrões possíveis. Eu tenho alguns requisitos:

1 - A ferramenta deve: a. não depende da instalação extra do ambiente ou b. quanto menos, melhor (o cenário perfeito é executar a ferramenta inteiramente no navegador no modo autônomo);

2 - Possibilidade de fragmentar o analisador de padrões, uma espécie de modularidade, um módulo por erro;

Qual é o tipo de algoritmo recomendado para fazer isso (rede neural, algoritmo genético etc.)? Existe algo para trabalhar usando JavaScript? Se não, qual é a melhor linguagem para fazer essa IA?


11
Eu suspeito algo regra baseada no seria mais apropriado para isso do que machine-learning
antlersoft

@antlersoft Para os problemas conhecidos, eu concordo, mas quero pesquisar padrões para fazer correlações com defeitos também.
Juliano Oliveira

Recomendado? Vamos pensar ... Usando regexp? Redes neurais são recomendadas para problemas que não têm solução usando algoritmos clássicos. Quase toda a rede neural obtém dados pré-processados. Se você "pré-processar" o log, obterá sua solução também.
betontalpfa

Respostas:


9

Correlação entre entradas

A primeira recomendação é garantir que as entradas informativas e de aviso apropriadas no arquivo de log sejam apresentadas junto com os erros nos componentes de aprendizado de máquina da solução. Todas as entradas de log são dados de entrada potencialmente úteis se for possível que haja correlações entre mensagens informativas, avisos e erros. Às vezes, a correlação é forte e, portanto, crítica para maximizar a taxa de aprendizado.

Os administradores de sistema geralmente enfrentam isso como uma série de avisos seguidos por um erro causado pela condição indicada nos avisos. As informações nos avisos são mais indicativas da causa raiz da falha do que da entrada de erro criada quando o sistema ou subsistema falha criticamente.

Se alguém estiver criando um painel de integridade do sistema para uma peça de equipamento ou uma série de máquinas que interoperam, o que parece ser o caso nesta pergunta, a causa raiz dos problemas e alguma capacidade de aviso prévio são as principais informações a serem exibidas.

Além disso, nem todas as condições precárias de integridade do sistema terminam em falha.

As únicas entradas de log que devem ser eliminadas pela filtragem antes da apresentação ao mecanismo de aprendizado são certamente irrelevantes e não correlacionadas. Pode ser o caso quando o arquivo de log é uma agregação de log de vários sistemas. Nesse caso, as entradas para o sistema independente que está sendo analisado devem ser extraídas como um isolado das entradas que não podem se correlacionar com os fenômenos que estão sendo analisados.

É importante observar que limitar a análise a uma entrada de cada vez limita bastante a utilidade do painel. A integridade de um sistema não é igual às indicações de integridade da entrada de log mais recente. Não é nem a soma linear das indicações de saúde das N entradas mais recentes.

A integridade do sistema tem um relacionamento muito não linear e muito dependente do tempo com muitas entradas. Os padrões podem surgir gradualmente ao longo dos dias em muitos tipos de sistemas. A rede neural básica (ou básica) no sistema deve ser treinada para identificar essas indicações não lineares de saúde, perigos iminentes e condições de risco, se um painel de controle altamente útil for desejado. Para exibir a probabilidade de uma falha iminente ou problema de controle de qualidade, uma janela de tempo inteiro de entradas de log de tamanho considerável deve entrar nessa rede neural.

Distinção entre padrões conhecidos e desconhecidos

Observe que a identificação de padrões conhecidos é diferente em um aspecto importante do que a identificação de novos padrões. As idiossincrasias da sintaxe de entrada de erros conhecidos já foram identificadas, reduzindo consideravelmente a carga de aprendizado nos estágios de processamento de normalização de entrada para essas entradas. As idiossincrasias sintáticas dos novos tipos de erro devem ser descobertas primeiro.

As entradas de um tipo conhecido também podem ser separadas daquelas que são desconhecidas, permitindo o uso de tipos de entrada conhecidos como dados de treinamento para ajudar no aprendizado de novos padrões sintáticos. O objetivo é apresentar informações sintaticamente normalizadas à análise semântica.

Primeiro Estágio de Normalização Específico para Arquivos de Log

Se o registro de data e hora estiver sempre no mesmo local nas entradas, convertê-lo em milissegundos relativos e talvez remover quaisquer caracteres 0x0d antes de caracteres 0x0a, pode ser feito antes de qualquer outra coisa, como um primeiro passo na normalização. Os rastreios de pilha também podem ser dobrados em matrizes delimitadas por tabulação de níveis de rastreio, para que haja uma correspondência individual entre entradas e linhas de log.

As informações sintaticamente normalizadas decorrentes de entradas conhecidas e desconhecidas de entradas de erro e de tipo não-erro podem ser apresentadas a redes não supervisionadas para a identificação ingênua de categorias de uma estrutura semântica. Não queremos categorizar números ou variáveis ​​de texto, como nomes de usuário ou números de série de peças.

Se as informações sintaticamente normalizadas forem adequadamente marcadas para indicar símbolos altamente variáveis, como contagens, capacidades, métricas e carimbos de hora, a extração de recursos pode ser aplicada para aprender os padrões de expressão de maneira a manter a distinção entre estrutura e variáveis ​​semânticas. Manter essa distinção permite o rastreamento de tendências mais contínuas (menos discretas) nas métricas do sistema. Cada entrada pode ter zero ou mais dessas variáveis, sejam conhecidas a priori ou adquiridas recentemente por meio da extração de recursos.

As tendências podem ser representadas graficamente em relação ao tempo ou ao número de instâncias de um tipo específico. Esses gráficos podem ajudar na identificação de fadiga mecânica, na abordagem de condições de excesso de capacidade ou em outros riscos que podem chegar a um ponto de falha. Redes neurais adicionais podem ser treinadas para produzir indicadores de aviso quando as tendências indicarem que tais condições são iminentes.

Log lento

Toda essa análise de log seria discutível se os arquitetos de software e os oficiais de tecnologia parassem de deixar o formato de armazenamento de informações importantes do sistema para os variados e convenientes caprichos dos desenvolvedores de software. Os arquivos de log geralmente são uma bagunça, e a extração de informações estatísticas sobre padrões neles é um dos desafios mais comuns no controle de qualidade de software. A probabilidade de que o rigor seja universalmente aplicado ao registro é pequena, pois nenhuma das estruturas populares de registro incentiva o rigor. É provavelmente por isso que essa pergunta foi vista com frequência.

Seção de requisitos desta pergunta específica

No caso específico apresentado nesta pergunta, o requisito nº 1 indica uma preferência para executar a análise no navegador, o que é possível, mas não recomendado. Embora o ECMA seja uma linguagem de script maravilhosa e o mecanismo de expressão regular que pode ser uma ajuda no aprendizado de analisadores seja incorporado ao ECMA (que cumpre a outra parte do requisito nº 1, não exigindo instalações adicionais), as linguagens não compiladas não são tão eficiente como Java. E mesmo Java não é tão eficiente quanto C devido à coleta de lixo e às ineficiências que ocorrem delegando o mapeamento do código de bytes ao código da máquina para executar o tempo.

Muitas experimentações em aprendizado de máquina empregam o Python, outra linguagem maravilhosa, mas a maior parte do trabalho que fiz no Python foi transportada para C ++ computacionalmente eficiente, com ganhos de velocidade de aproximadamente 1.000 a um em muitos casos. Até a pesquisa do método C ++ era um gargalo, portanto as portas usam muito pouca herança, no estilo ECMA, mas muito mais rápido. No código típico do kernel tradicional, as estruturas C e o uso do ponteiro de função eliminam a sobrecarga da vtable.

O segundo requisito dos manipuladores modulares é razoável e implica um ambiente de regras acionado que muitos podem ser tentados a pensar que é incompatível com arquiteturas NN, mas não é. Uma vez identificadas as categorias de padrões, procurar as mais comuns primeiro em mais dados de entrada já está implícito na distinção conhecida / desconhecida já incorporada no processo acima. No entanto, há um desafio com essa abordagem modular.

Como a integridade do sistema é frequentemente indicada por tendências e não por entradas únicas (como discutido acima) e porque a integridade do sistema não é uma soma linear do valor de integridade de entradas individuais, a abordagem modular para lidar com entradas não deve ser apenas canalizada para a exibição sem mais informações. análise. É aqui que as redes neurais fornecerão os maiores ganhos funcionais no monitoramento da saúde. As saídas dos módulos devem entrar em uma rede neural que possa ser treinada para identificar essas indicações não lineares de saúde, perigos iminentes e condições de risco.

Além disso, o aspecto temporal do comportamento de pré-falha implica que uma janela de tempo inteira de entradas de log de tamanho considerável deve entrar nessa rede. Isso implica ainda a inadequação do ECMA ou Python como uma opção para a parte computacionalmente intensiva da solução. (Observe que a tendência no Python é fazer o que faço com C ++: Use design orientado a objetos, encapsulamento e padrões de design fáceis de seguir para código de supervisão e código semelhante ao kernel muito eficiente em termos computacionais para aprendizado real e outros intensivos em computação ou em dados funções.)

Algoritmos de picking

Não é recomendável escolher algoritmos nos estágios iniciais da arquitetura (como estava implícito no final da pergunta). Arquive o processo primeiro. Determine os componentes de aprendizagem, o tipo necessário, o estado de objetivo após o treinamento, onde o reforço pode ser usado e como o sinal de bem-estar / erro será gerado para reforçar / corrigir o comportamento de rede desejado. Baseie essas determinações não apenas no conteúdo de exibição desejado, mas no rendimento esperado, nos requisitos de recursos de computação e na taxa efetiva mínima de aprendizado. Algoritmos, idioma e planejamento de capacidade para o sistema só podem ser selecionados de maneira significativa depois que todas essas coisas forem definidas pelo menos aproximadamente.

Trabalho semelhante na produção

A análise adaptativa simples está sendo executada no laboratório aqui como parte da automação de redes sociais, mas apenas para conjuntos limitados de símbolos e padrões seqüenciais. Ele é dimensionado sem reconfiguração para unidades, prefixos, terminações e sufixos linguísticos arbitrariamente grandes, limitados apenas por nossas capacidades e taxa de transferência de hardware. A existência de bibliotecas de expressões regulares foi útil para manter o design simples. Utilizamos a biblioteca da série PCRE versão 8, alimentada por uma forma ansiotrópica de DCNN para a extração de recursos de uma janela que se move pelo texto de entrada com um tamanho de janela configurável e move o tamanho do incremento. As heurísticas aplicadas às estatísticas de entrada de texto reunidas em uma primeira passagem produzem um conjunto de PCREs hipotéticos organizados em duas camadas.

A otimização ocorre para aplicar pesos probabilísticos mais altos aos melhores PCREs em uma pesquisa de texto caoticamente perturbada. Ele usa as mesmas estratégias de convergência de descida em gradiente usadas na propagação traseira de NN no treinamento. É uma abordagem ingênua que não faz suposições como a existência de rastreamentos, arquivos ou erros. Adaptava-se igualmente às mensagens em árabe e às espanholas.

A saída é um gráfico direcionado arbitrário na memória, semelhante a um despejo de um banco de dados orientado a objetos.

قنبلة -> dangereux -> 4anlyss
bomba -> dangereux
ambiguïté -> 4anlyss -> préemption -> قنبلة

Embora um algoritmo reentrante para uma versão de reforço seja eliminado e o sinal de bem-estar já esteja disponível, outro trabalho se antecipou ao aprofundar o analisador adaptativo ou ao avançar para a próxima etapa para usar o trabalho em linguagem natural: Combinando os gráficos direcionados ao gráfico direcionado persistente filtros que representam idéias, que imitariam o aspecto da lembrança da compreensão da linguagem.

Comentários finais

O sistema possui componentes e arquitetura de processo semelhantes ao problema de análise de log e prova os conceitos listados acima. Obviamente, quanto mais desorganização na maneira como o log é feito entre os desenvolvedores do sistema que faz o log, mais difícil é para um agente humano ou artificial desambiguar as entradas. Alguns logs do sistema têm um controle de qualidade tão ruim por tanto tempo que o log é quase inútil.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.