FRED-T5 XL - русскоязычная энкодер-декодерная генеративная модель с 1.7 млрд параметров

Mar 15, 2023 10:08

Сломаю тренд дня - вместо перепоста новости про 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 - генерация целых катренов.

:> У бурных чувств неистовый конец
--------------------------------------------------------------------------------
У бурных чувств неистовый конец,
Случайный взгляд, касание запястья,
Судьба - в ладони. Что тебе сказать,
Скажи о том, что сердце не напрасно.
--------------------------------------------------------------------------------
У бурных чувств неистовый конец,
Такие не рождаются по воле.
Любовь в итоге - в чувствах не творец.
Любовь в итоге - это боль в неволе.
--------------------------------------------------------------------------------
У бурных чувств неистовый конец,
Судьбы безжалостной безжалостны потери,
И вот я, словно загнанный юнец,
Ищу тебя в бездонной круговерти.

При генерации четверостиший уже далеко от хорошего результата из-за нарушений в рифмовке и несоблюдения размера. Но в целом весьма неплохо для модели, которая вообще ничего не знает про фонетику, то есть о том, как произносится текст, который она генерирует!

генеративная модель, fred-t5, генеративные стихи, генерация текста, gpt

Previous post Next post
Up