Assumi la seguente sequenza 1 dimensionale:
A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...
Le lettere A, B, C, ..
qui rappresentano eventi "ordinari".
I simboli #, $, %, ...
qui rappresentano eventi "speciali"
La spaziatura temporale tra tutti gli eventi è non uniforme (qualsiasi cosa, dai secondi ai giorni) anche se più in passato un evento ha meno probabilità di influenzare gli eventi futuri. Idealmente, posso tenere conto esplicitamente di questi ritardi.
Esistono nell'ordine di 10000 tipi di eventi ordinari e nell'ordine di 100 tipi di eventi speciali. La quantità di eventi ordinari che precede un evento speciale varia ma è improbabile che sia superiore a 100-300.
Fondamentalmente sono interessato a cercare modelli nella sequenza di eventi ordinari che finiscono per essere predittivi per gli eventi speciali.
Ora puoi affrontarlo in diversi modi: creazione di vettori di funzioni + classificazione standard, apprendimento delle regole di associazione, HMM, ecc.
In questo caso sono curioso di sapere come una rete basata su LSTM si adatterebbe meglio. Semplice sarebbe fare qualcosa come Char-rnn di Karparthy e prevedere il prossimo evento con una storia. Quindi per una nuova sequenza
C, Z, Q, V, V, ... , V, W
Potresti eseguirlo attraverso il modello e vedere quale evento speciale è più probabile che verrà dopo. Ma non sembra del tutto adatto.
Poiché questo è un problema di classificazione temporale, sembra che la cosa giusta da fare sia usare la Classificazione temporale connessa come descritta da Alex Graves .
Tuttavia, prima di investire troppo al momento, sto cercando qualcosa di più facile e veloce da sperimentare per avere un'idea di come gli LSTM si adatterebbero qui. Tensorflow vedrà un esempio CTC ad un certo punto, ma non ancora.
Quindi le mie (sotto) domande sono:
- Dato il problema sopra e mi piacerebbe sperimentare LSTM, vale la pena provare l'approccio di tipo char-rnn, se dovessi mordere il proiettile e mettermi alla prova con CTC, o c'è un posto migliore per iniziare.
- Come incorporeresti esplicitamente le informazioni sui tempi tra eventi. L'uso di un orologio fisso con eventi no-op ovviamente funziona ma sembra brutto.
- Supponendo che sono riuscito a formare un LSTM, c'è un modo per ispezionare il modello per vedere che tipo di "motivi" di eventi ha raccolto? (vale a dire analogo ai filtri nelle convnet)
Qualsiasi codice di esempio (preferito da Python) è sempre utile.
Modifica: solo per aggiungere che c'è un po 'di rumore nella sequenza. Alcuni eventi possono essere tranquillamente ignorati, ma esattamente quali non è sempre possibile dire in anticipo. Quindi idealmente il modello (e i motivi da esso derivati) è robusto contro questo.