Тонкая настройка языковой модели для обзоров фильмов IMDB и создание обзоров фильмов с использованием различных методов.

Вступление

Недавно языковые модели - модели, которые пытаются предсказать следующее слово в предложении, обычно глубокая нейронная сеть - произвели серьезный фурор, поскольку OpenAI объявил, что им удалось обучить языковую модель с 1,5 миллиардами параметров под названием « GPT-2 . »», Которую они изначально сочли слишком опасной для выпуска. С тех пор он был выпущен, и теперь с ним можно даже разговаривать сколько угодно!

Примеры в блоге OpenAI и на веб-сайте Talk to Transformer, ссылка на которые приведена выше, действительно поразили меня, и я начал задаваться вопросом, сможем ли мы каким-либо образом создавать высококачественные обзоры фильмов, аналогичные набору данных IMDb, который включает 100 000 обзоров фильмов, разделенных на 25 000 положительных, 25 000 отрицательных и 50 000 немаркированных обзоров. Однако, насколько мне известно, полная модель GPT-2, которая содержит 1,5 миллиарда параметров, не может поместиться в одном графическом процессоре без значительных усилий и определенно не поместится в моем личном графическом процессоре. И поэтому мне стало любопытно - каково будет качество обзоров, созданных стандартной языковой моделью после обучения ее на наборе данных IMDb?

Настраивать

Я решил провести несколько экспериментов, используя предоставленную языковую модель fastai, которая была предварительно обучена в Википедии (см. Статью ULMFiT здесь для получения более подробной информации о модели). Затем я доработал его для всего набора данных IMDb, так как меня не волнуют настроения, выраженные в обзоре фильма, и меня не интересует анализ настроений, и поэтому мне не нужно поддерживать разделение поездов / тестов, представленное в наборе данных. Цель этой тонкой настройки состоит в том, чтобы сфокусировать модель на области обзоров фильмов, так как возможность точно предсказать следующее слово в обзоре чрезвычайно полезна для того, чтобы также иметь возможность реалистично генерировать следующее слово в обзоре фильма, которое является нашим Цель. Если вы заинтересованы в генерации текста из другого домена, пожалуйста, не стесняйтесь повторить эти эксперименты, используя корпус по вашему выбору!

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

Методы и результаты

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

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

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

Как мы видим на примерах, отзывы жадных топ-1 повторяются и не похожи на естественный язык. На мой взгляд, обзоры, полученные с помощью жадного полиномиального подхода, на удивление хороши, но еще не совсем готовы.

  • Подход с поиском луча - в этом подходе вместо первоначального выбора только токена с наибольшей вероятностью (верхний 1) мы выбираем токены верхнего k с наибольшей вероятностью. Этот параметр также известен как «ширина луча». Затем на каждом шаге мы добавляем каждый из k токенов к существующему приглашению и сохраняем только первые k комбинаций до этого момента. Теоретически это позволяет нам выбирать токены не только на основе предшествующих им токенов, но и на основе следующих за ними токенов. Однако на практике этот метод часто терпит неудачу и приводит к генерации чрезвычайно повторяющегося текста - все результаты top-k кажутся цепочками повторяющихся и «безопасных» вариантов для модели, и, таким образом, даже полиномиальным распределением по окончательному top-k в большинстве случаев дает плохие результаты. Для более глубокого анализа этого конкретного режима отказа см. Документ. Как мы видим из примеров, этот метод имеет тенденцию создавать предложения, которые имеют кратковременный смысл, но очень повторяются и в целом не дают качественных обзоров.

  • Подход Top-k - вместо того, чтобы всегда выбирать токен с наибольшей вероятностью, теперь мы выбираем токены top-k с наибольшей вероятностью, аналогично поиску луча. Как мы видим из примеров, результаты могут быть случайными - иногда весь обзор целостен и кажется реалистичным, но в других случаях предложения не имеют большого смысла вместе. В целом, на мой взгляд, он дает более интересные и разнообразные результаты, чем предыдущие методы.

  • Подход с ядром Top-p - этот подход был предложен в статье для решения проблемы «угадать число для k» из подхода top-k. Вместо того, чтобы работать с фиксированным k, имеет больше смысла выбирать k на основе распределения вероятностей - k должно быть любым числом, необходимым для того, чтобы токены верхнего k содержали большую часть вероятностной массы. Поэтому в подходе ядра top-p мы предоставляем функцию с вероятностью p, и для каждого слова она выбирает число k, а затем выполняет выборку top-k, как и раньше. В целом качество мне кажется очень похожим на top-k, но он, вероятно, лучше справляется с крайними случаями (где плотность вероятности относительно однородна, и поэтому мы хотели бы иметь высокое k, когда оно относительно пиковое, и мы хотели бы маленький к).

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

Заключение

В заключение мы заметили, что качество генерации текста зависит не только от размера используемой модели, но и от самого подхода к генерации, при этом разные методы генерируют обзоры совершенно разного качества - жадная генерация текста первой строчки, кажется, дает низкую качественный текст, поиск луча, кажется, производит чрезвычайно повторяющийся текст, а top-k и top-p, кажется, создают неповторяющийся текст, который имеет более высокое качество, чем top-1. Надеюсь, подходы к генерации текста останутся активной областью исследований, и скоро нам не понадобится модель параметров 1.5B, чтобы генерировать реалистичный текст!

использованная литература