Najlepsze wykorzystanie LSTM do przewidywania zdarzeń w obrębie sekwencji

9

Załóżmy następującą sekwencję 1 wymiarową:

A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...

Litery A, B, C, ..tutaj reprezentują „zwykłe” wydarzenia.

Symbole #, $, %, ...tutaj reprezentują zdarzenia „specjalne”

Czasowy odstęp między wszystkimi zdarzeniami jest nierównomierny (od sekund do dni), chociaż im dalej w przeszłości wydarzenie, tym mniejsze prawdopodobieństwo, że wpłynie na przyszłe wydarzenia. Idealnie mogę wyraźnie uwzględnić te opóźnienia czasowe.

Istnieje rząd 10000 zwykłych rodzajów zdarzeń i 100 specjalnych rodzajów zdarzeń. Liczba zwykłych zdarzeń poprzedzających wydarzenie specjalne jest różna, ale raczej nie przekracza 100-300.

Zasadniczo jestem zainteresowany wyszukiwaniem wzorców w zwykłej sekwencji zdarzeń, które ostatecznie przewidują zdarzenia specjalne.

Teraz możesz podejść do tego na różne sposoby: tworzenie wektorów cech + standardowa klasyfikacja, uczenie się reguł asocjacyjnych, HMM itp.

W tym przypadku jestem ciekawy, jak najlepiej dopasować sieć oparta na LSTM. Łatwo byłoby zrobić coś takiego, jak charakter Karparthy'ego i przewidzieć następne wydarzenie, biorąc pod uwagę historię. Następnie dla nowej sekwencji

C, Z, Q, V, V, ... , V, W

Możesz uruchomić go przez model i zobaczyć, jakie wydarzenie specjalne jest najbardziej prawdopodobne. Ale nie do końca pasuje.

Ponieważ jest to problem z klasyfikacją czasową, wydaje się, że właściwym rozwiązaniem jest skorzystanie z Klasyfikacji Czasowej Łącznika, zgodnie z opisem Alexa Gravesa .

Jednak zanim zainwestuję w tej chwili za dużo, szukam czegoś łatwiejszego i szybszego do eksperymentowania, aby przekonać się, jak dobrze pasują tutaj LSTM. W pewnym momencie Tensorflow zobaczy przykład CTC , ale jeszcze nie.

Więc moje (pod) pytania to:

  1. Biorąc pod uwagę powyższy problem i chciałbym eksperymentować z LSTM, czy warto wypróbować podejście typu char-rnn, czy powinienem ugryźć kulę i opanować CTC, czy też jest lepsze miejsce na start.
  2. Jak byś wyraźnie uwzględnił informacje dotyczące czasu między zdarzeniami. Korzystanie ze stałego zegara ze zdarzeniami braku operacji oczywiście działa, ale wydaje się brzydkie.
  3. Zakładając, że udało mi się wyszkolić LSTM, czy istnieje sposób na sprawdzenie modelu, aby zobaczyć, jakie rodzaje „motywów” zdarzenia udało się wykryć? (tj. analogicznie do filtrów w sieciach konwekcyjnych)

Każdy przykładowy kod (preferowany python) zawsze jest pomocny.

Edycja: Wystarczy dodać, że w sekwencji jest trochę hałasu. Niektóre zdarzenia można bezpiecznie zignorować, ale dokładnie tych, które nie zawsze można powiedzieć z góry. Idealnie więc model (i motywy z niego wywodzące) jest odporny na to.

dgorissen
źródło
Co to za zestaw danych?
pir
@felbo: Nie mogę powiedzieć jednoznacznie, ale niestety jego dane z konstrukcji metalowych, a nie sprzedaży / finansowe / reklamy / ..
dgorissen
Ok. W rzeczywistości kodowanie „na gorąco” (w mojej odpowiedzi) może być problematyczne, jeśli masz ~ 10 000 typów zdarzeń. Być może możesz zrobić coś w stylu word2vec, więc masz tylko ~ 300 wymiarów wejściowych. Podobnie prawdopodobnie problematyczne jest przewidywanie następnego typu zdarzenia spośród 10 000 opcji. Zamiast tego sensowne byłoby przeformułowanie problemu, aby przewidzieć 100 typów specjalnych, a następnie klasę „normalnego zdarzenia” dla wszystkich 10 000 normalnych zdarzeń.
pir
Żeby było jasne: zakładam, że masz mnóstwo danych na ten problem.
pir
@felbo: ​​rzeczywiście. Zastanawiałem się nad użyciem indeksu, nauczeniem się osadzania wektora, takiego jak word2vec, lub zgrupowaniem zdarzeń w klasy w celu zmniejszenia wymiarów. Podobnie po stronie prognostycznej, zgodził się.
dgorissen,

