Узнайте, как создавать текст фанфики о Гарри Поттере с помощью GPT-2 - модели преобразователя генерации текста

«Ты иногда немного пугаешься, ты это знаешь? Великолепно… но страшно ». - Рон Уизли

Рон имел в виду Гермиону или GPT-2?

В этой статье обсуждается, как реализовать доработанную версию GPT-2 для создания фанфиков о Гарри Поттере. Согласно его описанию, он был адаптирован к 100 самым рейтинговым историям фанфиков. Поэкспериментировав с ним, я обнаружил, что он работает довольно хорошо - особенно после настройки алгоритма генерации текста. Итак, давайте займемся созданием фанфиков для серии бестселлеров всех времен!

Установка

Для начала установим Happy Transformer. Happy Transformer - это библиотека Python с открытым исходным кодом, которую я являюсь ведущим разработчиком, которая упрощает реализацию и обучение моделей Transformer.

pip install happytransformer

Создание

Теперь мы собираемся импортировать класс HappyGeneration для загрузки модели.

from happytransformer import HappyGeneration

Нам нужно предоставить два позиционных аргумента для создания объекта HappyGeneration: тип модели и имя модели. Мы используем модель GPT-2, поэтому наш тип модели просто "GPT2". Название модели можно найти здесь в сети распространения моделей Hugging Face.

happy_gen = HappyGeneration("GPT2", "ceostroff/harry-potter-gpt2-fanfiction")

Создать текст

Отсюда мы можем начать генерировать текст с помощью всего одной строчки кода, используя метод «generate_text» happy_gen. Этот метод требует ввода одной позиции, которая является строкой. Затем модель пытается продолжить предоставленный ввод и выводит объект Dataclass.

result = happy_gen.generate_text("Pass the")

Полученный Dataclass содержит единственную переменную с именем text. Это текстовое значение является продолжением предоставленного текста.

print(result)

Результат: GenerationResult (text = 'письмо в министерство, а затем идите в министерство. Я буду там в ближайшее время. Я буду там через несколько минут ». Гарри кивнул и вышел из офиса. . Он был рад, что у него есть друг в Министерстве, и что »)

Теперь мы можем извлечь текстовую переменную.

print(result.text)

Вывод: письмо в министерство, а потом идти в министерство. Я скоро буду там. Я буду через несколько минут. Гарри кивнул и вышел из офиса. Он был рад, что у него есть друг в Министерстве, и что

Изменить настройки

Давайте импортируем класс GENSettings, чтобы приступить к изменению параметров генерации текста. По умолчанию используется алгоритм под названием «жадный», который склонен к повторению. Этот алгоритм просто многократно выбирает наиболее вероятный токен, где токенами обычно являются слова и символы.

from happytransformer import GENSettings

Мы хотим предотвратить повторение. Обратите внимание, что в приведенном выше примере дважды повторяется фраза «Я буду там». Мы можем предотвратить это, установив для параметра GENSetting no_repeat_ngram_size значение два. Это означает, что пара из двух жетонов (2 грамма) не может повторяться более одного раза. Например, «Я» и «Канада». оба являются 2-граммовыми. Итак, если «Канада». встречается в сгенерированном тексте, то не может повториться (примечание: период считается токеном).

args = GENSettings(no_repeat_ngram_size=2)

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

result = happy_gen.generate_text("Pass the", args=args) print(result.text

Результат: письмо в министерство, а затем поехать в Гринготтс. Я вернусь через несколько минут. Гарри кивнул, затем повернулся к своим друзьям. «Увидимся утром, Гермиона», - улыбнулась Гермиона. Она бы

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

Обучение

Настроить модели с помощью Happy Transformer невероятно просто. Например, предположим, что у вас есть текстовый файл train.txt, содержащий фанфики о Гарри Поттере. Затем для обучения модели вам потребуются только следующие строки кода. Здесь мы используем модель под названием GPT-Neo, которая является версией GPT-3 с открытым исходным кодом.

from happytransformer import HappyGeneration happy_gen = HappyGeneration("GPT-NEO", "EleutherAI/gpt-neo-125M") happy_gen.train("train.txt")

И это все! Теперь вы можете использовать объект happy_gen, как и раньше, для генерации текста. Посетите эту веб-страницу или эту статью для получения дополнительной информации о том, как изменить параметры обучения.

Следующие шаги:

Я предлагаю вам скопировать этот код и изменить параметры ввода и генерации текста, чтобы посмотреть, сможете ли вы сгенерировать творческий текст. Будьте счастливы всем!

Ресурсы

Колаб

Ссылка на код, использованный в этом руководстве:

Курс

Ознакомьтесь с этим новым курсом, который я создал, о том, как создать веб-приложение для отображения GPT-Neo на 100% Python.

YouTube

Подписывайтесь на мой канал YouTube, чтобы смотреть новые видео по НЛП.

Кредиты:

Особая благодарность Кейтлин Острофф за публикацию этой модели. Ее профиль Обнимающее лицо можно найти здесь.

Первоначально опубликовано на https://www.vennify.ai 9 июня 2021 г.