Ранее на моем YouTube-канале уже были видео о моделях рассуждений — OpenAI o1/o3, DeepSeek R1. Эти модели обучены с помощью стратегии reinforcement learning находить решения для задач, требующих логических рассуждений. Способность строить цепочки рассуждений, ведущих к решению поставленной задачи, открывают возможность применения таких моделей в математике, программировании и других подобных направлениях.
Однако упомянутые модели имеют одно ограничение — они выполняют рассуждения на английском языке. И даже если вы укажете в промпте требуемый язык ответа, отличный от этих двух, то только вывод модели будет на этом языке, а вот сама цепочка останется на том, на котором модель обучена “думать”. Соответственно, чтобы заставить модель думать на русском, нужно применять файнтюнинг.
Есть интересный пример — коллекция моделей R1 Multilingual от японской компании Lightblue, которая ранее создала открытый мультиязычный файнтюнг Llama 3 – Suzume. Эта новая коллекция содержит модели рассуждений на базе DeepSeek-R1-Distill-Qwen, дистиллированных с помощью DeepSeek R1 версий Qwen. Что более важно – эти модели получены путем файнтюнинга на мультиязычном CoT (Chain-of-Thoughts), и данные CoT опубликованы на HuggingFace.
Датасет содержит данные на более чем 30 языках, включая русский. Данные получены следующим образом:
Выполнена выборка промптов из открытых англоязычных датасетов с последующим переводом на различные языки. Для перевода использовалась GPT-4o, которая, кстати, хорошо показала себя при создании моего собственного датасета и русскоязычного файнтюна Llama 3 на нем. Далее авторы мультиязычного CoT-датасета сгенерировали ответы на полученные промпты с помощью deepseek-ai/DeepSeek-R1-Distill-Llama-70B восемь раз, и отфильтровали блоки <think> не на том языке, либо с нарушениями правил языка или логическими ошибками. Это достаточно интересный момент, так как разработчики полностью опубликовали код для генерации своего датасета, включая фильтрацию сгенерированных цепочек рассуждений. Если с автоматическим определением языка цепочки все достаточно просто, то для проверки ее соответствия нормам языка и, самое главное, логической корректности, пришлось опять-таки задействовать LLM. Принцип такой же, как и при использовании модели-судьи для выполнения автоматизированных evaluation-тестов.
Пример оценочного промпта из кода проекта:
fluency_system_message = f"""You are a {language} fluency evaluation AI. Given a piece of text, give the fluency and naturalness of the {language} in the text a score from 1-5. Only include your final number in your output."""
То есть модель-судья выставляет оценку от 1 до 5 правильности и естественности сгенерированного текста. Почему-то разработчики использовали GPT-4o-mini, хотя у нее самой, на мой взгляд, есть проблемы с мультиязычностью. Возможно, более правильной оценки можно добиться, используя тот же DeepSeek V3. В итоговый датасет попали только те ответы, у которых наилучшая оценка по пятибалльной шкале.
После этого датасет готов к файнтюнингу моделей рассуждений — дистиллированных на R1 версий Qwen. Для файнтюнинга моделей от 1.5 до 14B авторы использовали llamafactory (код доступен в репозитории на HF по ссылке выше) и достаточно скромные GPU-мощности: всего лишь около 10 минут на восьми NVIDIA L20. Т.е. Вы вполне можете взять GPU поменьше — например, из доступных моделей в облаке подошли бы две RTX 4090 или A10, или одна V100 – и за несколько часов достичь того же результата.
В остальном это обычный SFT-файнтюнинг в одну эпоху, без квантизации. Отдельно стоит отметить процесс evaluation — код можно найти здесь. Ниже — таблица оценок полученных моделей рассуждений для промптов на разных языках. Из нее можно сделать вывод, что модели генерируют более корректные цепочки на таких языках, как английский, немецкий, испанский и другие, наличие которых в корпусе базовой модели, можно предположить, было относительно высоким. Их оценка около 0.8, тогда как у менее распространенных в цифровом пространстве языков она ниже, например, 0.2 у тамильского.
Хорошая новость, что на русском модели научились генерировать цепочки мыслей достаточно неплохо, судя по результату evaluation — даже при том, что в датасете всего 54 примера на русском.
language |
Has a correct think statement |
Has the think statement in the correct language |
Is the response in the correct language |
Is the answer correct |
Amharic |
0.2 |
0 |
0 |
0 |
Arabic |
1 |
0.8 |
0.8 |
0.6 |
Bengali |
1 |
1 |
1 |
0.2 |
Chinese |
1 |
1 |
1 |
0.8 |
Czech |
1 |
1 |
1 |
0.8 |
Dutch |
1 |
1 |
1 |
0.8 |
English |
1 |
1 |
1 |
0.8 |
French |
1 |
1 |
1 |
0.8 |
German |
1 |
1 |
1 |
0.8 |
Greek |
1 |
1 |
1 |
0.6 |
Hausa |
0.4 |
0 |
0 |
0 |
Hebrew |
1 |
0.8 |
1 |
0.6 |
Hindi |
1 |
1 |
1 |
0.8 |
Indonesian |
1 |
1 |
1 |
0.8 |
Italian |
1 |
1 |
1 |
0.8 |
Japanese |
1 |
1 |
0.8 |
0.6 |
Javanese |
0.8 |
0.2 |
0.2 |
0.6 |
Khmer |
0.6 |
0.6 |
0.6 |
0 |
Korean |
1 |
1 |
1 |
1 |
Lao |
0.4 |
0.4 |
0.4 |
0 |
Malay |
1 |
0.4 |
0.4 |
0.8 |
Marathi |
0.6 |
0.4 |
0.6 |
0.2 |
Persian (Farsi) |
0.6 |
None* |
None* |
0.2 |
Polish |
1 |
1 |
1 |
0.6 |
Portuguese |
1 |
1 |
1 |
0.8 |
Romanian |
1 |
1 |
1 |
0.8 |
Russian |
1 |
1 |
1 |
0.8 |
Spanish |
1 |
1 |
1 |
0.8 |
Swahili |
0.4 |
0.4 |
0.4 |
0 |
Swedish |
1 |
1 |
1 |
0.8 |
Tagalog |
1 |
1 |
1 |
0.8 |
Tamil |
0.8 |
0.8 |
0.8 |
0.2 |
Telugu |
0.8 |
0.6 |
0.8 |
0 |
Thai |
1 |
1 |
1 |
0.8 |
Turkish |
1 |
1 |
1 |
0.8 |
Ukrainian |
1 |
1 |
1 |
0.8 |
Urdu |
1 |
1 |
1 |
0.6 |
Vietnamese |
1 |
1 |
1 |
1 |
Автор: ruslandevlabs