Генерация текста с помощью GPT2 и PyTorch

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Быстрая и легкая генерация текста на любом языке с помощью фреймворка Huggingface

В рамках курса «Machine Learning. Advanced» подготовили перевод интересного материала.

Также приглашаем принять участие в открытом вебинаре на тему «Multi-armed bandits для оптимизации AB тестирования». На вебинаре участники вместе с экспертом разберут один из самых эффективных вариантов применения обучения с подкреплением, а также рассмотрят, как можно переформулировать задачу АБ тестирования в задачу байесовского вывода.


Введение

Генерация текста — одна из самых захватывающих прикладных задач обработки естественного языка (Natural Language Processing - NLP) за последние годы. Большинство из нас, вероятно, слышали о GPT-3, мощной языковой модели, которая может генерировать тексты, близкие к написанным человеком. Однако такие модели чрезвычайно трудно обучать из-за их большого размера, поэтому предварительно обученные модели обычно предпочтительнее там, где это приемлемо.

В этой статье мы научим вас генерировать текст с помощью предварительно обученного GPT-2 — более легкого предшественника GPT-3. Мы будем использовать именитую библиотеку Transformers, разработанную Huggingface. Если вы хотите узнать, как настроить GPT-2 на своем собственном наборе данных для генерации текста в конкретной предметной области, вы можете прочитать мою предыдущую статью: Настройка GPT2 для генерации текста с помощью Pytorch

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

План туториала

  • Шаг 1: Устанавливаем библиотеку

  • Шаг 2: Импортируем библиотеку

  • Шаг 3: Создаем конвейер генерации текста

  • Шаг 4: Определяем текст, с которого будет начинаться генерация

  • Шага 5: Запускаем генерацию

  • БОНУС: Генерируем текст на любом языке

Шаг 1: Установка библиотеки

Для установки Huggingface Transformers, нам нужно убедиться, что установлен PyTorch. Если вы не установили PyTorch, перейдите сначала на его официальный сайт и следуйте инструкциям по его установке.

После установки PyTorch, вы можете установить Huggingface Transformers, запустив:

pip install transformers

Шаг 2: Импорт библиотеки

После успешной установки Transformers, вы можете импортировать его модуль pipeline:

from transformers import pipeline

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

Шаг 3: Создание конвейера генерации текста

Теперь мы можем приступить к созданию конвейера генерации текста. Мы можем сделать это следующим образом:

text_generation = pipeline(“text-generation”)

Модель по умолчанию для конвейера генерации текста — GPT-2, самая популярная модель декодирующего трансформера для генерации языка.

Шаг 4: Определение текста, с которого начнется генерация

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

The world is

(Мир)

prefix_text = "The world is"

Шаг 5: Запуск генерации

После того, как мы определили исходный текст, пора приступить к генерации! Мы можем сделать это, просто запустив:

generated_text= text_generation(prefix_text, max_length=50, do_sample=False)[0]

print(generated_text[‘generated_text’])

Приведенный выше код определяет max_length равный 50 знакам и отключает семплирование. Результат будет следующим:

The world is a better place if you’re a good person.

(Мир вокруг тебя лучше, если ты хороший человек.)

I’m not saying that you should be a bad person. I’m saying that you should be a good person.

(Я не говорю, что ты должен быть плохим человеком. Я говорю, что ты должен быть хорошим человеком.)

I’m not saying that you should be a bad

(Я не говорю, что ты должен быть плохим.)

Как видим, компьютер удивительным образом может генерировать текст, который имеет смысл, хотя и он не идеальный. Одна из проблем с выводом заключается в том, что он повторяется в конце. Возможно, это можно решить, используя разные схемы декодирования (например, top-k/top-p семплирование) и подбирая разные значения, но это уже выходит за рамки данной статьи. Чтобы узнать больше о схемах декодирования и как вы можете реализовать их, смотрите официальный туториал Huggingface и документацию TextGenerationPipeline.

БОНУС: Генерация текста на любом языке

Во-первых, для создания текста на другом языке нам потребуется языковая модель, предварительно обученная на корпусе этого языка; в противном случае, нам придется настраивать ее самостоятельно, что является достаточно утомительной задачей. К счастью, Huggingface предоставляет список моделей, созданных прекрасным сообществом обработки естественного языка (ссылка здесь), и есть вероятность, что уже существует языковая модель предварительно настроенная на выбранный вами язык.

