популярное понимание seq2seq ---- кодировщик и декодер (реализация TensorFlow)

машинное обучение

1. Что такое seq2seq

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

Английский ввод: «Они», «есть», «наблюдают», «.»

Французский вывод: "Ils", "regardent", "."

Когда и вход, и выход представляют собой последовательности неопределенной длины, мы можем использовать модель кодер-декодер или модель seq2seq.Последовательная модель или модель seq2seq для краткости. Обе эти модели по существу используют две рекуррентные нейронные сети, называемые кодером и декодером. Кодер используется для анализа входной последовательности, а декодер используется для генерации выходной последовательности. Две рекуррентные нейронные сети обучаются совместно.

На рисунке ниже показан один из способов перевода приведенного выше английского предложения во французское предложение с использованием кодировщика-декодера. В обучающем наборе данных мы можем добавить специальный символ «» (конец последовательности) к каждому предложению, чтобы указать конец последовательности. Входными данными для кодировщика на каждом временном шаге являются, в свою очередь, слова, знаки препинания и специальный символ «» в английском предложении. На рисунке ниже используется скрытое состояние кодировщика на последнем временном шаге в качестве представления или закодированной информации входного предложения. Декодер использует закодированную информацию входного предложения и выходные данные предыдущего временного шага, а также скрытое состояние в качестве входных данных на каждом временном шаге. Мы хотим, чтобы декодер выводил переведенные французские слова, знаки препинания и специальный символ «» в правильной последовательности на каждом временном шаге. Следует отметить, что на входе декодера на начальном временном шаге используется специальный символ «» (начало последовательности) для обозначения начала последовательности.

2. Энкодер

Роль кодировщика состоит в том, чтобы преобразовать входную последовательность неопределенной длины в фоновую переменную c постоянной длины и закодировать информацию о входной последовательности в фоновой переменной. Обычно используемый кодировщик представляет собой рекуррентную нейронную сеть.

Давайте рассмотрим образцы данных временных рядов с размером партии 1. Предположим, что входная последовательность — это x1,...,xT, например, xi — i-е слово во входном предложении. На временном шаге t рекуррентная нейронная сеть будет вводить вектор признаков xt из xt и скрытое состояние предыдущего временного шага.h_{t-1}Преобразовать в скрытое состояние ht текущего временного шага. Преобразование скрытого слоя рекуррентной нейронной сети можно выразить как функцию f:

h_t=f(x_t,h_{t-1})

Затем кодировщик преобразует скрытое состояние каждого временного шага в фоновую переменную с помощью пользовательской функции q:

c=q(h_1,...,h_T)

Например, при выбореq(h1, . . . , hT ) = hT, фоновая переменная — это скрытое состояние последнего временного шага входной последовательностиhT.

Описанный выше кодировщик представляет собой однонаправленную рекуррентную нейронную сеть, и скрытое состояние на каждом временном шаге зависит только от этого временного шага и предыдущей входной подпоследовательности. Мы также можем создавать кодировщики, используя двунаправленные рекуррентные нейронные сети. В этом случае скрытое состояние кодера на каждом временном шаге зависит как от подпоследовательностей до, так и после этого временного шага (включая ввод на текущем временном шаге) и кодирует информацию обо всей последовательности.

3. Декодер

Только что было введено, что фоновая переменная c, выдаваемая кодером, кодирует информацию всей входной последовательности x1,...,xT. Учитывая выходную последовательность y1, y2,..., yT' в обучающих выборках, для каждого временного шага t' (символ отличается от входной последовательности или временного шага кодера t), условие выхода декодера yt' вероятность будет основываться на предыдущей выходной последовательностиy_1,...,y_{t^{′}-1}и фоновая переменная c, то есть:

P(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)

Для этого мы можем использовать другую рекуррентную нейронную сеть в качестве декодера. На временном шаге t' выходной последовательности декодер преобразует выходные данные предыдущего временного шагаy_{t^{′}-1}и фоновую переменную c в качестве входных данных и сравнить их со скрытым состоянием предыдущего временного шагаs_{t^{′}-1}Преобразование в скрытое состояние st' текущего временного шага. Следовательно, мы можем выразить преобразование скрытого слоя дешифратора функцией g:

s_{t^{′}}=g(y_{t^{′}-1},c,s_{t^{′}-1})

Со скрытым состоянием декодера мы можем использовать пользовательский выходной слой и операцию softmax для вычисленияP(y_{t^{′}}|y_1,...,y_{t^{′}-1},c), например, на основе скрытого состояния декодера st' на текущем временном шаге вывод предыдущего временного шагаs_{t^{′}-1}и фоновая переменная c для вычисления распределения вероятности выхода yt' на текущем временном шаге.

4. Обучите модель

Из оценки максимального правдоподобия мы можем максимизировать условную вероятность выходной последовательности на основе входной последовательности:

