370
Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
z
z
Предсказание слов для автодополнения
— предсказать, какие слова могут следо
вать за заданными несколькими первыми словами предложения. Полезно для
автодополнения/рекомендаций в приложениях для работы с электронной почтой
и UI для поисковых систем.
z
z
Сочинение музыки
— по заданной последовательности музыкальных нот сгене
рировать начинающуюся с них мелодию.
z
z
Чат-боты
— генерировать ответы на вводимые пользователем предложения,
реализующие определенные цели разговора (например, для поддержки пользо
вателей или просто поддержания разговора).
Механизм внимания
(attention mechanism)
1
— мощный и популярный метод
решения задач seq2seq, часто применяемый в сочетании с RNN. В этом разделе по
кажем, как задействовать механизм внимания и LSTM для решения простой задачи
seq2seq — преобразования набора дат в календарном формате в стандартный формат
дат. И хотя мы специально выбрали очень простой пример, полученные при его рас
смотрении знания вполне применимы к более сложным задачам seq2seq наподобие
перечисленных ранее. Сначала сформулируем задачу преобразования формата дат.
9.3.1. Постановка
задачи преобразования
последовательности в
последовательность
Наверное, вы, как и мы, часто путаетесь (или даже немного злитесь) изза множе
ства способов записи календарных дат, особенно когда путешествуете по разным
странам. В некоторых предпочитают порядок «месяц, день, год», некоторые — «день,
месяц, год», а третьи — «год, месяц, день». И даже при одинаковом порядке суще
ствуют варианты: записывать ли месяц с помощью слова (январь), сокращения
(янв), числа (1) или дополненного нулем числа из двух цифр (01). День месяца
также можно дополнять спереди нулем, записывать в виде порядкового (4е) или
количественного (4) числительного. Что касается года, можно записывать все че
тыре цифры номера года или только две последние. Более того, при конкатенации
к частям, обозначающим год, месяц и день, можно добавлять пробелы, запятые,
точки и косые черты или не добавлять никаких промежуточных символов! Всевоз
можные сочетания этих вариантов дают суммарно как минимум несколько десятков
способов записи одной и той же даты.
Так что отнюдь нелишним будет алгоритм, получающий на входе строку кален
дарной даты в одном из этих форматов и возвращающий соответствующую строку
даты в формате ISO8601 (например, 20190205). Эту задачу можно решить и без
машинного обучения, путем написания традиционной программы. Но при большом
числе возможных форматов это непростая задача, требующая немало времени, и итого
1
См.:
Graves A.
Generating Sequences with Recurrent Neural Networks // submitted 4 Aug.
2013, https://arxiv.org/abs/1308.0850;
Bahdanau D., Cho K., Bengio Y.
Neural Machine Trans
lation by Jointly Learning to Align and Translate // submitted 1 Sept. 2014. https://arxiv.org/
abs/1409.0473.