Сломаю тренд дня - вместо перепоста новости про gpt-4 поделюсь более приземленным лонгридом про новую русскоязычную генеративку с 1.7 млрд параметров.
Вообще можно заметить, что в диапазоне 1-20 млрд параметров выбор генеративных русскоязычных моделей крайне мал. Поэтому с инженерной точки зрения, когда хочется решать задачи здесь, сейчас и хорошо, каждая хорошая моделька в руках лучше жар-птицы на серверах OpenAI.
Есть
mGPT 1.3 млрд, но я за год экспериментов с ней не нашел ни одной русскоязычной задачи, где она показала бы метрики лучше
sberbank-ai/rugpt3large_based_on_gpt2. А часто вообще она выступает где-то на уровне sberbank-ai/rugpt3medium_based_on_gpt2. Это к вопросу, насколько вообще важен размер модели. Важен, но не только он дает качество на downstream задачах в конкретных случаях.
Есть
sberbank-ai/rugpt3xl с 1.3 млрд. Но там требуется много повозится, чтобы работать с ней в актуальных версиях transformers, и это реально неудобно на практике. Кроме того она на нескольких проверенных задачах по качеству не всегда лучше
sberbank-ai/rugpt3large_based_on_gpt2.
И вот наконец-то скоро в общем доступе появится FRED T5 XL с 1.7 млрд параметров. Описание того, как ее предобучали, есть в
статье на хабре.
Внимание: на huggingface сейчас есть
карточка этой модели, но в ней еще нет весов :( Обещают выложить веса в ближайшем будущем. Я попробовал закрытый промежуточный чекпоинт этой модели. Далее опишу свои личные впечатления и мысли по этому поводу.
Файнтюнить ее непросто. Я даже не уверен, что без ухищрений это получится делать на 11 Гб гпушке. Но не только размер может огорчить (ирония). Подбор параметров файнтюна - боль и фортуна. Честно говоря, я не смог подобрать параметры для задачи генерации реплики в диалоге. Но есть три других NLP задачи, где всё получилось круто, и все они связаны со стихами :)
Мои хинты для будущих файнтюнеров:
1) Токенизатор грузить так: transformers.GPT2Tokenizer.from_pretrained(...). Да, там именно такой токенизатор, и transformers.AutoTokenizer чёта не шмог разобраться сам, без пинка от естественного интеллекта.
1) Я учил с помощью transformers.Trainer. Руками написать цикл обучения тоже можно, но лучше не будет.
2) learning_rate=1e-3. Вообще там какой-то резкий переход между "не учится вообще" при 1e-5 и "кривую обучения начинает колбасить" при 1e-2. Заранее будьте готовы "инвестировать" в подбор этого параметра.
3) fp16=False. Увы, при fp16=True градиенты просто обнулялись. Какой-то баг в поддержке fp16 видимо.
4) weight_decay=0.0
5) optim="adafactor"
6) В сэмплах для входной последовательности следует добавлять префикс . При инференсе его тоже желательно не забывать :trollface: .
Вот так выглядела кривая обучения в первом удачном файнтюне:
Теперь о том, что получилось.
Задача №1 - генерация одной строчки стиха с размером ямб из ключевого слова "любовь":
:> любовь
Любовь с надеждой вместе воспарит
Любовь всегда открыта и проста
Я просто так тебя ещё люблю
Тебя любить и верить в чудеса
Моя любовь не ведает границ
Неся любовь на крыльях в небеса
Любовь моя не кончится ничем
Любви Твоей и веры благодать
Ты мне любви своей не обещал
Любить и жить по совести своей
Если присмотреться, можно заметить, что в данном случае генеративка, не знающая ничего про фонетику, вообще-то неплохо справилась с размером. Хотя для других затравок были сбои в чередовании слогов.
Задача №2 - генерация целых катренов.
:> У бурных чувств неистовый конец
--------------------------------------------------------------------------------
У бурных чувств неистовый конец,
Случайный взгляд, касание запястья,
Судьба - в ладони. Что тебе сказать,
Скажи о том, что сердце не напрасно.
--------------------------------------------------------------------------------
У бурных чувств неистовый конец,
Такие не рождаются по воле.
Любовь в итоге - в чувствах не творец.
Любовь в итоге - это боль в неволе.
--------------------------------------------------------------------------------
У бурных чувств неистовый конец,
Судьбы безжалостной безжалостны потери,
И вот я, словно загнанный юнец,
Ищу тебя в бездонной круговерти.
При генерации четверостиший уже далеко от хорошего результата из-за нарушений в рифмовке и несоблюдения размера. Но в целом весьма неплохо для модели, которая вообще ничего не знает про фонетику, то есть о том, как произносится текст, который она генерирует!