Найкраще використовувати LSTM для прогнозування подій послідовності


9

Припустимо наступну 1 розмірну послідовність:

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

Ви можете запустити його через модель і побачити, яка особлива подія найбільш вірогідна для наступного. Але це не зовсім добре відчуває себе.

Оскільки це тимчасова проблема класифікації, здається, що належним чином зробити це - використовувати коннекціоністську тимчасову класифікацію, як описав Алекс Грейвс .

Однак перед тим, як інвестувати занадто багато на даний момент, я шукаю щось легше та швидше експериментувати, щоб відчути, наскільки добре тут би вмістилися LSTM. Tensorflow побачить приклад CTC в якийсь момент, але поки що.

Отже, мої (під) запитання:

  1. Враховуючи вищезгадану проблему, і я хотів би поекспериментувати з LSTM, чи варто спробувати підхід типу char-rnn, чи повинен я кусати кулю і впоратися з CTC, чи є краще місце для початку.
  2. Як би ви чітко включали інформацію про терміни між подіями. Використання фіксованого годинника без подій без операції, очевидно, працює, але здається некрасивим.
  3. Якщо припустити, що мені вдалося навчити LSTM, чи є спосіб перевірити модель, щоб побачити, які саме «мотиви» події вона підібрала? (тобто аналог фільтрів у конвєнці)

Будь-який зразок коду (бажаний пітон) завжди корисний.

Редагувати: Просто щоб додати, що в послідовності є якийсь шум. Деякі події можна сміливо ігнорувати, але саме ті, які не завжди можна сказати наперед. Тому в ідеалі модель (і мотиви, що випливають з неї) стійкі проти цього.


Що це за набір даних?
бенкет

@felbo: ​​Я, на жаль, не можу сказати прямо, але його дані з апаратних, а не фінансових / продажів / оголошень / ..
dgorissen

Добре. Насправді, однокольорове кодування (на мою відповідь) може бути проблематичним, якщо у вас є типи подій ~ 10k. Можливо, ви можете зробити щось по рядку word2vec, тому у вас є лише 300 розмірів вводу. Так само, ймовірно, проблематично передбачити наступний тип події з 10-ти варіантів. Натомість, було б сенс переосмислити проблему, щоб просто передбачити 100 спеціальних типів, а потім клас "нормальної події" для всіх 10-ти звичайних подій.
бенкет

Щоб було зрозуміло: я припускаю, що у вас є багато даних для подібної проблеми.
бенкет

@felbo: ​​справді. Думав просто використовувати індекс, вивчити вбудовування векторів, як word2vec, або згрупувати події в класи для зменшення розмірності. Аналогічна сторона прогнозування, погоджена.
dgorissen

Відповіді:


4

Ваші дані, здається, є лише послідовністю лексем. Спробуйте побудувати автоматичний кодер LSTM і дозвольте кодеру вивчити деякі фіксовані подання першої частини вашої послідовності, а декодер передбачити решту.

Ці уявлення були б вашими мотивами.

Довідка:

Bahdanau, D., Cho, K., & Bengio, Y. (2014). Нейронний машинний переклад шляхом спільного навчання вирівнюванню та перекладу. переддрук arXiv arXiv: 1409.0473.

Срівастава, Н., Мансимов, Е., & Салаххутдінов, Р. (2015). Безперервне вивчення відеорепрезентацій за допомогою LSTM. переддрук arXiv arXiv: 1502.04681.


1

Найважливіша частина полягає в тому, як ви "формулюєте" проблему класифікації, тобто як ви представляєте вхідні дані та що ви хочете вивести. Бачачи, як у вас так багато різних типів подій, вам потрібно навчитися їх вбудовуванню. Це можна зробити безпосередньо, наприклад, в Керасі. Ви можете побачити цей прикладпро те, як навчитися вставці безпосередньо з даних. Іншим підходом було б заздалегідь засвоїти вбудовування, використовуючи непідконтрольний підхід, такий як word2vec. Однак для цього потрібно більше роботи, оскільки вам потрібно вирішити відповідне завдання та навчити його створювати вбудовування. Зважаючи на те, що у вас є достатня кількість даних, легше (хоча і трохи менш ефективно) навчитися вбудовуванню безпосередньо. Для виводу я б не передбачив всі різні типи подій, а лише спеціальні події та "фоновий клас", щоб зберегти проблему можливо. Якщо ви дійсно хочете мати можливість передбачити кожен клас, то вам потрібно використовувати деякі хитрощі (подивіться, як це робить word2vec).

Щодо часу між подіями. Ви можете просто додати це до свого LSTM як додатковий вимір (див., Наприклад, це для прикладу того, як це зробити в Керасі). Це було б легко зробити, і це дозволило б LSTM враховувати часову різницю.

Я не знаю жодного способу візуалізації мотивів, "розкручуючи" тимчасовий характер мережі. Можливо, вам вдасться створити деякі мотиви, використовуючи генеративну мережу, але це, ймовірно, буде важко інтерпретувати. Одним із способів дослідження мотивів може бути просто знайти найпопулярніші 100000 найпоширеніших послідовностей неспеціальних подій, наприклад, довжиною 20-100, ввести їх у підготовлену модель та витягнути ймовірність виходу з остаточного шару softmax. Таким чином можна було знайти послідовності, пов'язані з певними особливими подіями. Однак важко сказати, чи підходить такий мотивований підхід чи корисний, не дивлячись на ваші дані.


Просто, щоб було зрозуміло. Що стосується мотиву, ви маєте на увазі перегляд необроблених даних та вилучення найпоширеніших підрядів певної мінімальної довжини (або для їх генерування використовується часте видобуток набору елементів), а потім побачите, де максимальні спеціальні прогнози подій максимальні? У такому випадку здається, що простіше підійти до цього, як до стандартної проблеми класифікації, ні?
dgorissen

Я сподівався, що залежність від періодичності моделі, що залежить від часу, дозволить зробити якусь корисну перевірку. Можливо, можливо, запустити модель у зворотному напрямку. Максимізуйте впевненість у прогнозуванні кожного конкретного типу подій та подивіться, які послідовності призводять до цього. Однак не зовсім впевнені, як це буде працювати, і, можливо, потрібна загальна модель.
dgorissen

1
Будь ласка, дивіться мою оновлену відповідь. Так, я маю на увазі бачити, де "спеціальні прогнози подій максимальні" на основі необроблених даних. Я не розумію, що ви маєте на увазі підходити до цієї проблеми як до стандартної проблеми класифікації :)
pir
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.