Pracuję nad narzędziem AI, aby znaleźć błędy znanych urządzeń i znaleźć nowe wzorce awarii. Ten plik dziennika jest oparty na czasie i zawiera znane komunikaty (informacje i błędy). Korzystam z biblioteki JavaScript. Zdarzenie spada, aby wyświetlać dane w miękki sposób, ale moim prawdziwym zadaniem i wątpliwościami jest trenowanie sztucznej inteligencji w celu znalezienia znanego wzory i znajdź nowe możliwe wzory. Mam pewne wymagania:
1 - Narzędzie powinno: nie ma zależności od instalacji dodatkowego środowiska lub b. im mniej, tym lepiej (idealny scenariusz to uruchomienie narzędzia całkowicie w przeglądarce w trybie autonomicznym);
2 - Możliwość fragmentacji analizatora wzorców, rodzaj modułowości, jeden moduł na błąd;
Jaki jest zalecany rodzaj algorytmu do tego celu (sieć neuronowa, algorytm genetyczny itp.)? Czy istnieje coś do pracy przy użyciu JavaScript? Jeśli nie, jaki jest najlepszy język do stworzenia tej sztucznej inteligencji?
źródło
Odpowiedzi:
Korelacja między wpisami
Pierwszym zaleceniem jest zapewnienie, aby odpowiednie wpisy ostrzegawcze i informacyjne w pliku dziennika były prezentowane wraz z błędami w komponentach uczenia maszynowego rozwiązania. Wszystkie wpisy dziennika są potencjalnie użytecznymi danymi wejściowymi, jeśli istnieje możliwość korelacji między komunikatami informacyjnymi, ostrzeżeniami i błędami. Czasami korelacja jest silna, a zatem kluczowa dla maksymalizacji wskaźnika uczenia się.
Administratorzy systemu często postrzegają to jako serię ostrzeżeń, po których występuje błąd spowodowany stanem wskazanym w ostrzeżeniach. Informacje zawarte w ostrzeżeniach wskazują bardziej na pierwotną przyczynę niepowodzenia niż na wpis błędu utworzony, gdy system lub podsystem ulega krytycznej awarii.
Jeśli ktoś buduje pulpit nawigacyjny kondycji systemu dla urządzenia lub szeregu współpracujących maszyn, co wydaje się mieć miejsce w tym pytaniu, główną przyczyną problemów i pewną możliwością wczesnego ostrzegania są kluczowe informacje do wyświetlenia.
Co więcej, nie wszystkie złe warunki zdrowotne systemu kończą się niepowodzeniem.
Jedynymi wpisami dziennika, które należy wyeliminować przez filtrację przed prezentacją w mechanizmie uczenia się, są z pewnością nieistotne i nieskorelowane. Może się tak zdarzyć, gdy plik dziennika stanowi agregację rejestrowania z kilku systemów. W takim przypadku wpisy dla analizowanego niezależnego systemu należy wyodrębnić jako izolację od wpisów, które nie mogłyby być skorelowane z analizowanymi zjawiskami.
Należy zauważyć, że ograniczenie analizy do jednego wpisu na raz znacznie ogranicza użyteczność pulpitu nawigacyjnego. Kondycja systemu nie jest równa wskazaniom kondycji najnowszego wpisu dziennika. To nie jest nawet liniowa suma wskazań zdrowotnych ostatnich N wpisów.
Zdrowie systemu ma bardzo nieliniowe i bardzo tymczasowo zależne relacje z wieloma wpisami. Wzorce mogą pojawiać się stopniowo w ciągu kilku dni na wielu typach systemów. Podstawowa (lub podstawowa) sieć neuronowa w systemie musi zostać przeszkolona w zakresie rozpoznawania tych nieliniowych oznak zdrowia, zbliżających się niebezpieczeństw i warunków ryzyka, jeśli pożądana jest wysoce użyteczna deska rozdzielcza. Aby wyświetlić prawdopodobieństwo zbliżającej się awarii lub problemu z kontrolą jakości, całe okno czasowe wpisów dziennika o znacznej długości musi wejść do tej sieci neuronowej.
Rozróżnienie między znanymi i nieznanymi wzorami
Zauważ, że identyfikacja znanych wzorów różni się pod jednym ważnym względem niż identyfikacja nowych wzorów. Zidentyfikowano już osobliwości składni wpisów znanych błędów, co znacznie zmniejsza obciążenie związane z uczeniem się na etapach normalizacji wejściowej przetwarzania tych wpisów. Najpierw należy odkryć osobliwości składniowe nowych typów błędów.
Wpisy znanego typu można również oddzielić od nieznanych, umożliwiając wykorzystanie znanych typów wpisów jako danych szkoleniowych, aby pomóc w nauce nowych wzorców składniowych. Celem jest przedstawienie znormalizowanej syntaktycznie informacji analizie semantycznej.
Pierwszy etap normalizacji specyficzny dla plików dziennika
Jeśli znacznik czasu jest zawsze w tym samym miejscu we wpisach, konwersja go na względne milisekundy i być może usunięcie znaków 0x0d przed znakami 0x0a może być wykonane przed czymkolwiek innym, jako pierwszy krok w normalizacji. Ślady stosu można również złożyć w tablice poziomów śledzenia rozdzielane tabulatorami, dzięki czemu istnieje odpowiednik jeden do jednego między wpisami dziennika i wierszami dziennika.
Informacje znormalizowane składniowo, pochodzące zarówno ze znanych, jak i nieznanych wpisów wpisów typu błędu i innych niż błędy, mogą być następnie przedstawiane sieciom bez nadzoru w celu naiwnej identyfikacji kategorii struktury semantycznej. Nie chcemy kategoryzować liczb ani zmiennych tekstowych, takich jak nazwy użytkowników lub numery seryjne części.
Jeśli znormalizowana składniowo informacja zostanie odpowiednio oznaczona, aby wskazać bardzo zmienne symbole, takie jak liczby, pojemności, metryki i znaczniki czasu, można zastosować ekstrakcję cech, aby poznać wzorce ekspresji w sposób, który zachowuje rozróżnienie między strukturą semantyczną a zmiennymi. Utrzymanie tego rozróżnienia pozwala na śledzenie bardziej ciągłych (mniej dyskretnych) trendów w pomiarach systemowych. Każdy wpis może mieć zero lub więcej takich zmiennych, bez względu na to, czy są one znane z góry, czy niedawno uzyskane poprzez ekstrakcję cech.
Tendencje można zestawiać z czasem lub liczbą wystąpień określonego rodzaju. Taka grafika może pomóc w identyfikacji zmęczenia mechanicznego, podejściu warunków nadmiernej wydajności lub innych ryzykach, które eskalują do punktu awarii. Dalsze sieci neuronowe można wyszkolić w zakresie wytwarzania wskaźników ostrzegawczych, gdy trendy wskazują, że zbliżają się takie warunki.
Leniwe logowanie
Cała ta analiza dziennika byłaby dyskusyjna, gdyby architekci oprogramowania i specjaliści ds. Technologii przestali pozostawiać format przechowywania ważnych informacji systemowych różnym dogodnym zachciankom twórców oprogramowania. Pliki dziennika są na ogół bałaganem, a ekstrakcja informacji statystycznych o wzorcach w nich jest jednym z najczęstszych wyzwań w kontroli jakości oprogramowania. Prawdopodobieństwo, że rygor będzie powszechnie stosowany do rejestrowania, jest niewielkie, ponieważ żadna z popularnych ram rejestrowania nie zachęca do rygorystyczności. Najprawdopodobniej to pytanie było często oglądane.
Sekcja wymagań tego konkretnego pytania
W konkretnym przypadku przedstawionym w tym pytaniu wymaganie nr 1 wskazuje na preferencję uruchomienia analizy w przeglądarce, co jest możliwe, ale niezalecane. Mimo że ECMA jest wspaniałym językiem skryptowym, a mechanizm wyrażeń regularnych, który może być pomocny w nauce parserów, jest wbudowany w ECMA (który spełnia drugą część wymagania nr 1, nie wymagając dodatkowych instalacji), języki nieskompilowane nie są tak podobne wydajny jak Java. Nawet Java nie jest tak wydajna jak C z powodu wyrzucania elementów bezużytecznych i nieefektywności, które występują po delegowaniu odwzorowania kodu bajtowego na kod maszynowy w celu uruchomienia.
Wiele eksperymentów w uczeniu maszynowym wykorzystuje Python, kolejny wspaniały język, ale większość pracy, którą wykonałem w Pythonie, została następnie przeniesiona do wydajnego obliczeniowo C ++, w wielu przypadkach przyspieszając prawie 1000 do 1. Nawet wyszukiwanie metody w C ++ było wąskim gardłem, więc porty używają bardzo mało dziedziczenia, w stylu ECMA, ale znacznie szybciej. W typowym tradycyjnym kodzie jądra, użycie struktur C i wskaźnika funkcji eliminuje narzut vtable.
Drugie wymaganie modułowych procedur obsługi jest rozsądne i implikuje uruchamiane środowisko reguł, które wielu może ulec pokusie, aby myśleć, że jest niezgodne z architekturami NN, ale tak nie jest. Po zidentyfikowaniu kategorii wzorców, poszukiwanie najbardziej powszechnych najpierw w dalszych danych wejściowych jest już implikowane w znanym / nieznanym rozróżnieniu już wbudowanym w powyższy proces. Podejście modułowe stanowi jednak wyzwanie.
Ponieważ kondycja systemu jest często wskazywana przez trendy, a nie pojedyncze wpisy (jak omówiono powyżej), a ponieważ kondycja systemu nie jest liniową sumą wartości kondycji poszczególnych wpisów, modułowe podejście do obsługi wpisów nie powinno być tylko przesyłane do wyświetlacza bez dalszych analiza. To w rzeczywistości sieci neuronowe zapewnią największe korzyści funkcjonalne w monitorowaniu zdrowia. Wyjścia modułów muszą wejść do sieci neuronowej, którą można przeszkolić w celu identyfikacji tych nieliniowych oznak zdrowia, zbliżających się niebezpieczeństw i warunków ryzyka.
Ponadto aspekt czasowy zachowania przed awarią oznacza, że całe okno czasowe wpisów dziennika o znacznej długości musi wejść do tej sieci. To dodatkowo implikuje niewłaściwość ECMA lub Pythona jako wyboru dla obliczeniowej części rozwiązania. (Zauważ, że trend w Pythonie polega na robieniu tego, co robię z C ++: używaj projektowania obiektowego, enkapsulacji i łatwych do naśladowania wzorców projektowych dla kodu nadzorczego i bardzo wydajnego obliczeniowego kodu podobnego do jądra do faktycznego uczenia się i innych intensywnych obliczeniowo lub intensywnie danych Funkcje.)
Algorytmy kompletacji
Nie zaleca się wybierania algorytmów na początkowych etapach architektury (jak sugerowano na końcu pytania). Najpierw zaprojektuj proces. Określić elementy uczenia się, ich potrzebny rodzaj, ich cel po treningu, gdzie można zastosować wzmocnienie, oraz w jaki sposób zostanie wygenerowany sygnał odnowy / błędu, aby wzmocnić / skorygować pożądane zachowanie sieci. Oprzyj te ustalenia nie tylko na pożądanej zawartości ekranu, ale na oczekiwanej przepustowości, wymaganiach dotyczących zasobów obliczeniowych i minimalnej efektywnej szybkości uczenia się. Algorytmy, język i planowanie wydajności systemu można sensownie wybrać tylko po dokładnym zdefiniowaniu wszystkich tych rzeczy.
Podobne prace w produkcji
Prosta analiza adaptacyjna jest tutaj przeprowadzana w ramach automatyzacji sieci społecznościowych, ale tylko w przypadku ograniczonego zestawu symboli i wzorców sekwencyjnych. Skaluje się bez rekonfiguracji do dowolnie dużych bazowych jednostek językowych, prefiksów, zakończeń i sufiksów, ograniczonych tylko przez nasze możliwości sprzętowe i przepustowość. Istnienie bibliotek wyrażeń regularnych pomogło w uproszczeniu projektu. Korzystamy z biblioteki serii PCRE w wersji 8 zasilanej przez ansiotropową formę DCNN do ekstrakcji funkcji z okna poruszającego się po wprowadzanym tekście o konfigurowalnym rozmiarze okna i rozmiarze przyrostu ruchu. Heurystyka zastosowana do statystyk tekstu wejściowego zebranych w pierwszym przejściu tworzy zestaw hipotetycznych PCRE ułożonych w dwóch warstwach.
Optymalizacja ma na celu zastosowanie wyższych wag probabilistycznych do najlepszych PCRE w chaotycznie zaburzonym wyszukiwaniu tekstu. Wykorzystuje te same strategie zbieżności opadania gradientu, jakie stosuje się w propagacji wstecznej NN w treningu. Jest to naiwne podejście, które nie przyjmuje założeń, takich jak istnienie śladów wstecz, plików lub błędów. Dostosowałby się zarówno do wiadomości arabskich, jak i hiszpańskich.
Dane wyjściowe to dowolnie ukierunkowany wykres w pamięci, który jest podobny do zrzutu obiektowej bazy danych.
Mimo że algorytm ponownego wejścia dla wersji wzmacniającej jest zgaszony, a sygnał odnowy biologicznej jest już dostępny, inne prace zostały wstrzymane, aby rozwinąć parser adaptacyjny lub przejść do następnego kroku, aby użyć pracy dla języka naturalnego: Dopasowywanie wykresów skierowanych do utrwalonego wykresu kierowanego filtry reprezentujące pomysły, które naśladują aspekt przypominania aspektu rozumienia języka.
Ostatnie komentarze
System ma komponenty i architekturę procesu podobne do problemu analizy logów i potwierdza powyższe koncepcje. Oczywiście, im więcej dezorganizacji w sposobie rejestrowania między twórcami systemu wykonującego rejestrowanie, tym trudniej jest jednoznacznie utrudnić ludzkiemu lub sztucznemu agentowi jednoznaczne wpisy. Niektóre rejestrowanie systemu tak słabo kontroluje jakość, że dziennik jest prawie bezużyteczny.
źródło