Жадный и лучевой поиск
Введение
Рассмотрим, ка к можно улучшить качество текста, итеративно генерируемого слово за словом некоторой моделью, такой как рекуррентная сеть.
Предложенный метод имеет более широкую применимость. В частности, он может применяться:
к любым языковым моделям, например, трансформерам;
к генерации любых дискретных объектов (ДНК как последовательности нуклеотидов; сессии как последовательности действий пользователя на сайте и т.д.).
Сеть генерирует текст последовательно слово за словом среди уникальных слов словаря. На каждом шаге сеть выдаёт рейтингов каждого отде льного слова (или символа при посимвольной генерации):
Эти рейтинги преобразуются в вероятности слов, используя SoftMax-преобразование:
При генерации последовательности можно перебирать все варианты следующего элемента последовательности, если число вариантов невелико. Если же их много, то число вариантов-кандидатов можно сужать за счёт выбора из случайного подмножества вариантов продолжения последовательности.
Случайная генерация
Варианты продолжения последовательности можно сэмлировать из SoftMax-распределения, предсказанного моделью, причём гиперпараметр температуры в SoftMax-преобразовании управляет контрастностью выходных вероятностей.
Как именно?
При сэмплирование по-прежнему сводится к выбору самого вероятного слова и генерирует текст, который будет максимально правильным, но слишком однообразным. Увеличение повышает разнообразие ценой уменьшения согласованности слов в тексте (или букв в случае посимвольной генерации).
Таким образом, стохастическая генерация последовательности слов (или других дискретных элементов) в рекуррентной сети происходит пошагово генерируя последовательно слово за словом:
-
,
-
,
-
,
-
и т. д.
На каждом шаге можно
-
выбирать один вариант (в жадном поиске всегда выбирается элемент с максимальной апостериорной вероятностью, но для большего разнообразия последовательности можно сэмплировать из распределения);
-
несколько вариантов, а далее выбирать среди них наилучший (реализуется в лучевом поиске, см. ниже).
Чтобы уменьшить риск генерации случайного слова, которое будет совсем выпадать из контекста, слова можно генерировать не из всего списка слов, а из подмножества максимально вероятных. Для этого есть два подхода:
-
Top-K sampling позволяет сэмплировать только слов, обладающих максимальной вероятностью.
-
Nucleus sampling: вместо задания задаётся пороговая вероятность . Слова генерируются не из всего списка, а из подмножества самых вероятных слов. Оно формируется следующим образом: слова сортируются по убыванию их вероятности, и в допустимое подмножество включается минимальное число топ-K самых вероятных слов так, что их суммарная вероятность стала выше . Таким образом, Nucleus sampling представляет собой разновидность top-K sampling с динамически изменяемым параметром K, ад аптивно подстраиваемым под контекст.
Генерация слов продолжается, пока не будет сгенерирован специальный токен [EOS], означающий конец последовательности, либо пока вероятность окончания генерации (предсказываемая отдельным выходом сети) не превысит порог.
Нас интересует генерация последовательности слов, обладающая максимальным рейтингом, измеряющим качество всей сгенерированной последовательности.
Рейтинг последовательности
При генерации последовательности слов можно по-разному оценивать её качество. Например, использовать логарифм модельной вероятности сгенерированной цепочки:
Но такой способ будет поощрять более короткие последовательности, поскольку у них будет меньше вероятностей в произведении при расчёте рейтинга.
Чтобы простимулировать нейросеть генерировать более длинные варианты текста, рейтинг нормируют на длину выходной последовательности по формуле
где - гиперпараметр, управляющий предпочтительной длиной выходных последовательностей.
Как именно влияет на среднюю длину последовательностей?
При уменьшении рейтинг длинных последовательностей будет получаться выше, и они будут выбираться чаще.
В расчёт рейтинга также можно добавлять другие условия, измеряющие, насколько сгенерированный текст
-
разнообразен (содержит много уникальных n-грамм);
-
естественен (содержит длинные последовательности слов, которые реально встречаются в текстах).
Далее мы рассмотрим генерацию и поиск наилучшей последовательности по рейтингу. Вначале рассмотрим генерацию текста простым алгоритмом жадного поиска (greedy search), а затем опишем работу более продвинутого лучевого поиска (beam search), который осуществляет более полный перебор последовательностей и в результате находит последовательности с более высоким рейтингом.