AM: Не верьте этой шумихе.
AI: Ну ..
Введение.
Генераторы текста - это круто, правда? Когда два года назад я впервые наткнулся на нечто похожее на «генератор Шекспира», я был потрясен.
Обычно текстовый генератор представляет собой языковую модель с рекуррентной нейронной сетью или LSTM и пытается предсказать следующие слова на основе предыдущих исходных слов.
Поэтому я решил создать лирический генератор на основе лирики Arctic Monkeys. Идея была разделена на три основных компонента
- Создание корпуса данных и очистка данных
- Увеличение текстовых данных
- Языковые модели и генераторы
Создание корпуса данных
Я нашел блог Джонатана Дейтона действительно полезным. Он использует spotifyAPI для получения идентификатора исполнителя в Spotify, перечисления всех идентификаторов альбомов, получения списка всех идентификаторов треков. Затем все тексты песен сохраняются с помощью GeniusAPI. Вот фрагмент кода для получения данных.
Зависимости:
- lyricsgenius
Увеличение текста
Набор данных состоял из 144 песен, что составляет 167887 слов. Я действительно хотел прокомментировать количество песен, написанных Алексом, и они даже не включают песни из последнего Shadow Puppets и его сольного альбома - я отвлекаюсь!
Учитывая, что набор данных не такой большой, как ожидалось для задачи языкового моделирования, можно применить расширение текста.
Здесь использовались два типа увеличения текста:
- Замена - заменяет текущее слово на то, которое обычно предсказывается языковой моделью.
- Вставка - слова используются как функции для предсказания следующего слова.
Я использовал для этого nlpaug, и действительно хороший обзор можно найти в этой статье - Библиотека расширения данных для текста от Эдварда Ма
В nlpaug есть элементы, улучшающие символы, слова и потоки. Я считаю, что для генерации синтетических данных для текстов более выгодным было использование моделей на уровне слов, и для последовательного применения различных дополнений используются средства увеличения потока, такие как naf.sequential.
Я использовал два типа аугментации - BertAug и FasttextAug. Они оба вставляют / заменяют похожие слова в зависимости от контекста. BertAug использует языковую модель BERT для предсказания заменяемого слова или предсказания следующего слова в случае вставки. FasstextAug заменяет или вставляет слова на основе контекстных вложений слов.
Результаты после BERTAug вставить и заменить
in: всегда есть кто-то выше с большим умом
out: это всегда кто-то выше с большей темпом умом
weeeirrrdddd ... но звучит примерно правильно.
Результаты после вставки и замены FasttextAug
in: всегда есть кто-то более высокий с большим остроумием
out: Всегда есть кто-то более высокий с большим остроумием
Также произошла интересная вещь: не было исключений ValueError для неизвестных слов для FasttestAug из-за встраивания вложенных слов - я использовал wiki-news-300d-1M-subword.vec для загрузки модели -
Кроме - ну - «i.d.s.t. i.d.s.t. i.d.s.t i.d.s.t »,« чу-чу! чу-чу! чу-чу! »и« шу-шу-шу-шу-шу-шу ». Честно говоря, я не виню в этом.
После увеличения в корпусе было 334524 слова. Это означает, что новые данные вдвое превышают исходные.
Создание расширенного набора данных заняло довольно много времени. (около часа ish) У меня есть файл .txt окончательного корпуса, загруженный на диск Google.
Модель LSTM
Идеальная модель генерации текста будет принимать начальное слово / предложение и с учетом истории слов w0,…, wk предсказывать следующие слова wn + p. Поскольку рекуррентные нейронные сети и LSTM имеют память, они вычисляют следующее наблюдение на основе предыдущего состояния.
LSTM особенные, потому что у них есть вход, выход и вентиль забывания, а также память ячеек. Благодаря этому у них есть возможность хранить информацию в течение более длительного ish интервала времени. Здесь я использовал LSTM с 0,5 отсева и 0,5 повторяющимся отсевом.
В настоящее время существуют нерекурсивные модели, которые действительно хорошо работают при языковом моделировании с использованием преобразователей, таких как OpenAI Модель генерации текста GPT-2.
Полученные результаты:
Полученные результаты:
Тонкая настройка с использованием OpenAI's GPT-2
Я использовал gpt_2_simple - Простой пакет Python, который обертывает существующие сценарии точной настройки и генерации модели для« режима генерации текста GPT-2 в OpenAI l».
Исходный набор данных с BERTAug и FasttextAug был объединен и экспортирован в текст в виде am_corpus.txt
Результаты со случайным префиксом:
Для оценки этого результата я использовал ROUGE. Это расшифровывается как отзыв-ориентированный дублер для оценки предложения. Я нашел - Что такое ROUGE и как он работает для оценки задач обобщения? - действительно полезно для понимания ROUGE.
По сути, тексты, созданные моделью GPT-2, более значимы, чем по сравнению с моделью LSTM! Хотя, честно говоря, у модели LSTM не было хороших шансов на тренировку всего за 5 эпох.
- Блокнот Google Colab для генератора текстов.
использованная литература
- Библиотека дополнения данных для текста от Эдвард Ма
- Что делает одни песни blink-182 более популярными, чем другие? Часть 1 Джонатан Дейтон
- Модель генерации текста GPT-2 OpenAI.
- Теоретически обоснованное применение Dropout в рекуррентных нейронных сетях
Изменить: добавлены показатели оценки и другие результаты.