5 min read

GPT2

GPT2
Фото: Jeffery Ho / Unsplash

GPT2 (англ. Generative Pretrained Transformer – Генеративный предварительно обученный преобразователь) – это популярная модель Глубокого обучения (Deep Learning), позволяющая генерировать текст на основе предложения-тезиса. Относится к группе Трансформеров (Transformer).

По мере того как модели-трансформеры становились лучше и приближались к созданию текста, который может сойти за человеческий текст, их обучающие наборы данных также выросли в размере. Например, базы TransformerXL, BERT-Base выросли до 340 миллионов параметров (слов как характеристик текста), BERT-Large – до 175 миллиардов параметров. Царь горы сегодня – модель Microsoft Megatron-Turing Natural Language Generation (MT-NLG) с 530 миллиардами параметров.

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

Обучение огромной современной модели-трансформера сопряжено с затратами, которые исчисляются десятками миллионов долларов, огромным потреблением энергии и экологическими эффектом. Это создает огромное препятствие на пути небольших предприятий и стартапов, которые хотят запустить свои собственные проекты, что и привело к появлению Hugging Face – предварительно обученных моделей.

Что такое Hugging Face?

Всего за несколько лет трансформеры сообщества Hugging Face зарекомендовали себя как надежный поставщик NLP-решений. Hugging Face — это стартап, который изначально был основан как приложение для обмена сообщениями.

Теперь, сосредоточившись исключительно на трансформерах, компания предоставляет технологии NLP с открытым исходным кодом и тысячи предварительно обученных моделей. HF также предоставляет курсы, наборы данных и имеет большое сообщество. В 2019-2021 компания привлекла 55 миллионов долларов в виде венчурного финансирования.

Экосистема Hugging Face

Модели-трансформеры не понимают текст и потому преобразуют его в Векторы (Vector), Матрицы (Matrix) и Тензоры (Tensor):

Поскольку речь идет о миллиардах столбцов для каждого слова, такой модели нужны немалые вычислительные мощности. Здесь нам помогает PyTorch и его CUDA (англ. Compute Unified Device Architecture) – архитектура для использования процессоров Nvidia.

GPT2 в действии

Теперь, когда мы рассмотрели, что такое экосистема Hugging Face, сгенерируем текст с помощью GPT2. Хотя на смену GPT2 пришла GPT3, она по-прежнему остается мощным представителем своего класса. Для начала импортируем небходимые библиотеки:

!pip install torch

И сама библиотека Transformers:‍

!pip install git+https://github.com/huggingface/transformers.git

Импортируем установленные инструменты, а также встроенные дополнительные библиотеки. random и numpy  помогут добиться воспроизводимости результата:

import torch
import transformers
from transformers import GPT2Tokenizer, GPT2LMHeadModel 
import random
import numpy as np

Инициируем экземпляр модели, которая сгенерирует нам небольшое сочинение на базе одного предложения. GPT2Tokenizer – это так называемый токенизатор, который разбивает текст на отдельные слова, сочетания слов и знаки препинания. Токен (Token) – это именно такой неделимый элемент текста.

Для предложения "What you don't want to be done to yourself, don't do to others" токенами будут: what; you; do; n't; want; to; be; done; yourself; others (10 штук).

gpt2_model = GPT2LMHeadModel.from_pretrained("gpt2-large")
gpt2_tokenizer = GPT2Tokenizer.from_pretrained("gpt2-large")

random.manual_seed(seed) даст нам генератор случайных чисел с заданными настройками seed. Переменная seed, в свою очередь, содержит в себе  случайное число от 0 до 13. cuda.manual_seed(seed) помогает графическому процессору принять настройки генератора случайных чисел. С помощью torch.device()  включим CUDA, чтобы сделать модель мощнее и быстрее.

seed = random.randint(0, 13)
np.random.seed(seed)
torch.random.manual_seed(seed)
torch.cuda.manual_seed(seed)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

Инициируем блок текста – опору для сочинения GPT2:

text = """All of this is right here, ready to be used in your favorite pizza recipes."""

Разложим на токены это предложение с gpt2_tokenizer.encode(). Параметр add_special_tokens=True добавит специальные токены – знаки препинания, а также позволит собирать токены в равные бэтчи-коллекции:

input_ids = torch.tensor(gpt2_tokenizer.encode(text, add_special_tokens=True)).unsqueeze(0)

"Выдадим" нашей модели "производственные мощности", то есть графический процессор с CUDA, и сгенерируем эссе с помощью generate(). Возможно, вы уже догадались, что max_length=500 ограничивает длину эссе до 500 символов, но что же значат остальные параметры?

do_sample=True, top_k-20: в данном контексте сэмплинг – это подстановка ряда возможных слов после каждого использованного. Как только модель напишет эссе, мы увидим, как она выбирает каждое новое слово.

Чем выше значение параметра temperature, тем реже модель будет "уходить в себя" и повторять предложения в сочинении.

gpt2_model.to(device)

outputs = gpt2_model.generate(input_ids.to(device), max_length=500, do_sample=True, top_k=20, temperature=0.7)

Выведем результат генерации текста:

print(gpt2_tokenizer.decode(outputs[0], skip_special_tokens=True))

Вот такое забавное эссе нам сгенерировала GPT2:

All of this is right here, ready to be used in your favorite pizza recipes. In the video above you'll see how to make a pizza crust without using oil, butter, or cheese. You'll also see how to make the perfect pizza crust without adding any toppings. If you want to make a pizza that's extra good, try our recipe for the BEST PIZZA EVER! Watch the video to see how to make a pizza crust without oil, butter, or cheese.
You'll also hear how to make a pizza crust that's extra good, plus how to make a pizza crust that's extra good with extra toppings! So, what's the difference between pizza crusts made without oil and pizza crusts made with oil and butter? 

Here's what a pizza crust without oil looks like: Here's what a pizza crust made with oil looks like: Here's what a pizza crust made with butter looks like: 

If you want to make a pizza crust without using oil, butter, or cheese, you'll need to use a pizza pan with a 9×13 or larger dough pan. If you want to make a pizza crust with oil, butter, or cheese, you'll need to use a 10×13 or larger dough pan.

How to Make the Perfect Pizza Crust without Oil, Butter, or Cheese 
Here's how to make a pizza crust without oil, butter, or cheese.

1- Using a pizza pan with a 9×13 or larger dough pan, make a round pie crust.
2- Cut a small hole in the bottom of the pan so the crust doesn't stick when you're baking it.
3- Cover the bottom of the pan with a paper towel to let the air out.
4- Brush the bottom of the pan with a little olive oil.
5- Place the pan on a baking sheet and bake for 10 minutes.
6- Remove the pan from the oven and let it cool before slicing.
7- While the crust is cooling, chop up the vegetables and herbs and mix them into your pizza crust.
8- Take the dough out of the pan and cut it into small pieces.
9- Place the small pieces on a baking sheet and cover with a paper towel.
10- Bake for 10 minutes.

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

  • video → to (.9), from (.4), bottom (.3)
  • crust → is (.8), without (.6), does (.7), vegatables (.1)

Вот так модель, не понимающая сути текста, и делает выбор о следующем слове.

Обратите внимание: в середине эссе модель "ушла в себя" и повторила некоторые предложения по несколько раз. Это исправляется подбором значенияtemperature. Попробуйте запустить модель с любым другим англоязычным предложением в переменной text, и вы удивитесь, как легко сочинять посредством ML.

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

Автор оригинальной статьи: qwak.com, Mostly on AI

Подари чашку кофе дата-сайентисту ↑