Автоматически сгенерированный осмысленный текст найдет множество применений в компьютерных науках. Даже тест Тьюринга основан на проверке осмысленности разговора между компьютером и человеком. Большие языковые модели (LLM) добились огромного успеха, и вы даже можете в некоторой степени контролировать содержимое созданного текста. В отличие от LLM, который создает текстовый токен за токеном, пытаясь сделать каждое следующее слово значимым в данном контексте, GAN должен иметь возможность генерировать весь образец текста как один вывод. Поскольку все предложение генерируется в одном выводе, это может повысить смысловую нагрузку всей выборки. В этом посте я хотел бы показать свою практическую генерацию текста в непрерывном пространстве встраивания.

Введение:

С момента изобретения GAN в 2014 году было предпринято много попыток применить эти алгоритмы к тексту. Алгоритму GAN, естественно подходящему для непрерывного типа данных изображения, пришлось много бороться с дискретным типом данных в виде текста. Как заявил Ян Гудфеллоу в 2016 году:

Если вы выведете слово «пингвин», вы не сможете изменить его на «пингвин + .001» на следующем шаге, потому что такого слова, как «пингвин + .001», не существует. Вам предстоит пройти весь путь от «пингвина» до «страуса». Поскольку все NLP основано на дискретных значениях, таких как слова, символы или байты, никто еще не знает, как применять GAN к NLP.

Но это только в том случае, если вы думаете о тексте в дискретном пространстве отдельных токенов. Когда мы перейдем к уровню встраивания, мы увидим, что токены можно добавлять и вычитать друг из друга. А смещение токена делает токен синонимом, что нам и нужно. Реконструкция сообщения из сгенерированного вектора — относительно простая задача, когда мы извлекаем токен с вектором, наиболее похожим на сгенерированный. С недавним доминированием архитектур Transformer в НЛП мы также можем использовать его возможности для создания высказываний с длинными осмысленными связями. А поскольку все предложение генерируется за один раз, мы можем избавиться от проблем, возникающих при генерации текстового токена за токеном.

Код:



Я лично предлагаю использовать Google Colab для запуска тестов.

Большое спасибо WilliamSYSU за создание фреймворка.

Сопутствующие работы:

Первые заметные работы начались с Генерации естественного языка на основе LSTM для систем разговорного диалога, которая представляет собой статистический генератор, основанный на семантически контролируемой сети долговременной кратковременной памяти. Ядром алгоритмов является оптимизация планирования предложений с использованием простого критерия кросс-энтропийного обучения. Чтобы гарантировать, что сгенерированное высказывание представляет предполагаемое значение, генератор обусловлен управляющим вектором d, 1-горячим представлением диалогового акта — намерением, созданным вручную в диалоге. Метрика BLEU-4, используемая для объективной оценки. Еще в 2015 году окончательная оценка была проведена с использованием людей в качестве оракула.

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

Почти год спустя была опубликована новая статья SeqGAN: состязательные сети, генерирующие последовательность, с градиентом политики. Напротив, они предложили SeqGAN, который расширяет GAN с помощью генератора на основе RL для решения проблема генерации последовательности, где сигнал вознаграждения предоставляется дискриминатором в конце каждого эпизода, а генератор выбирает действие и изучает политику, используя предполагаемое общее вознаграждение. Кроме того, в этой статье был представлен синтетический метод оценки, который позволил исследователям оценивать текстовые генераторы без участия людей.

Oracle — это необученный случайно инициализированный LSTM, который может генерировать синтетические данные с собственным распределением. Эти сгенерированные данные используются во время обучения GAN в качестве «реальных примеров», и тот же оракул используется для оценки сгенерированных сообщений GAN с использованием метрики отрицательного логарифмического правдоподобия (NLL). В целом, метод прост в использовании и является репрезентативной метрикой только с одним недостатком: эта метрика не применима к реальным данным.

Дальнейшим усовершенствованием SeqGAN является MaliGAN: Расширенные дискретные генеративные состязательные сети с максимальным правдоподобием (MaliGAN). Авторы взяли новую цель RL, где вместо прямой оптимизации цели GAN они получили новую цель с низкой дисперсией, используя выходные данные дискриминатора, которые соответствуют логарифмической вероятности.

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

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

Следующим шагом по улучшению предыдущих работ является DP-GAN: генеративно-состязательная сеть, способствующая разнообразию, для создания информативного и разнообразного текста. Эта архитектура способствует разнообразию генерируемого текста, присваивая низкое вознаграждение за повторяющийся текст и высокое награда за новый и беглый текст. Также RelGAN: реляционные генеративно-состязательные сети для генерации текста с выбором токена softmax с температурной регулировкой в ​​дискретном пространстве.

Несмотря на то, что предыдущие работы казались довольно многообещающими, сгенерированные тексты столкнулись с проблемой низкого качества, а одним из основных недостатков GAN является проблема «краха режима», и эмпирически доказано, что GAN предпочитает генерировать выборки только вокруг нескольких режимы, игнорируя другие. Некоторое улучшение в этой проблеме было сделано в 2018 году с помощью SentiGAN: генерация сентиментальных текстов с помощью смешанных состязательных сетей,чтобы добавить разнообразия в генерируемый текст, несколько генераторов обучаются одновременно, чтобы генерировать тексты с разными метками настроений без контроля. . В генераторах используется новая цель, основанная на штрафах, чтобы заставить каждый из них генерировать разнообразные примеры определенной метки тональности.

JSDGAN: состязательная генерация дискретных последовательностей без явных нейронных сетей в качестве дискриминаторов. Авторы использовали совершенно новый подход, оптимизируя расхождение Дженсена-Шеннона (JSD) между распределением генератора и распределением обучающих данных. Оптимизация JSD практически аналогична обучению генератора, генерирующего последовательности дискретных данных.

