Supposons la séquence unidimensionnelle suivante:
A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...
Les lettres A, B, C, ..
ici représentent des événements «ordinaires».
Les symboles #, $, %, ...
ici représentent des événements «spéciaux»
L'espacement temporel entre tous les événements est non uniforme (de quelques secondes à quelques jours), bien que plus un événement dans le passé est faible, moins il est susceptible d'influencer des événements futurs. Idéalement, je peux prendre en compte ces délais de manière explicite.
Il existe de l'ordre de 10000 types d'événements ordinaires et de l'ordre de 100 types d'événements spéciaux. Le nombre d'événements ordinaires précédant un événement spécial varie, mais il est peu probable qu'il soit supérieur à 100-300.
Fondamentalement, je suis intéressé par la recherche de modèles dans la séquence d'événements ordinaires qui finissent par être prédictifs pour les événements spéciaux.
Vous pouvez maintenant aborder cela de différentes manières: création de vecteurs d'entités + classification standard, apprentissage des règles d'association, HMM, etc.
Dans ce cas, je suis curieux de savoir comment un réseau basé sur LSTM conviendrait le mieux. Il serait simple de faire quelque chose comme le char-rnn de Karparthy et de prédire le prochain événement compte tenu d'une histoire. Puis pour une nouvelle séquence
C, Z, Q, V, V, ... , V, W
Vous pouvez le parcourir à travers le modèle et voir quel événement spécial est le plus probable à venir. Mais il ne se sent pas tout à fait adapté.
Comme il s'agit d'un problème de classification temporelle, il semble que la bonne chose à faire soit d'utiliser la classification temporelle connexionniste telle que décrite par Alex Graves .
Cependant, avant d'investir trop pour le moment, je cherche quelque chose de plus facile et plus rapide à expérimenter pour avoir une idée de la façon dont les LSTM s'intégreraient ici. Tensorflow verra un exemple CTC à un moment donné, mais pas encore.
Mes (sous) questions sont donc:
- Étant donné le problème ci-dessus et j'aimerais expérimenter avec les LSTM, cela vaut-il la peine d'essayer l'approche de type char-rnn, si je mord la balle et me familiarise avec la CTC, ou est-il un meilleur endroit pour commencer.
- Comment incorporeriez-vous explicitement les informations de synchronisation inter-événements? L'utilisation d'une horloge fixe avec des événements sans opération fonctionne évidemment, mais semble moche.
- En supposant que j'ai réussi à former un LSTM, y a-t-il un moyen d'inspecter le modèle pour voir quel type de «motifs» d'événement il a ramassé? (c.-à-d., analogue aux filtres des convnets)
Tout exemple de code (python préféré) est toujours utile.
Edit: Juste pour ajouter qu'il y a du bruit dans la séquence. Certains événements peuvent être ignorés en toute sécurité, mais il n'est pas toujours possible de dire exactement lesquels. Donc, idéalement, le modèle (et les motifs qui en dérivent) est robuste contre cela.