P(y_1,...,y_{t^{′}-1}|x_1,...,x_T)=\prod_{t^{′}=1}^{T^{′}}P(y_{t^{′}}|y_1,...,y_{t^{′}-1},x_1,...,x_T)
=\prod_{t^{′}=1}^{T^{′}}P(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)

и получить потери для этой выходной последовательности:

-logP(y_1,...,y_{t^{′}-1}|x_1,...,x_T)=-\sum_{t^{′}=1}^{T^{′}}logP(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)

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

5. предсказание модели seq2seq

Выше описано, как обучить кодер-декодер, чьи входные и выходные данные являются последовательностями неопределенной длины. В этом разделе мы опишем, как использовать кодер-декодер для предсказания последовательностей неопределенной длины.

При подготовке обучающего набора данных мы обычно добавляем специальный символ «» к входной последовательности и выходной последовательности выборки, чтобы указать конец последовательности. Мы также будем использовать все математические обозначения из предыдущего раздела в последующем обсуждении. Ради обсуждения предположим, что выход декодера представляет собой последовательность текста. Пусть размер выходного текстового словаря Y (включая специальный символ "") равен |Y|, а максимальная длина выходной последовательности равна T'. Все возможные выходные последовательности имеют общийO(|y|^{T^{′}})своего рода. Все подпоследовательности, следующие за специальным символом "" в этих выходных последовательностях, будут отброшены.

5.1 Жадный поиск

Жадный поиск (жадный поиск). Для любого временного шага t' выходной последовательности ищем слово с наибольшей условной вероятностью из |Y| слов:

y_{t^{′}}=argmax_{y\in_{}Y}P(y|y_1,...,y_{t^{′}-1},c)

как вывод. Как только найден символ "" или длина выходной последовательности достигает максимальной длины T', вывод завершается. При описании декодера мы упомянули, что условная вероятность генерации выходной последовательности на основе входной последовательности равна\prod_{t^{′}=1}^{T^{′}}P(y_{t^{′}}|y_1,...,y_{t^{′}-1},c). Назовем выходную последовательность с наибольшей условной вероятностью оптимальной выходной последовательностью. Основная проблема жадного поиска заключается в том, что он не может гарантировать оптимальную последовательность вывода.

Давайте посмотрим на пример. Предположим, что выходной словарь содержит четыре слова «A», «B», «C» и «». Каждый временной шаг на рисунке ниже Четыре числа ниже представляют собой условную вероятность генерации четырех слов «A», «B», «C» и «» на данном временном шаге соответственно. На каждом временном шаге жадный поиск выбирает слово с наибольшей условной вероятностью. Таким образом, выходная последовательность «A», «B», «C», «» будет сгенерирована на рис. 10.9. Условная вероятность этой выходной последовательности составляет 0,5 × 0,4 × 0,4 × 0,6 = 0,048.

Далее обратите внимание на пример, показанный ниже. В отличие от приведенного выше рисунка, слово «C» со второй по величине условной вероятностью выбирается на временном шаге 2. . Поскольку выходные последовательности временных шагов 1 и 2, на которых основан временной шаг 3, изменились с «A» и «B» на приведенном выше рисунке на «A» и «C» на следующем рисунке, временной шаг 3 на рисунке ниже генерирует каждое слово. Условная вероятность изменилась. Выбираем слово «В» с наибольшей условной вероятностью. В это время выходными подпоследовательностями первых 3 временных шагов, на которых основан временной шаг 4, являются «A», «C» и «B», которые отличаются от «A», «B» и «C» в выше рисунок. Следовательно, условная вероятность каждого слова, сгенерированного на временном шаге 4 на рисунке ниже, также отличается от вероятности на рисунке выше. Нами установлено, что условная вероятность выходной последовательности «А» «С» «В» «» в этот момент времени составляет 0,5×0,3×0,6×0,6 = 0,054, что больше, чем условная вероятность полученной выходной последовательности жадным поиском. Следовательно, выходная последовательность "A" "B" "C" "", полученная жадным поиском, не является оптимальной выходной последовательностью.

5.2 Полный поиск

Если цель состоит в том, чтобы получить оптимальную выходную последовательность, мы можем рассмотреть исчерпывающий поиск: перебрать все возможные выходные последовательности и вывести последовательность с наибольшей условной вероятностью.

Хотя полный перебор позволяет получить оптимальную выходную последовательность, его вычислительные затратыO(|y|^{T^{′}})Это легко сделать негабаритным. Например, когда |Y|= 10000 и T′ = 10, мы оценим10000^{10}=10^{40}Последовательности: это практически невозможно выполнить. пока жадный поиск СтоимостьO(|y|^{T^{′}}), что обычно значительно меньше, чем вычислительная стоимость полного перебора. Например, когда |Y|=10000 и T′=10, I Нам нужно только оценить10000*10=10^5последовательность.