Допустим, мы хотим создать текст на китайском языке. Эта модель GPT2 от CKIPLab предварительно обучена на китайском корпусе, поэтому мы можем использовать их модель без необходимости заниматься настройкой самостоятельно.

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

from transformers import BertTokenizerFast, AutoModelWithLMHead

Затем следует построить токенизатор и модель соответственно:

tokenizer = BertTokenizerFast.from_pretrained(‘bert-base-chinese’)

model = AutoModelWithLMHead.from_pretrained(‘ckiplab/gpt2-base-chinese’)

Затем мы загружаем наш новый токенизатор и модель в качестве параметров для создания инстанса конвейера:

text_generation = pipeline(“text-generation”, model=model, tokenizer=tokenizer)

После этого, мы снова задаем наш префиксный текст, на этот раз на китайском языке:

我 想 要 去

prefix_text = "我 想 要 去"

## Я хочу

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

generated_text= text_generation(prefix_text, max_length=50, do_sample=False)[0]

print(generated_text['generated_text'])

Вы должны увидеть следующий вывод:

我 想 要 去 看 看 。 」 他 說 : 「 我 們 不 能 說, 我 們 不 能 說, 我 們 不 能 說, 我 們 不 能 說, 我 們 不 能 說, 我 們 不 能 說, 我 們

## Я хочу осмотреться ». Он говорит: «Мы не можем сказать, мы не можем сказать, мы не можем сказать, 
мы не можем сказать, мы не можем сказать, мы не можем сказать, мы.

Хотя сгенерированный текст далек от совершенства, опять же, это тема для другой статьи.

Заключение

Вот так просто! Надеюсь, теперь вы разобрались, как реализовать генерацию текста с помощью простого API, предоставляемого Huggingface, с предварительно обученными моделями. Для вашего удобства я прикрепил сюда блокнот Jupyter:

Генерация текста на английском языке

In [1]:
from transformers import pipeline
 
In [ ]:
text_generation = pipeline("text-generation")
 
In [7]:
prefix_text = "The world is"
 
In [8]:
generated_text= text_generation(prefix_text, max_length=50, do_sample=False)[0]
print(generated_text['generated_text'])
 
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
 
The world is a better place if you're a good person.
 
I'm not saying that you should be a bad person. I'm saying that you should be a good person.
 
I'm not saying that you should be a bad

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

Ссылки

Brown, Tom B., et al. “Language models are few-shot learners.” arXiv preprint arXiv:2005.14165 (2020).

Radford, Alec, et al. “Language models are unsupervised multitask learners.” OpenAI blog 1.8 (2019): 9.

Transformers Github, Huggingface

Transformers Official Documentation, Huggingface

Pytorch Official Website, Facebook AI Research

Fan, Angela, Mike Lewis, and Yann Dauphin. “Hierarchical neural story generation.” arXiv preprint arXiv:1805.04833 (2018).

Welleck, Sean, et al. “Neural text generation with unlikelihood training.” arXiv preprint arXiv:1908.04319 (2019).

CKIPLab Transformers Github, Chinese Knowlege and Information Processing at the Institute of Information Science and the Institute of Linguistics of Academia Sinica


Узнать подробнее о курсе «Machine Learning. Advanced».

Смотреть открытый вебинар на тему «Multi-armed bandits для оптимизации AB тестирования».

Источник: https://habr.com/ru/company/otus/blog/542116/


Интересные статьи

Интересные статьи

Недавно на проекте интегрировал модуль CRM Битрикса c виртуальной АТС Ростелеком. Делал по стандартной инструкции, где пошагово показано, какие поля заполнять. Оказалось, следование ей не гаран...
Приближалось восьмое марта, у меня была реализация автоматизированной отрисовки поверхностей сплайнами — почему бы не написать статью с цветами. Получилось примерно так: Под катом будет...
Получить трафик для интернет-магазина сегодня не проблема. Есть много каналов его привлечения: органическая выдача, контекстная реклама, контент-маркетинг, RTB-сети и т. д. Вопрос в том, как вы распор...
Взгляните на экран. Что вы видите? Страницу веб-сайта с текстом и картинками, верно? Но, а если копнуть глубже? Все эти разные по смысловой нагрузке и способу подачи элементы состоят из цифро...
Реализация ORM в ядре D7 — очередная интересная, перспективная, но как обычно плохо документированная разработка от 1с-Битрикс :) Призвана она абстрагировать разработчика от механики работы с табл...