Предположим следующую одномерную последовательность:
A, B, C, Z, B, B, #, C, C, C, V, $, W, A, % ...
Письма A, B, C, ..
здесь представляют «обычные» события.
#, $, %, ...
Здесь символы обозначают «особые» события
Временной интервал между всеми событиями является неоднородным (от секунд до дней), хотя чем дальше в прошлом событие, тем меньше вероятность того, что оно повлияет на будущие события. В идеале я могу принять во внимание эти задержки явно.
Существует порядка 10000 обычных типов событий и порядка 100 специальных типов событий. Количество обычных событий, предшествующих специальному событию, варьируется, но вряд ли будет больше 100-300.
По сути, я заинтересован в поиске шаблонов в последовательности обычных событий, которые в конечном итоге будут предсказывать особые события.
Теперь вы можете подходить к этому по-разному: создание векторов признаков + стандартная классификация, изучение правил ассоциации, HMM и т. Д.
В этом случае мне интересно, как лучше всего подойдет сеть на основе LSTM. Просто было бы сделать что-то вроде персонажа Карпарти и предсказать следующее событие с учетом истории. Тогда для новой последовательности
C, Z, Q, V, V, ... , V, W
Вы можете провести его через модель и посмотреть, какое специальное событие наиболее вероятно произойдет дальше. Но это не совсем подходит.
Поскольку это временная проблема классификации, кажется, что это правильное решение - использовать временную классификацию Connectionist, как описано Алексом Грейвсом .
Однако, прежде чем вкладывать слишком много в данный момент, я ищу что-то более простое и быстрое, чтобы поэкспериментировать, чтобы понять, насколько хорошо LSTM подойдет для этого. Tensorflow увидит пример CTC в какой-то момент, но пока нет.
Итак, мои (под) вопросы:
- Учитывая вышеуказанную проблему, и я хотел бы поэкспериментировать с LSTM, стоит ли попробовать подход типа char-rnn, должен ли я прикусить пулю и разобраться с CTC, или есть лучшее место для начала.
- Как бы вы явно включили информацию о времени между событиями. Использование фиксированных часов с неактивными событиями, очевидно, работает, но кажется уродливым.
- Предполагая, что мне удалось обучить LSTM, есть ли способ проверить модель, чтобы увидеть, какие «мотивы» события она подобрала? (т. е. аналогично фильтрам в конветах)
Любой пример кода (предпочтительно Python) всегда полезен.
Изменить: Просто чтобы добавить, что в последовательности есть некоторый шум. Некоторые события можно смело игнорировать, но какие именно не всегда можно сказать заранее. Таким образом, в идеале модель (и мотивы, полученные из нее) устойчивы к этому.