5.3 Поиск луча

Лучевой поиск — это улучшенный алгоритм жадного поиска. Он имеет гиперпараметр размера луча. Ставим на k. На временном шаге 1 выбираются k слов с наибольшей условной вероятностью на текущем временном шаге, чтобы сформировать первые слова из k возможных выходных последовательностей. На каждом последующем временном шаге на основе k выходных последовательностей-кандидатов предыдущего временного шага из k |Y| возможных выходных последовательностей выбираются k с наибольшей условной вероятностью в качестве выходных последовательностей-кандидатов этого временного шага. Наконец, мы отфильтровываем последовательности, содержащие специальный символ «», из выходных последовательностей-кандидатов каждого временного шага и отбрасываем все подпоследовательности за специальным символом «» в них, чтобы получить окончательную выходную последовательность-кандидата собирать.

Ширина луча равна 2, а максимальная длина выходной последовательности равна 3. Возможными выходными последовательностями являются A, C, AB, CE, ABD и CED. Мы получим окончательный набор выходных последовательностей-кандидатов из этих 6 последовательностей. Из набора окончательных выходных последовательностей-кандидатов мы берем следующую последовательность с наивысшим баллом в качестве выходной последовательности:

\frac{1}{L^{\alpha}}logP(y_1,...,y_L)=\frac{1}{L^{\alpha}}\sum_{t^{′}=1}^{T^{′}}logP(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)

Где L — длина конечной последовательности-кандидата, а α обычно может быть выбрано равным 0,75. Lα в баллах должен наказывать более длинные последовательности с большим количеством логарифмических сложений в вышеуказанных баллах. Анализ показывает, что вычислительная стоимость поиска луча составляетO(k|y|^{T^{′}}). Это находится между вычислительными издержками жадного поиска и исчерпывающего поиска. Кроме того, жадный поиск можно рассматривать как поиск луча с шириной луча, равной 1. Поиск луча обеспечивает компромисс между вычислительными затратами и качеством поиска благодаря гибкой ширине луча k.

6. Блю Счет

Для оценки результатов машинного перевода обычно используется BLEU (Bilingual Evaluation Understudy) (двуязычная оценка). Для любой подпоследовательности в последовательности прогнозирования модели BLEU проверяет, появляется ли подпоследовательность в последовательности меток.

В частности, пусть точность подпоследовательности из n слов равна pn. Это отношение количества подпоследовательностей с n словами, соответствующими предсказанной последовательности и последовательности меток, к количеству подпоследовательностей с n словами в предсказанной последовательности. Например, предположим, что последовательность меток — это A, B, C, D, E, F, а предсказанная последовательность — это A, B, B, C, D, тогда:

P1= \frac{预测序列中的 1 元词组在标签序列是否存在的个数}{预测序列 1 元词组的个数之和}

Униграммы прогнозируемой последовательности: A/B/C/D, все существуют в последовательности меток, поэтому P1 = 4/5 и т. д., p2 = 3/4, p3 = 1/3, p4 = 0. Предполагатьlen_{label}和len_{pred}- количество слов в последовательности меток и предсказанной последовательности соответственно, тогда определение BLEU:

exp(min(0,1-\frac{len_{label}}{len_{pred}}))\prod_{n=1}^{k}p_n^{\frac{1}{2^n}}

где k — максимальное количество слов в подпоследовательности, которую мы хотим сопоставить. Можно видеть, что когда предсказанная последовательность и последовательность метки точно совпадают, СИНИЙ 1.

Поскольку сопоставление более длинных подпоследовательностей сложнее, чем сопоставление более коротких подпоследовательностей, BLEU придает большее значение точности сопоставления более длинных подпоследовательностей. Например, когда pn фиксировано на уровне 0,5, по мере увеличения n0.5^{\frac{1}{2}}\approx0.7,0.5^{\frac{1}{4}}\approx0.84,0.5^{\frac{1}{8}}\approx0.92,0.5^{\frac{1}{16}}\approx0.96. Кроме того, модели, предсказывающие более короткие последовательности, как правило, дают более высокие значения pn. Следовательно, коэффициенты, предшествующие члену умножения в приведенном выше уравнении, предназначены для штрафа за более короткие выходные данные. Например, если k = 2, предположим, что последовательность меток — A, B, C, D, E, F, а предсказанная последовательность — A, B. Хотя p1 = p2 = 1, коэффициент штрафа exp(1-6/2) ≈ 0,14, поэтому BLEU также близок к 0,14.

7. Реализация кода

Базовая реализация TensorFlow seq2seq

Машинное обучение легко понять серия статей

3.png

8. Ссылки

Практическое глубокое обучение


автор:@mantchs

Гитхаб:GitHub.com/NLP-love/ml…

Приглашаются все желающие присоединиться к обсуждению! Улучшайте этот проект вместе! Номер группы: [541954936]NLP面试学习群