Imputer: Sequence Modelling via Imputation and Dynamic Programming
William Chan, Chitwan Saharia, Geoffrey Hinton, Mohammad Norouzi, Navdeep Jaitly
Google Research, 2020
Статья: https://arxiv.org/abs/2002.08926
#nlp #nlg #nonautoregressive #transformer #2020
Статья чуть в стороне от предыдущих, но вне всяких сомнений с ними сильно связанная. Авторы решают задачу seq2seq генерации выровненных последовательностей. Например, на входе модели запись звука, а на выходе нужно получить не просто текст, но соответствие (alignment) текстовых токенов конкретным участкам звуковой последовательности.
Формализация задачи выглядит так: пусть если входная последовательность Х. Наша задача сгенерировать выходную последовательность У такой же длины из текстовых токенов (из заданного словаря) + специального токена "_", такую, что каждый элемент выходной последовательности сопоставлен соответствующему по порядку элементу входной последовательности. Эта выходная последовательность называется alignment. Удалением токенов "_" из alignment можно получить выходной текст. Будем в этом случае говорить что этот alignment совместим с этим текстом (с одним текстом м.б. совместимо много alignment-ов). Отметим, также, что длина текста (в токенах) должна быть меньше либо равна длине входной последовательности, это часть постановки задачи.
Кроме того, добавим в наш словарь специальный маскирующий токен [MASK].
Imputer использует архитектуру трансформера, где звуковой вход подаётся через CNN, в результате получаются последовательность звуковых фичей, и они добавляются к эмбеддингам токенов текстового входа в соответствующих позициях, а дальше сеть устроена как обычный BERT. Текстовый вход изначально состоит только из символов [MASK]. Выходом сети также является последовательность из текстовых токенов (в т.ч. из специальных токенов [MASK] и "_").
Зачем такой модели вообще текстовый вход? Дело в том, что авторы предлагают делать несколько итераций — на первой итерации модель видит, по сути, только звуковой вход (на текстовый подаются только [MASK]) и формулирует некоторую гипотезу относительно alignment. На последующих итерациях она получает на вход свою же предыдущую гипотезу и пытается с учётом звукового входа её улучшить. Число таких шагов фиксировано и не зависит от входных данных (в экспериментах делали 8 итераций). Этот процесс можно рассматривать, как некоторый компромисс между генерацией всего alignment за один проход (тут минус в том, что токены на выходе получаются независимыми) и генерацией по одному шагу слева направо (это дорого и долго).
Основной вопрос опять в том, как такую штуку учить.
В качестве первого варианта предлагается опять-таки воспользоваться imitation learning, для этого надо определить экспертную policy и roll-in policy. Авторы берут в качестве эксперта лучший эмпирический alignment, найденный с помощью динамического программирования, и немного его зашумляют. Затем, полученные alignment частично закрывают масками, для чего рассматривается несколько вариантов masking policy: uniform, Bernoulli, блочный (на тестах немного лучше оказался вариант с Bernoulli).
Но в первом варианте мы используем эксперта и как target на этом шагу (для расчёта loss) и как roll-in policy, что не очень надёжно, поэтому в качестве второго варианта предлагается использовать эксперта как roll-in policy, но при расчёте loss честно маргинализовать по всем возможным alignment, совместимым с текущим входным текстом. У такого усложнённого варианта есть эффективное решение с помощью динамического программирования.
Отдельно авторам удалось показать, что первый вариант (imitation learning) является нижней оценкой для второго варианта (dynamic programming), а второй вариант в свою очередь является нижней оценкой для честного log-likelihood.
William Chan, Chitwan Saharia, Geoffrey Hinton, Mohammad Norouzi, Navdeep Jaitly
Google Research, 2020
Статья: https://arxiv.org/abs/2002.08926
#nlp #nlg #nonautoregressive #transformer #2020
Статья чуть в стороне от предыдущих, но вне всяких сомнений с ними сильно связанная. Авторы решают задачу seq2seq генерации выровненных последовательностей. Например, на входе модели запись звука, а на выходе нужно получить не просто текст, но соответствие (alignment) текстовых токенов конкретным участкам звуковой последовательности.
Формализация задачи выглядит так: пусть если входная последовательность Х. Наша задача сгенерировать выходную последовательность У такой же длины из текстовых токенов (из заданного словаря) + специального токена "_", такую, что каждый элемент выходной последовательности сопоставлен соответствующему по порядку элементу входной последовательности. Эта выходная последовательность называется alignment. Удалением токенов "_" из alignment можно получить выходной текст. Будем в этом случае говорить что этот alignment совместим с этим текстом (с одним текстом м.б. совместимо много alignment-ов). Отметим, также, что длина текста (в токенах) должна быть меньше либо равна длине входной последовательности, это часть постановки задачи.
Кроме того, добавим в наш словарь специальный маскирующий токен [MASK].
Imputer использует архитектуру трансформера, где звуковой вход подаётся через CNN, в результате получаются последовательность звуковых фичей, и они добавляются к эмбеддингам токенов текстового входа в соответствующих позициях, а дальше сеть устроена как обычный BERT. Текстовый вход изначально состоит только из символов [MASK]. Выходом сети также является последовательность из текстовых токенов (в т.ч. из специальных токенов [MASK] и "_").
Зачем такой модели вообще текстовый вход? Дело в том, что авторы предлагают делать несколько итераций — на первой итерации модель видит, по сути, только звуковой вход (на текстовый подаются только [MASK]) и формулирует некоторую гипотезу относительно alignment. На последующих итерациях она получает на вход свою же предыдущую гипотезу и пытается с учётом звукового входа её улучшить. Число таких шагов фиксировано и не зависит от входных данных (в экспериментах делали 8 итераций). Этот процесс можно рассматривать, как некоторый компромисс между генерацией всего alignment за один проход (тут минус в том, что токены на выходе получаются независимыми) и генерацией по одному шагу слева направо (это дорого и долго).
Основной вопрос опять в том, как такую штуку учить.
В качестве первого варианта предлагается опять-таки воспользоваться imitation learning, для этого надо определить экспертную policy и roll-in policy. Авторы берут в качестве эксперта лучший эмпирический alignment, найденный с помощью динамического программирования, и немного его зашумляют. Затем, полученные alignment частично закрывают масками, для чего рассматривается несколько вариантов masking policy: uniform, Bernoulli, блочный (на тестах немного лучше оказался вариант с Bernoulli).
Но в первом варианте мы используем эксперта и как target на этом шагу (для расчёта loss) и как roll-in policy, что не очень надёжно, поэтому в качестве второго варианта предлагается использовать эксперта как roll-in policy, но при расчёте loss честно маргинализовать по всем возможным alignment, совместимым с текущим входным текстом. У такого усложнённого варианта есть эффективное решение с помощью динамического программирования.
Отдельно авторам удалось показать, что первый вариант (imitation learning) является нижней оценкой для второго варианта (dynamic programming), а второй вариант в свою очередь является нижней оценкой для честного log-likelihood.