Nehmen Sie die folgende eindimensionale Sequenz an:
A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...
Buchstaben A, B, C, ..
hier repräsentieren "gewöhnliche" Ereignisse.
Symbole stehen #, $, %, ...
hier für "besondere" Ereignisse
Der zeitliche Abstand zwischen allen Ereignissen ist ungleichmäßig (von Sekunden bis zu Tagen). Je weiter in der Vergangenheit ein Ereignis liegt, desto weniger wahrscheinlich ist es, dass es zukünftige Ereignisse beeinflusst. Im Idealfall kann ich diese Zeitverzögerungen explizit berücksichtigen.
Es gibt in der Größenordnung von 10000 gewöhnlichen Ereignistypen und in der Größenordnung von 100 speziellen Ereignistypen. Die Anzahl der gewöhnlichen Ereignisse vor einem besonderen Ereignis variiert, es ist jedoch unwahrscheinlich, dass sie mehr als 100-300 betragen.
Grundsätzlich bin ich daran interessiert, nach Mustern in der gewöhnlichen Ereignissequenz zu suchen, die letztendlich die besonderen Ereignisse vorhersagen.
Jetzt können Sie dies auf verschiedene Arten angehen: Erstellen von Merkmalsvektoren + Standardklassifizierung, Lernen von Assoziationsregeln, HMMs usw.
In diesem Fall bin ich gespannt, wie ein LSTM-basiertes Netzwerk am besten passt. Unkompliziert wäre es, so etwas wie Karparthys Charakter zu tun und das nächste Ereignis in einer bestimmten Geschichte vorherzusagen. Dann für eine neue Sequenz
C, Z, Q, V, V, ... , V, W
Sie können es durch das Modell laufen lassen und sehen, welches besondere Ereignis am wahrscheinlichsten als nächstes kommt. Aber es fühlt sich nicht ganz richtig an.
Da dies ein zeitliches Klassifizierungsproblem ist, scheint es jedoch angebracht zu sein, die von Alex Graves beschriebene Connectionist Temporal Classification zu verwenden .
Bevor ich jedoch im Moment zu viel investiere, suche ich nach etwas, mit dem ich einfacher und schneller experimentieren kann, um ein Gefühl dafür zu bekommen, wie gut LSTMs hier passen würden. Tensorflow wird irgendwann ein CTC-Beispiel sehen , aber noch nicht.
Meine (Unter-) Fragen sind also:
- Angesichts des oben genannten Problems und ich würde gerne mit LSTMs experimentieren, lohnt es sich, den Ansatz vom Typ char-rnn auszuprobieren, sollte ich in die Kugel beißen und mich mit CTC auseinandersetzen, oder gibt es einen besseren Ausgangspunkt.
- Wie würden Sie explizit Inter-Event-Timing-Informationen einbinden? Die Verwendung einer festen Uhr mit No-Op-Ereignissen funktioniert offensichtlich, scheint aber hässlich.
- Angenommen, ich habe es geschafft, ein LSTM zu trainieren, gibt es eine Möglichkeit, das Modell zu untersuchen, um festzustellen, welche Art von Ereignismotiven es aufgenommen hat? (dh analog zu den Filtern in Convnets)
Jeder Beispielcode (Python bevorzugt) ist immer hilfreich.
Bearbeiten: Nur um hinzuzufügen, dass die Sequenz etwas Rauschen enthält. Einige Ereignisse können ignoriert werden, aber genau welche können nicht immer im Voraus gesagt werden. Idealerweise ist das Modell (und die daraus abgeleiteten Motive) dagegen robust.