Узнайте, как создать собственный текстовый генератор, используя самую передовую в мире платформу НЛП!

«Лучшие экономики мира напрямую связаны с культурой поощрения и положительной обратной связи».

Вы можете догадаться, кто это сказал? Это не был президент или премьер-министр. Это определенно не был ведущий экономист, как Рагурам Раджан. Все из догадок?

Эта цитата была создана машиной! Совершенно верно - модель Обработка естественного языка (NLP), обученная на платформе OpenAI GPT-2, выдвинула эту вполне реальную цитату. Состояние машинного обучения сейчас находится на совершенно другом уровне, не так ли?

В разгар поистине золотой эры НЛП GPT-2 OpenAI изменил наш подход к работе с текстовыми данными. Если ULMFiT и Google BERT открыли двери для энтузиастов НЛП, то GPT-2 разбил их и значительно упростил работу над задачами НЛП, в первую очередь с генерацией текста.

В этой статье мы собираемся использовать GPT-2 для создания собственного текстового генератора.

В восторге? Тогда перейдем к статье. Сначала мы поймем интуицию, лежащую в основе GPT-2, а затем сразу погрузимся в Python, чтобы построить нашу модель генерации текста.

Если вы заядлый последователь НЛП, вам понравятся приведенные ниже руководства и руководства по последним достижениям в НЛП:

Что нового в OpenAI GPT-2 Framework?

Обработка естественного языка (НЛП) развивалась замечательными темпами за последние пару лет. Машины теперь могут понимать контекст, стоящий за предложениями - поистине монументальное достижение, если задуматься.

GPT-2, разработанная OpenAI, представляет собой предварительно обученную языковую модель, которую мы можем использовать для различных задач НЛП, таких как:

  • Генерация текста
  • Языковой перевод
  • Построение вопросно-ответных систем и так далее.

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

GPT-2 является преемником GPT, оригинальной структуры NLP от OpenAI. Полная модель GPT-2 имеет 1,5 миллиарда параметров, что почти в 10 раз превышает параметры GPT. GPT-2 дает ультрасовременные результаты, как вы, возможно, уже догадались (и скоро увидим, когда мы перейдем к Python).

Предварительно обученная модель содержит данные с 8 миллионов веб-страниц, собранные по исходящим ссылкам с Reddit. Давайте потратим минуту, чтобы понять, как работает GPT-2.

Архитектура

Архитектура GPT-2 основана на очень известной концепции Transformers, предложенной Google в их статье «Внимание - это все, что вам нужно». Transformer предоставляет механизм, основанный на кодировщиках-декодерах, для обнаружения зависимостей ввода-вывода.

На каждом шаге модель использует ранее сгенерированные символы в качестве дополнительных входных данных при генерации следующего выходного файла.

GPT-2 имеет лишь несколько модификаций архитектуры, помимо гораздо большего количества параметров и уровней Transformers:

  • Модель использует больший контекст и объем словарного запаса.
  • После последнего блока самовнимания добавляется дополнительный слой нормализации.
  • Подобно остаточной единице типа «строительный блок», нормализация уровня перемещается на вход каждого субблока. Он имеет нормализацию партии, применяемую перед утяжелителями, что отличается от исходного типа «узкое место».

«GPT-2 достигает самых современных результатов по множеству задач моделирования языков для конкретных предметных областей. Наша модель не обучается на каких-либо данных, специфичных для какой-либо из этих задач, и оценивается на них только в качестве финального теста; это известно как установка «нулевого выстрела». GPT-2 превосходит модели, обученные на наборах данных для конкретной предметной области (например, Википедия, новости, книги), при оценке на тех же наборах данных ». - Открытая команда AI.

Четыре модели с разными параметрами обучены для разных сценариев:

GPT-2 может создавать целую статью на основе небольших вводных предложений. Это резко контрастирует с более ранними моделями НЛП, которые могли только генерировать следующее слово или находить пропущенное слово в предложении. По сути, мы имеем дело с совершенно новой лигой.

Вот как GPT-2 сочетается с другими подобными моделями НЛП:

Как настроить среду для GPT-2

Мы будем работать с моделью среднего размера с 345 миллионами параметров. Вы можете скачать предварительно обученную модель из официального репозитория OpenAI GitHub.

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

Обратите внимание, что нам нужно будет изменить наш каталог. Для этого воспользуемся chdir () класса os:

Затем выберите одну из моделей, которую мы хотим использовать. В этом случае мы будем использовать модель среднего размера с 345 миллионами параметров.

Для этой модели требуется TensorFlow с поддержкой графического процессора, чтобы она работала быстрее. Итак, давайте продолжим и установим TensorFlow в нашу записную книжку:

Перед тем, как погрузиться в моделирование, мы хотим выполнить некоторые важные требования. В клонированной папке вы найдете файл - requirements.txt. Он содержит следующие четыре библиотеки, которые являются обязательными для работы этой модели:

Установите все эти библиотеки, используя всего одну строку кода:

Вот и все - у нас все готово к окружающей среде. Последний шаг перед тем, как мы погрузимся в наш текстовый генератор - загрузка предварительно обученной модели среднего размера! Опять же - мы можем сделать это с помощью всего одной строчки кода:

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

