

Современная модель генерации текста для русского языка на основе архитектуры GPT-3 от OpenAI.
Модель ruGPT-3 Large содержит 760 миллионов параметров.
Модель обучалась командой SberDevices с длиной контекста 1024, с помощью библиотеки transformers на корпусе из 80 млрд слов и полностью прошла 3 эпохи. После этого модель была дообучена еще 1 эпоху с длиной контекста 2048.
Общее время обучения составило около 14 дней на 128 GPU для контекста длины 1024 и несколько дней на 16 GPU для контекста длины 2048. Окончательная перплексия на тестовой выборке - 13.6
.
Карточка модели на HuggingFace ссылка
Продолжение текста (Generation)
Базовое использование модели подразумевает работу с уже обученной моделью в режиме инференса. Модель умеет продолжать переданный текст, дополняя его. В примерах ниже ответ модели при генерации выделен курсивом:
Диалоговые системы
system: Добрый день! Чем могу помочь?
user: Добрый день! С утра не работает интернет. Тариф 500мбит
system: хорошо, сейчас попробуем исправить. Ждите.
Рекомендательные системы с нуля
"Физик Максим, 28 лет, больше всего любит фильмы: «Улица Сезам», «Матрица».
Тематическая классификация текстов
Новость: В России выведен на полную мощность самый быстрый в мире суперкомпьютер «Кристофари»
Категория: Новости науки, техника и технологии.
Пример запуска генерации
from transformers import GPT2LMHeadModel, GPT2Tokenizer
model_name_or_path = "path/to/model"
tokenizer = GPT2Tokenizer.from_pretrained(model_name_or_path)
model = GPT2LMHeadModel.from_pretrained(model_name_or_path).cuda()
text = "Александр Сергеевич Пушкин родился в "
input_ids = tokenizer.encode(text, return_tensors="pt").cuda()
out = model.generate(input_ids.cuda())
generated_text = list(map(tokenizer.decode, out))[0]
print(generated_text)
# Output should be like this:
# Александр Сергеевич Пушкин родился в \n1799 году. Его отец был крепостным крестьянином, а мать – крепостной крестьянкой. Детство и юность Пушкина прошли в деревне Михайловское под Петербургом. В 1820-х годах семья переехала
Colab-ноутбук с примером генерации
Возможные примеры работы с затравками
- zero-shot - подается только начало текста (затравка), которое модели нужно продолжить
- one-shot - подается пример 1 затравки, спецтокен и корректного продолжения, через новую строку - целевая затравка, которую нужно продолжить
- few-shot - несколько примеров затравок и ихкорректных продолжений, затем целевая затравка.
Совет: чтобы улучшить качество работы систем one-shot и few-shot, ознакомьтесь со спецтокенами модели в словаре токенизатора. Такие токены, как <pad>
,<|endoftext|>
,<s>
,</s>
, вы можете использовать для форматирования своих примеров.
Дообучение модели (Fine-tuning)
Дообучение с использованием GPU осмысленно в 4 случаях:
- вы работаете с данными в редком формате, модель не могла их увидеть при предобучении. Пример: вы хотите генерировать скрипты на brainfuck
- задача требует высокой степени обобщения, в обучающей выборке таких примеров скорее всего не было. Пример: машинный перевод с русского на маратхи
- задача требует очень специфических знаний, мало представленных в интернете. Пример: автосоставление документации для сталилитейного завода
- вы опробовали все форматы few-shot, и без дообучения ничего не выходит. Как показывает это исследование, качество few-shot сильно зависит от баланса классов в примерах few-shot, порядке следования примеров.
Пример базового дообучения модели с помощью кода из репозитория
!export PYTHONPATH=${PYTHONPATH}: path/to/ru-gpts/
!CUDA_VISIBLE_DEVICES=0 python ru-gpts/pretrain_transformers.py \
--output_dir=models/essays \
--model_type=gpt2 \
--model_name_or_path=sberbank-ai/rugpt3small_based_on_gpt2 \
--do_train \
--train_data_file=train.txt \
--do_eval \
--eval_data_file=valid.txt \
--per_gpu_train_batch_size 1 \
--gradient_accumulation_steps 1 \
--num_train_epochs 5 \
--block_size 2048 \
--overwrite_output_dir
Совет: отформатируйте текстовые данные для дообучения такм образом, чтобы прдать им структуру: используйте переносы строк \n
, чтобы отделить разные обучающие примеры друг от друга, используйте спецтокены, чтобы обозначить начало и конец примера, токен-сепаратор, чтобы обозначить конец затравки и начало генерации.
Colab-ноутбук с примером дообучения
Подробнее о ruGPT-3
Демо ruGPT-3 XL с UI
GitHub с примерами кода по использованию модели
vc.ru: рассказываем о применимости для бизнеса
Habr (tutorial): Тестируем ruGPT-3 на новых задачах
Habr, статья про обучение модели: Русскоязычная модель GPT-3 Large с 760 миллионами параметров в открытом доступе
Habr, статья про кейсы применения модели: Всё, что нам нужно — это генерация
Вебинар, спикер Татьяна Шаврина: Разбираем кейсы реального применения ruGPT-3
Вебинар, спикер Татьяна Шаврина: Полный цикл дообучения ruGPT-3 на платформе ML Space и примеры рыночных кейсов
Модель ruGPT-3 обучена и развёрнута с помощью платформы ML Space и суперкомпьютера «Christofari» от Cloud.ru.
Архитектура нейросети ruGPT-3 основывается на решении Generative Pretrained Transformer 3 от OpenAI.
Дисклеймер
При использовании модели ruGPT-3 Large ответы формируются на автоматической основе. ООО «Облачные технологии» не несет ответственности за точность, релевантность, корректность информации, полученной пользователем посредством модели.