Последний документ, который следует упомянуть о текстовых GAN, а также о текущей SOTA, — это CatGAN: генеративно-состязательные сети с поддержкой категорий с иерархическим эволюционным обучением для генерации текста категорий. Иерархический эволюционный алгоритм обучения, предназначенный для обучения модели с учетом категорий. Потеря состоит из двух терминов: первый член измеряет расстояние между реальными данными и сгенерированными данными по каждой категории, а второй член измеряет общее расстояние по всем категориям. Также модель имеет температурную регуляризацию, с помощью которой вы можете найти компромисс между разнообразием и качеством генерируемых образцов.

Структура:

В качестве введения и интуиции, стоящей за моей структурой, я хотел бы начать с цитаты самого автора GAN: `Гудфеллоу, I. 2016. Генеративные состязательные сети для текста Если вы выведете слово «пингвин», вы не можете изменить это на «пингвин + .001» на следующем шаге, потому что нет такого слова, как «пингвин + .001». Вам предстоит пройти весь путь от «пингвина» до «страуса». Поскольку все NLP основано на дискретных значениях, таких как слова, символы или байты, никто еще не знает, как применять GAN к NLP.

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

Таким образом, дискриминатор видит предложение как двумерный вектор формы (токены x встраивание), а генератор создает тот же двумерный вектор той же формы. С непрерывным текстовым представлением мы можем использовать исходную бумажную настройку дискриминатора и генератора и обучать их обоих одновременно. Чтобы создать удобочитаемый текст, мы возьмем токен с наиболее похожим вектором в словаре.

Здесь нам нужно будет решить несколько основных проблем.

  • Предложения имеют разную длину, и для ее решения нам потребуется использовать специальный токен ‹PAD›, чтобы иметь возможность векторизовать текст в нужную форму. Этот токен ‹PAD› должен присутствовать в словаре и удаляться на этапе восстановления предложения.
  • Дискриминатор имеет огромное преимущество перед генератором, потому что он быстро запоминает точные n-граммы. Чтобы решить эту проблему, в оригинальной статье предлагается использовать гиперпараметр k, который представляет количество шагов последовательности дискриминатора на каждом шаге последовательности генератора. В этой структуре эта неравномерная стратегия обучения развивается еще дальше и переформулируется как: обучать генератор, пока он не обманывает дискриминатор, затем обучать дискриминатор, пока он не сможет различать подделки.
  • Генератор имеет тенденцию повторяться и впадать в «режим коллапса», когда при любом вводе генерирует несколько похожих примеров. Эта проблема не может быть решена, как в статьях выше, из-за непрерывного вывода генератора, поэтому здесь предлагается новая потеря: DiversityLoss, которая напрямую наказывает косинусное сходство в выходных данных генератора, тем самым мотивируя его разнообразить генерируемые сообщения.

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

Оценка:

Качество GANS будет измеряться несколькими показателями:

  1. Оценка BLEU, где эталоном является тестовый набор данных.
  2. Self-BLEU, где оценка BLEU измеряется по самостоятельно сгенерированному тексту.
  3. IOC — индекс совпадения — значение представляет собой вероятность того, что 2 случайных токена, взятых из корпуса, будут равными. IOC набора данных - ~ 0,01, вы увидите метрику относительно IOC набора данных. Лучшее значение — 1,0 — означает, что IOC генератора точно равен IOC набора данных. Если больше, значит, Генератор производит больше повторяющихся токенов, чем тестовый набор данных, а если меньше 1, значит, сгенерированный текст более случайный, чем тестовый набор данных. В целом, меньше IOC, генерируется более разнообразный текст, но если IOC слишком мал, это означает, что генератор выдает полную случайность
  4. Сгенерированный текст NLL на основе языковой модели, в частности, используется GPT2, и NLL рассчитывается относительно набора данных NLL или в генераторе Oracle, если используется синтетический набор данных.

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

Рассмотрим подробнее каждую метрику:

BLEU3: чем выше, тем лучше, изменения в диапазоне ~0,4–0,6 (один из наиболее репрезентативных показателей) будут иметь относительно высокий весовой коэффициент = 3.

Self-BLEU3: чем меньше, тем лучше, изменения в диапазоне ~0,7–0,9, также одна из наиболее репрезентативных метрик, показывающая уникальность сгенерированного теста, установит относительно высокий вес = -3

IOC: чем ниже, тем лучше, потому что генерируется более разнообразный текст, лучше, изменения в высоком диапазоне ~0,8–3, будут иметь относительно небольшой вес = -0,3

Oracle NLL:чем меньше, тем лучше, диапазон изменений составляет ~-0,2–0,6 (может стать отрицательным, поскольку рассчитывается относительно NLL набора данных), показывает, насколько плавно генерируется текст, один из ключевых показателей для сгенерированный текст будет иметь относительно высокий вес = -3

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

Ожидаемый минимальный общий балл: 3 * 0,4–3 * 0,9–0,3 * 3–3 * 0,6 + 5 = 0,8

Ожидаемый максимальный общий балл: 3 * 0,6–3 * 0,7–0,3 * 0,8 + 3 * 0,2 + 5 = 5,06

ПРОСТО ДАЙТЕ МНЕ ПОКАЗАТЕЛИ!!

Итого:

Хотя метрики для этого исследования не могут быть исключительными, они представлены здесь как пост на Medium, а не как отдельная статья. Доминирование больших языковых моделей (LLM) сделало текстовые генераторы GAN устаревшими. Несмотря на эти соображения, я сохраняю оптимистическую веру в то, что новый взгляд на текст как на непрерывный двухмерный пространственный вектор будет способствовать развитию области обработки естественного языка (NLP).