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 зарекомендовали себя как надежный поставщик NLP-решений. Hugging Face — это стартап, который изначально был основан как приложение для обмена сообщениями.
Теперь, сосредоточившись исключительно на трансформерах, компания предоставляет технологии NLP с открытым исходным кодом и тысячи предварительно обученных моделей. HF также предоставляет курсы, наборы данных и имеет большое сообщество. В 2019-2021 компания привлекла 55 миллионов долларов в виде венчурного финансирования.
Модели-трансформеры не понимают текст и потому преобразуют его в Векторы (Vector), Матрицы (Matrix) и Тензоры (Tensor):
Поскольку речь идет о миллиардах столбцов для каждого слова, такой модели нужны немалые вычислительные мощности. Здесь нам помогает PyTorch и его CUDA (англ. Compute Unified Device Architecture) – архитектура для использования процессоров Nvidia.
Теперь, когда мы рассмотрели, что такое экосистема 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.
Набравшись текстов из интернета, модель определяет, какие слова чаще всего используются после того или иного слова (вероятности в примере ниже рандомные):
Вот так модель, не понимающая сути текста, и делает выбор о следующем слове.
Обратите внимание: в середине эссе модель "ушла в себя" и повторила некоторые предложения по несколько раз. Это исправляется подбором значенияtemperature
. Попробуйте запустить модель с любым другим англоязычным предложением в переменной text
, и вы удивитесь, как легко сочинять посредством ML.
Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.
Автор оригинальной статьи: qwak.com, Mostly on AI
Подари чашку кофе дата-сайентисту ↑
© Лена Капаца. Все права защищены.