Реализация GPT-2 в Python для создания собственного текстового генератора

Вы готовы? Потому что это момент, которого вы так ждали. Пришло время создать наш собственный продвинутый текстовый генератор на Python с использованием GPT-2! Давай начнем.

Сначала перейдите в папку src с помощью chdir (), как мы это делали раньше:

Затем импортируйте необходимые библиотеки:

Примечание. модель, образец и кодировщик - это файлы Python, которые находятся в подпапке src основного Папка GPT-2:

Давайте разберемся с параметрами, которые мы только что видели, один за другим:

  • имя_модели: указывает, какую модель мы используем. В нашем случае мы используем модель GPT-2 с 345 миллионами параметров или весов.
  • seed: целочисленное начальное число для генераторов случайных чисел, исправьте начальное число, чтобы воспроизвести результаты.
  • nsamples: это количество образцов текста, сгенерированных в нашем выводе.
  • batch_size: влияет только на скорость / память. Это также должно делить nsamples

Примечание. Чтобы создать более одной выборки, необходимо изменить значения nsamples и batch_size, а также сохранить их равными.

  • длина: представляет количество токенов в сгенерированном тексте. Если длина равна None, то количество токенов определяется гиперпараметрами модели.
  • температура: это контролирует случайность в распределении Больцмана. Более низкая температура приводит к меньшему количеству случайных заканчиваний. Когда температура приближается к нулю, модель станет детерминированной и повторяющейся. Более высокая температура приводит к большему количеству случайных завершений
  • top_k: этот параметр управляет разнообразием. Если значение top_k установлено в 1, это означает, что для каждого шага (токена) учитывается только 1 слово. Если для top_k установлено значение 40, это означает, что на каждом шаге рассматривается 40 слов. 0 (по умолчанию) - это специальная настройка, означающая отсутствие ограничений. top_k = 40 обычно является хорошим значением
  • models_dir: представляет путь к родительской папке, содержащей подпапки модели (содержит папку ‹model_name›).

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

Теперь вам будет предложено ввести строку. Вот с чем я пошел:

Я пошел в гостиную, чтобы отпраздновать свой день рождения и

И вот что придумал мой текстовый генератор GPT-2:

Я позвонил Донне и сказал, что только что удочерил ее. Она думала, что мое раскрытие информации было пожертвованием, но я не уверен, соответствовала ли Донна критериям. Донна была по-настоящему милой и талантливой женщиной, которая посвятила свою жизнь истории любви. Я знаю, что она поблагодарила меня, потому что я видел ее из фотогалереи, и она оценила мое возмущение. Определенно, это был не подарок. Я ценю то, что позволяю ей заботиться о детях, и что она что-то видела во мне. У меня также не было особого выбора, кроме как сообщить ей о ее новой помолвке, хотя это не значит, что я не беспокоился, я чрезвычайно благодарен за все, что она сделала для этой страны. Когда я увидел это, я сказал: «Почему ты не стал похож на Бетти или Линду?» «Это дитя нашей страны, и я не могу легко отнестись к этому решению». «Но не говори мне, что ты слишком нетерпелив». Донна заплакала и обняла меня. Она никогда не сцеживает молоко, иначе мне было бы жаль ее, но иногда они сразу видят, как много это для нее значит. Она публично извинилась и высказала вопиющую ошибку суждения перед обществом, принявшим трудный выбор, что ужасно, и не удовлетворила мою просьбу о свидетельстве о рождении. Донна была очень эмоциональна. Я забыл, что она разведчик. Она буквально ничего не делала и фактически была суррогатной владелицей себе самой. 11 августа 2017 г. в 12:11 аноним сказал…

Невероятный! Я потерял дар речи, когда впервые увидел этот результат. Невероятный уровень детализации и впечатляющая грамматика - почти невозможно сказать, что это было полностью создано машиной. Впечатляет, правда?

Поиграйте со строкой ввода и поделитесь своими результатами в разделе комментариев ниже.

Примечание о возможном неправильном использовании GPT-2

GPT-2 упоминается в новостях из-за его возможного злонамеренного использования. Вы можете себе представить, насколько мощна эта структура НЛП. Его можно легко использовать для создания фейковых новостей или, откровенно говоря, фальшивого текста, при этом люди не смогут понять разницу.

Помня об этом, OpenAI не выпустил полную модель. Вместо этого они выпустили модель гораздо меньшего размера. Исходная модель обучена на 40 ГБ интернет-данных и имеет 1,5 миллиарда параметров. Две модели, выпущенные OpenAI, имеют 117 миллионов и 345 миллионов параметров.

Конечные заметки

В этой статье мы использовали модель среднего размера с 345 миллионами параметров. Если эти меньшие модели способны давать такие впечатляющие результаты, представьте, что может дать полная модель с 1,5 миллиардами параметров. Страшно и увлекательно одновременно.

Что будет дальше с НЛП? У меня такое чувство, что нам не придется долго ждать, чтобы узнать это.

А пока попробуйте эту структуру GPT-2 и поделитесь своим опытом ниже. Кроме того, я также рекомендую вам использовать эту модель только в целях исследования и получения знаний. Продолжай учиться!

Первоначально опубликовано на https://www.analyticsvidhya.com 29 июля 2019 г.