Глава 9. Глубокое обучение для последовательностей и текста
369
Листинг 9.9.
Использование обученной одномерной сверточной сети для выполнения вывода
в клиентской части
9.3. Решение задач преобразования
последовательностей в последовательности
с помощью механизма внимания
В примерах прогноза погоды Jenaweather и определения тональностей IMDb мы
показали, как можно предсказывать одно число или класс по входной последова
тельности. Впрочем, часть наиболее интересных задач обработки последователь
ных данных требуют генерации
выходной последовательности
на основе входной.
Подобные задачи называются
задачами преобразования последовательностей
в последовательности
(sequencetosequence, seq2seq). Существует множество раз
новидностей задач преобразования последовательностей в последовательности,
вот лишь малая их доля.
z
z
Автоматическое реферирование текста
(text summarization) — генерация сжато
го изложения (например, 100 слов или менее) заданного текста, который может
содержать десятки тысяч слов.
z
z
Машинный перевод
— по абзацу на одном языке (например, английском) сгене
рировать перевод на другой язык (допустим, японский).
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.
Do'stlaringiz bilan baham: |