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:
- 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.
- 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.
- 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.