Odpowiedzi:

4

Twoje dane wydają się być tylko sekwencjami tokenów. Spróbuj zbudować automatyczny koder LSTM i pozwól, aby koder nauczył się pewnych stałych reprezentacji pierwszej części sekwencji i dekodera, aby przewidzieć pozostałe.

Te przedstawienia będą twoimi motywami.

Ref:

Bahdanau, D., Cho, K., i Bengio, Y. (2014). Tłumaczenie maszyn neuronowych poprzez wspólną naukę wyrównywania i tłumaczenia. nadruk arXiv arXiv: 1409.0473.

Srivastava, N., Mansimov, E., i Salakhutdinov, R. (2015). Uczenie się reprezentacji wideo bez nadzoru przy użyciu LSTM. nadruk arXiv arXiv: 1502.04681.

horaceT
źródło
1

Najważniejsze jest to, jak „sformułować” problem klasyfikacji, co oznacza, w jaki sposób reprezentujesz dane wejściowe i co chcesz wygenerować. Ponieważ masz tak wiele różnych rodzajów zdarzeń, musisz nauczyć się ich osadzania. Można to zrobić bezpośrednio np. W Keras. Możesz zobaczyć ten przykładjak nauczyć się osadzania bezpośrednio z danych. Innym podejściem byłoby wcześniejsze nauczenie się osadzania przy użyciu podejścia bez nadzoru, takiego jak word2vec. Wymaga to jednak więcej pracy z Twojej strony, ponieważ musisz wymyślić odpowiednie zadanie i przeszkolić je, aby wygenerować osadzanie. Biorąc pod uwagę, że masz wystarczającą ilość danych, łatwiej jest (choć nieco mniej skutecznie) bezpośrednio nauczyć się osadzania. W przypadku wyników nie przewidziałbym wszystkich różnych rodzajów zdarzeń, a jedynie zdarzenia specjalne i „klasę tła”, aby problem był wykonalny. Jeśli naprawdę chcesz przewidzieć każdą klasę, musisz użyć kilku sztuczek (zobacz, jak to robi word2vec).

Jeśli chodzi o czas między zdarzeniami. Możesz po prostu dodać to do LSTM jako dodatkowy wymiar (zobacz np. To, jak to zrobić w Keras). Byłoby to łatwe i pozwoliłoby LSTM uwzględnić różnicę czasową.

Nie znam żadnego sposobu wizualizacji motywów poprzez „rozwijanie” temporalnej natury sieci. Możesz generować niektóre motywy za pomocą sieci generatywnej, ale prawdopodobnie trudno będzie je zinterpretować. Jednym ze sposobów eksploracji motywów może być po prostu znalezienie 100 000 najpopularniejszych sekwencji nietypowych zdarzeń, np. O długości 20–100, wprowadzenie ich do wyuczonego modelu i wyodrębnienie wyniku prawdopodobieństwa z końcowej warstwy softmax. W ten sposób można znaleźć sekwencje powiązane z określonymi wydarzeniami specjalnymi. Trudno jednak powiedzieć, czy to podejście motywacyjne jest wykonalne / użyteczne bez patrzenia na twoje dane.

pir
źródło
Żeby było jasne. Po stronie motywu masz na myśli przeglądanie nieprzetworzonych danych i wyodrębnianie najczęstszych podsekwencji o określonej minimalnej długości (lub generowanie ich przy użyciu częstego zestawów elementów), a następnie sprawdzenie, gdzie przewidywania zdarzeń specjalnych są maksymalne? W takim przypadku łatwiej jest podejść do tego jako do standardowego problemu z klasyfikacją nie?
dgorissen,
Miałem nadzieję, że zależny od czasu charakter modelu cyklicznego pozwoli na jakąś przydatną analizę. Alternatywnie być może należałoby uruchomić model w odwrotnej kolejności. Zmaksymalizuj pewność przewidywania każdego rodzaju zdarzenia specjalnego i zobacz, jakiego rodzaju sekwencje to skutkuje. Nie jestem jednak pewien, jak to zadziała i być może potrzebuje modelu generatywnego.
dgorissen,
1
Proszę zobaczyć moją zaktualizowaną odpowiedź. Tak, mam na myśli sprawdzenie, gdzie „przewidywania zdarzeń specjalnych są maksymalne” na podstawie surowych danych. Nie rozumiem, co masz na myśli mówiąc o standardowym problemie klasyfikacyjnym :)
pir