Ранее на моем 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 |