Лучшее использование LSTM для прогнозирования событий последовательности

9

Предположим следующую одномерную последовательность:

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 в какой-то момент, но пока нет.

Итак, мои (под) вопросы:

  1. Учитывая вышеуказанную проблему, и я хотел бы поэкспериментировать с LSTM, стоит ли попробовать подход типа char-rnn, должен ли я прикусить пулю и разобраться с CTC, или есть лучшее место для начала.
  2. Как бы вы явно включили информацию о времени между событиями. Использование фиксированных часов с неактивными событиями, очевидно, работает, но кажется уродливым.
  3. Предполагая, что мне удалось обучить LSTM, есть ли способ проверить модель, чтобы увидеть, какие «мотивы» события она подобрала? (т. е. аналогично фильтрам в конветах)

Любой пример кода (предпочтительно Python) всегда полезен.

Изменить: Просто чтобы добавить, что в последовательности есть некоторый шум. Некоторые события можно смело игнорировать, но какие именно не всегда можно сказать заранее. Таким образом, в идеале модель (и мотивы, полученные из нее) устойчивы к этому.

dgorissen
источник
Что это за набор данных?
пир
@felbo: ​​Я не могу сказать, к сожалению, но его данные с аппаратного обеспечения, а не финансовые / продажи / реклама / ..
dgorissen
Хорошо. На самом деле, горячее кодирование (в моем ответе) может быть проблематичным, если у вас ~ 10 тыс. Типов событий. Возможно, вы могли бы сделать что-то вроде word2vec, чтобы у вас было всего ~ 300 входных измерений. Точно так же, вероятно, проблематично предсказать следующий тип события из 10k вариантов. Вместо этого было бы целесообразно переосмыслить проблему, чтобы просто предсказать 100 специальных типов, а затем класс «нормальное событие» для всех 10 000 нормальных событий.
пир
Просто чтобы прояснить: я предполагаю, что у вас есть тонны данных для такого рода проблем.
пир
@felbo: ​​действительно. Я думал о том, чтобы просто использовать индекс, изучить вектор, встраиваемый как word2vec, или сгруппировать события в классы, чтобы уменьшить размерность. Похоже на предсказание, согласился.
Дгориссен

Ответы:

4

Ваши данные кажутся просто последовательностями токенов. Попробуйте создать автоэнкодер LSTM и позвольте кодировщику узнать некоторые фиксированные представления первой части вашей последовательности и декодера, чтобы предсказать оставшиеся.

Эти представления будут вашими мотивами.

Ref:

Богданау Д., Чо К. и Бенгио Ю. (2014). Нейронный машинный перевод путем совместного обучения выравниванию и переводу. Препринт arXiv arXiv: 1409.0473.

Сривастава Н., Мансимов Е., Салахутдинов Р. (2015). Изучение видео представлений без присмотра с использованием LSTM. Препринт arXiv arXiv: 1502.04681.

horaceT
источник
1

Наиболее важной частью является то, как вы «формулируете» проблему классификации, имея в виду, как вы представляете входные данные и что вы хотите вывести. Видя, что у вас так много разных типов событий, вы должны изучить их встраивание. Это можно сделать непосредственно, например, в Керасе. Вы можете увидеть этот примеро том, как узнать вложение непосредственно из данных. Другой подход заключается в том, чтобы заранее изучить встраивание, используя неконтролируемый подход, такой как word2vec. Однако это требует больше работы с вашей стороны, так как вам нужно придумать соответствующую задачу и обучить ее генерации встраивания. Учитывая, что у вас достаточно данных, проще (хотя и немного менее эффективно) изучить встраивание напрямую. Для вывода я не буду предсказывать все различные типы событий, а только специальные события и «фоновый класс», чтобы сохранить проблему выполнимой. Если вы действительно хотите иметь возможность предсказывать каждый отдельный класс, вам нужно использовать некоторые приемы (посмотрите, как это делает word2vec).

Относительно времени между событиями. Вы можете просто добавить это к своему LSTM в качестве дополнительного измерения (см., Например, это для примера того, как это сделать в Keras). Это было бы легко сделать и позволило бы LSTM принять во внимание разницу во времени.

Я не знаю ни одного способа визуализировать мотивы, «раскручивая» временную природу сети. Возможно, вы сможете сгенерировать некоторые мотивы, используя генеративную сеть, но, вероятно, это будет трудно интерпретировать. Один из способов изучения мотивов может состоять в том, чтобы просто найти 100000 наиболее распространенных последовательностей не специальных событий, например, длиной 20-100, ввести их в обученную модель и извлечь выход вероятности из конечного слоя softmax. Таким образом, вы можете найти последовательности, которые связаны с определенными специальными событиями. Однако трудно сказать, возможен ли этот мотивный подход / полезен, не глядя на ваши данные.

PIR
источник
Просто быть чистым. Что касается мотивов, вы имеете в виду просмотр необработанных данных и извлечение наиболее распространенных подпоследовательностей определенной минимальной длины (или использование частого анализа наборов элементов для их генерации), а затем посмотрите, где максимальные прогнозы специальных событий? В таком случае кажется, что это проще, чем стандартная классификация. Нет?
Дгориссен
Я надеялся, что зависящий от времени характер повторяющейся модели позволит провести какую-то полезную проверку. В качестве альтернативы, возможно, нужно запустить модель «в обратном порядке». Максимизируйте достоверность прогноза для каждого особого типа события и посмотрите, к каким последовательностям это приводит. Однако не совсем уверен, как это будет работать и, возможно, потребуется генеративная модель.
Дгориссен
1
Пожалуйста, смотрите мой обновленный ответ. Да, я имею в виду видеть, где «предсказания особых событий максимальны» на основе необработанных данных. Я не понимаю, что вы имеете в виду, рассматривая это как стандартную проблему классификации :)
pir