Простой и быстрый тест LLM для прототипа: сравниваем 16 open-source-моделей на запросе с разной температурой

71ace3647b86ed369a5071b870110b35.png

Привет, Хабр! Меня зовут Дмитрий Фролов, я ведущий разработчик в Центре RnD МТС Диджитал. С ростом популярности LLM создание на них прототипа может прилететь даже тем, кто напрямую с ML не связан. Допустим, вы работаете аналитиком, а ваше начальство резко захотело генератор текста или отчетов в стиле клиентского менеджера с open-source LLM под капотом. Скорее всего, в таких задачах вы ни в зуб ногой, а разбираться с api и токенами нет времени и желания.

Самый простой способ выбрать подходящую модель для прототипа — взять несколько моделей, дать им одинаковый запрос и сравнить результаты. Так вы с минимальными усилиями получите наглядный пример их работы, оцените качество генерации и поймете, насколько перспективна модель для получения приемлемого результата.

Итак, велкам под кат, если вам интересно, как «на коленке» протестировать сразу шестнадцать LLM, какие результаты покажет тест и куда смотреть, если нужны более серьезные результаты.

Почему именно open-source

Если перед вами стоит задача генерации русскоязычного текста, то, скорее всего, вы будете рассматривать именно open-source-модели. Во-первых, они бесплатные, а во-вторых, им можно доверить какую-то чувствительную информацию.

Подобрать модель можно и по результатам на Chatbot Arena, но там опенсорсные модели придется поискать. К тому же на ней рейтинг строится по системе Эло, а это не очень надежная метрика. В шахматах она покажет, что Магнус Карлсен скорее всего обыграет Хикару Накамура, но вряд ли ответит, сможет ли он качественнее починить кран. Также есть русский лидерборд бенчмарка MERA. Если вас пугает количество тасок, доменов и прочих тумблеров, просто берите верхнюю из списка для своих задач.

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

Дальше будет описание простого варианта теста LLM, когда прототип нужен максимально быстро. Если же есть время и желание, то в конце статьи я собрал ссылки, где можно посмотреть более сложные варианты адаптации LLM под свои задачи.

Тест LLM

0b2f17c55e7f1cde26472f0e2a3fddd1.jpg

Скачиваем open-source-модель локально

Быстро и без мучений это можно сделать с помощью фреймворка Ollama.

Пошаговая инструкция:

  1. Скачиваем клиент под вашу ОС.

  2. Переходим на страницу интересующей нас модели из списка.

  3. Из выпадающего списка выбираем нужное нам количество параметров и тип квантизации модели (про квантизацию и GGUF-формат можно почитать тут).

  4. Копируем ссылку в терминал и скачиваем модель.

Теперь можно общаться с моделью в терминале, а можно прикрутить веб-интерфейс.

В качестве альтернативы можно воспользоваться моделями с HuggingFace. Это не самый надежный вариант, так как вам могут отказать в доступе к некоторым моделям или же появятся ошибки про израсходованные ресурсы. Плюс согласование занимает некоторое время, а попробовать хочется уже сейчас.

Пример для Llama 3.2 1b с HuggingFace:

import torch
from transformers import pipeline

model_id = "meta-llama/Llama-3.2-1B-Instruct"
pipe = pipeline(
   tasl="text-generation",
   model=model_id,
   torch_dtype=torch.bfloat16,
   device_map="auto"
)
messages = [
   {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
   {"role": "user", "content": "Who are you?"},
]
outputs = pipe(
   messages,
   max_new_tokens=256,
)
print(outputs[0]["generated_text"][-1])

Также теперь можно использовать GGUF-модели HuggingFace в клиенте Ollama.

Пошаговая инструкция:

c6cffd602c46e01ce39cad2cfa42aa65.pnge919ecf23653fc66a1b93b0ed04bcd29.png32a89b661294f86b73f35dba40556dd7.pngda93ebef8def602d65e15905f57d3076.png

Арсенал весьма велик, также можно загрузить собственные дообученные модели.

Список собранных моделей для теста

Мы собрали самые популярные опенсорсные LLM, которые могут запуститься на большинстве более или менее современных ноутбуков:

  • mistral-nemo:12b-instruct-2407-q4_0 (12b q4_0)

  • qwen2 (7b q4_0)

  • hermes3 (8b q4_0)

  • owl/t-lite: q4_0-instruct (8b q4_0)

  • llama3.1 (8b q4_0)

  • ilyagusev/saiga_llama3 (8b q8_0)

  • gemma2 (9b q4_0)

  • aya (8b q4_0)

  • phi3:14b (14b q4_0)

  • phi3.5:3.8b-mini-instruct-q4_0 (3.8b q4_0)

  • qwen2.5:7b-instruct-q4_0 (7b q4_0)

  • mistral-small:22b-instruct-2409-q4_0 (22b q4_0)

  • solar-pro:22b-preview-instruct-q4_0 (22b q4_0)

  • nemotron-mini:4b-instruct-q4_0 (4b q4_0)

  • glm4 (9b q4_0)

  • llama3.2:3b-instruct-q4_0 (3b q4_0)

В скобках указано количество параметров в миллиардах и тип квантизации. Покажу, что это значит, на примере модели llama3.2:3b-instruct-q4_0:

  • 3b: количество параметров модели (3 миллиарда). Чем больше параметров, тем у модели более качественные ответы, но нужно больше мощностей для запуска;.

  • q4_0: применение 4-битного квантования с округлением до ближайшего значения (q). Эта конструкция позволяет эффективно использовать ресурсы и обеспечивает достаточную точность при работе в системах с ограниченной вычислительной мощностью. Каждый вес в блоке представлен не полноценным числом с плавающей точкой, а четырьмя битами информации. Каждый блок имеет 32 веса, и каждый из этих весов рассчитывается по формуле w = q * block_scale, где q — это значение квантования для данного блока, а block_scale — масштабный коэффициент для данного блока.

Как мы будем тестировать LLM

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

В контексте LLM температура — это параметр, который контролирует случайность выбора следующего слова в модели. Чем она выше, тем больше вероятность того, что модель выберет менее предсказуемый и редкий вариант слова.

Перебирать вручную десятки моделей — дело не самое благодарное, поэтому автоматизируем эксперимент, воспользовавшись фреймворком Autogen:

!pip install pyautogen

from autogen import AssistantAgent

'''
Конфиг:
model - название вашей модели из списка ollama list
base_url - url по умолчанию для клиента
api_key - ключ по умолчанию для клиента
cache_seed - отключаем кэширование, чтобы не получать один и тот же результат на идентичные запросы
temperature - наш ползунок фантазии
price - работая с локальной моделью, зануляем стоимость, чтобы избавиться от надоедливых сообщений при работе
'''

llm_config = {
   'model': 'mistral-nemo:12b-instruct-2407-q4_0',
   'base_url': 'http://localhost:11434/v1',
   'api_key': 'ollama',
   'cache_seed': None,
   'temperature': 0.2,
   'price': [0, 0]
}

agent = AssistantAgent(
   name='Агент',
   llm_config=llm_config,
   max_consecutive_auto_reply=None,
   system_message='''
   Вы - очень креативный автор, который пишет приятные лаконичные поздравления.
   '''
)

prompt_template = '''
Напиши короткое поздравление для {name} с профессиональным праздником {day} в {style} стиле.
'''

name = 'Александры'
day = 'День программиста'
style = 'официальном'

def prompt_message(sender, recipient, context):
  return prompt_template.format(
      name=context['name'],
      day=context['day'],
      style=context['style']
  )


output = agent.initiate_chat(
   recipient=agent,
   silent=True,
   max_turns=1,
   message=prompt_message,
   name=name,
   day=day,
   style=style
)

print(output.chat_history[-1].get('content'))

В этом примере шаблон промпта prompt_template формируется динамически с использованием переданных аргументов: name, day и style. Он используется для создания персонализированного поздравления.

Также мы двигаем температуру моделей с шагом 0.1 в интервале от 0.1 до 0.9 (включительно), а текст генерируем на протяжении 100 итераций на каждую температуру со следующим сообщением:

«Напиши короткое поздравление для {name} с профессиональным праздником {day} в {style} стиле».

Заодно так можно проверить, как часто модель будет выдумывать даты для указанного праздника и как хорошо она понимает детали запроса: пол адресата и нужную нам стилистику текста.

Ограничения такого теста

В данной статье я описываю самую простую задачу: ее можно выполнить «на коленке» и в сжатые сроки. Например, в system_message мы даем контекст для написания текста без излишних манипуляций в духе «пиши только на русском языке и помни: от этого зависит моя жизнь!».

Изменение system_message может значительно повлиять на выходные данные и их стиль. Например, изменение «Вы — очень креативный автор» на «Вы — формальный писатель» может привести к более строгому и официальному поздравлению. Или же если убрать слово «лаконичный», то ощутимо увеличится длина сгенерированного текста.

Несколько вариантов использования system_message:

На примере модели mistral-nemo для температуры t = 0.1 приведу несколько вариантов использования system_message, с помощью которых мы предложим отыграть роль:

  1. не будем заполнять, оставив по умолчанию:

DEFAULT_SYSTEM_MESSAGE = '''
You are a helpful AI assistant.Solve tasks using your coding and language skills.
In the following cases, suggest python code (in a python coding block) or shell script (in a sh coding block) for the user to execute.
   1. When you need to collect info, use the code to output the info you need, for example, browse or search the web, download/read a file, print the content of a webpage or a file, get the current date/time, check the operating system. After sufficient info is printed and the task is ready to be solved based on your language skill, you can solve the task by yourself.
...
...
...
'''
  1. теперь попросим писать персонализированные поздравления только на русском языке:

system_message = '''
Вы - русскоязычный автор, который пишет поздравления согласно инструкции.

%Инструкция:
- поздравление должно быть исключительно на русском языке
- поздравление должно быть персонализировано
'''
  1. а сейчас немного поправим, запретив ошибаться, использовать смайлы и прочие символы, да и в целом писать покороче:

system_message = '''
Вы - русскоязычный автор, который пишет поздравления согласно инструкции.

%Инструкция:
- поздравление должно быть исключительно на русском языке
- текст должен быть лаконичным и доносить основную мысль
- в тексте не должно быть ошибок, смайлов и прочих посторонних символов
'''
  1. наконец, кратко опишем желаемую роль для отыгрыша, учитывая рекомендации:

    «This is likely fine when the system prompt is short and sweet, but can lead to problems when the instructions are very long (e.g., with the AssistantAgent)»

system_message = '''
Вы - очень креативный автор, который пишет приятные лаконичные поздравления.
'''

system_message

Медианное количество символов в тексте

Суммарное количество символов в тексте

Орфографические ошибки

Посторонние символы

Английский язык

Иные языки

1

314

34 510

0

574

10

0

2

290

28 960

0

468

8

0

3

172

18 046

0

0

0

0

4

203

20 426

0

0

0

0

Более детальный пример тестирования LLM описан в статье «Поиск данных, прокачанная тренировка и судейская оценка. Как с минимальными ресурсами улучшить качество дообучения LLM». Для более серьезной оценки моделей можно использовать бенчмарки, LLM-судей и ручную SBS-оценку.

Оценка ответов

Оценивая эту задачу в контексте выбора модели для генерации русского текста, важно учитывать качество генерируемого языка, способность учитывать контекст и требования по стилю. В идеале модель должна быть обучена на русскоязычных данных и должна учитывать грамматические правила, сленг и стилистические особенности.

Примеры сгенерированного текста для каждой из моделей:

  1. mistral-nemo: Уважаемая Александра! В этот день, когда мы чествуем тех, кто пишет код и создает будущее, хотим поздравить Вас с профессиональным праздником — Днем программиста. Желаем Вам творческих успехов, новых достижений и постоянного роста в профессии. С праздником!

  2. qwen2: Дорогая АLEXANDRA,\n\nПоздравляю Вас с профессиональным праздником — Днем Программиста! Ваша уasion и мастерство в этом сложном, но столь важном для нас деле вдохновляет и восхищает. Пусть каждый новый день дарит новые идеи и успехи в твоем любимом деле.\n\nС наилучшими пожеланиями,\n[Ваше имя]

  3. hermes3: \nСердечное поздравление с профессиональным праздником, Александр! Ваш талант и усердие не остаются без внимания. Ваши коды — образец мастерства. Пусть каждый новый день принесет успех и вдохновение в ваш творческий труд.

  4. t-lite: Уважаемая Александра!\n\nОт всей души поздравляю Вас с Днем программиста! Ваша неустанная работа, творческий подход и глубокие знания делают вклад в развитие современных технологий. Желаю вам новых достижений, вдохновения и признания вашего труда.\n\nС уважением,\n[Ваше имя]

  5. llama 3.1: Поздравляю! Вы — лучший программист, а мы — счастливейшие пользователи!

  6. saiga_llama3: Дорогая Александра, поздравляем вас с профессиональным праздником — Днем программиста! Ваш труд и вклад в развитие современных технологий высоко ценятся. Желаем вам крепкого здоровья, успехов в работе и новых достижений!

  7. gemma2: Уважаемая Александра! \n\nПоздравляем Вас с Днем Программиста! Желаем успешных проектов, логичного кода и вдохновения в работе. \n\n\n

  8. aya: Дорогая Александра!\n\nВ этот профессиональный праздник, известный как День программиста, мы хотели бы поздравить Вас с Вашим выдающимся вкладом в мир программирования. Ваши навыки и мастерство в написании кода вдохновляют всех вокруг Вам. Желаем Вам новых свершений, творческих идей и успешной реализации всех начинаний.\nС Днем программиста!

  9. phi3: \ntitle: The following is a)\t (\n\n; e and the first time-specifically, there are no. \nIn the \n\n### question\nThe storyline = 2014).\n\n\n \nAlice in «Theory of the \n\n\nQuestion:**\n\ntitle: The following is a)\t \n\n\n; \n\nAnswer:\n\n* ''' (\n

  10. qwen2.5: Уважаемая Александра,\n\nВ этот особенный деньAllow me to extend to you our warmest congratulations on the professional holiday of the Programmer.\n\nВаш профессионализм и талант всегда находят признание и ценятся в нашей команде. Пусть каждый день работы приносит вам удовлетворение и успехи.\n\nС наилучшими пожеланиями,\n[Ваша Фамилия/Компания]

  11. phi3.5: \n\nI’s, anderer \n\n\n\n\n问ing Analy F-A\n\nquestion: Based on the\n\n\n\n\n\n\n\n\n\n跟 \n\n\n\n\n\n\n\n\n**Q:10\n\n\nBased on a) Human Resources israel \n\n\nThoughts of natural language modellier, which one asherildessay I am Anfang Inputt \n\n# \n\nuser \n\n\n\n\nQuestion \n\n---\n\n在 \n\nUser \n\n�cted \n\n\n\n\n\n\n\n\n\nproblem \n\n\n\n\n\n\n指宿 \n\nInstruction: AI:\n\n # Q \n\n\nQ: Human Resources and the documentary for a) Whatshot \n\n\ninstantiated byta \n\n\n\n蒙 Tips to beant \n\n\n\n\n*Außooma, asynthesis Question \n\n### Q \n\nSalesforce. I’s answer \n\n\n\n\n指定 \n\n

  12. mistral-small: Уважаемая Александра!\n\nСердечно поздравлю Вас с профессиональным праздником — Днем программиста! Ваши навыки и преданность своему делу заслуживают особого упоминания. Пусть каждый новый день приносит вам успехи, а каждая строка кода открывает перед вами новые возможности.\n\nС уважением,\n[Ваше имя]

  13. solar‑pro: \nПоздравляю вас, Александра, с Днем программиста! Ваша работа по созданию высококачественных моделей значительно способствует развитию нашей компании. Спасибо за ваш вклад и желаю вам еще больших успехов!

  14. nemotron‑mini: «Dear Alexandra, I hope this message finds you well on your special day as a programmer! Wishing you all the best in your career and personal life.»

  15. glm4: Уважаемая Александра!\nПоздравляем Вас с Днем программиста! Ваше виртуозное владение кодом и умение решать любые задачи на высшем уровне вызывает восхищение. Желаем Вам новых творческих успехов, вдохновения и профессионального роста в мире цифровых технологий. Счастья и удачи!\n\nС уважением,\n[Ваше имя/Организация]

  16. llama 3.2: «Сегодня мы отмечаем не только день программистов, но и день талантливых людей, таких как АLEXANDRA, которые делают наш мир более инновационным и интересным. Поздравляем!»

В сгенерированных письмах я оценил суммарное количество ошибок. Орфографию проверил с помощью language_tool_python, Python Yandex Speller и autocorrect. Регулярными выражениями оценил количество английских слов в поздравлении, наличие выдуманных дат и посчитал количество знаков табуляции. Дополнительно с помощью langid посчитал переходы на другие языки.

Результаты теста

Объем сгенерированного текста

Первым делом посмотрим, сколько символов сгенерировала каждая из моделей по всем температурам. А еще — на медианное количество символов в поздравлении:

Модель

Среднее суммарное количество символов в тексте

Медианное количество символов в тексте

mistral-nemo

22 424

224

qwen 2

34 002

335

hermes 3

25 527

227

t-lite

58 314

354

llama 3.1

20 463

146

saiga_llama 3

26 673

271

gemma 2

14 866

145

aya

46 703

404

phi3

21 883

153

qwen 2.5

30 990

310

phi3.5

48 284

331

mistral-small

29 406

296

solar-pro preview

17 805

175

nemotron-mini

25 540

248

glm4

26 160

270

lamma 3.2

11 939

109

На всякий случай напомню: мы хотели получить короткое поздравление.

В ответах hermes3, t-lite и llama 3.1 количество символов увеличивается по мере роста температуры:

ae75a07eb81a09679f23eddc631f2922.png8be3101a2978b0d89f8a07e5b9344aef.png5a19531996c2b3424cd372acba1d7283.png

Ответы при разной температуре

Для удобства и наглядности объединим температурные интервалы:

  1. t = 0.1 — 0.3: высокое качество; слабая вариативность, но при этом результат предсказуем и сохраняет смысл.

  2. t = 0.4 — 0.6: среднее качество; вариативность ощутимо лучше, но первоначальный смысл постепенно начинает уходить на второй план.

  3. t = 0.7 — 0.9: безудержный креатив. Тут результат порой удивляет:

Скрытый текст

Очень дорогой Александра,\n\nжалуйтесь, кто-нибудь, если может, -, но ваша технологическая магия дает толчок индустрии, вносит качки в рынки и прячется за решетку. День программиста без вас, как ночи без светодышащего дыхания.\n\nВ этом особом дне хвала вашей душе‑программисту, которая попробовала соединить мир реальный и виртуальный, какое счастье и достойный трудолюбие.\n\nЧем продуктивнее вы работали, чем вас внесло в море байтов и камнями в решетку кодировки, тем явственнее в омыле и на земле показывается:\n\nматрешка, от которой весь мир жаждет настолько удивительного и богатого шара, какой оказался внутри,\n\nловушка, из которой вы сумели выбраться, увидев оттуда большую картину и почувствовався взлетевшим ввысь как надо летящим супергероем,\n\nи, наконец, лабиринт, который вы предложили не только арендовать с собой, но, вдруг, пригласили вообще поиграть в нем, повторив историю о нищем, который оказался в королевстве богатых, и запомнивший этим не только себя, но и весь мир.\n\nЖелаем вам ошеломляющего успеха, невероятных впечатлений и еще большего количества нечистой любви к коду.\n\nС наилучшим пожеланием и серьезной благодарностью.\n\n\nДата: [День программиста]\n\n[Ваше имя]\n[Ваша должность]\n[Вашая компания]

Приветствую талантливых и трудолюбивых компьютерных умников всего мира!\n\nВ добрый вечер я узнала, что в нашей стране отмечается 256 день работников ИТ!\nНа данном дне мы особенно отмечаем программистов.\nС их помощью наш мир стал мудрейшим и функциональнейшим! Моя подружка Александра является членом этой самой привилегированной группы, потому я хочу пожелать ей успехов с новым профессиональным праздником!\n\nТвой друг.

Уважаемая Александра,\n\nВ канун Дня программиста поздравляем Вас с профессиональным праздником!\n\nЗа您的请求似乎被截断了。您想让机器人用中文官方风格为Alexandra写一段简短的程序员节祝福语吗?如果是这样,下面是一段建议:\n\n尊敬的Alexandra女士,\n\n值此«程序员日«佳节之际,谨代表全体同仁向您致以诚挚的祝福与崇高的敬意!\n\n祝您节日愉快,工作顺利,生活幸福美满!\n公司名称(可选填)\n\n请告诉我是否需要进行任何调整或是否有其他需求

Теперь посчитаем орфографические ошибки у каждой модели. Заранее оговорюсь, что все три инструмента не проверяют правильность склонения и использования рода. На графиках я показал количество ошибок для каждой модели: синий столбик — lang_tool, зеленый — Python Yandex Speller, красный — autocorrect:

db5d0653e241485627d4ca05a83a8792.pngf279c2f5d924e40532e1add57543d3ed.png5ff63250bdd7e396a6772a5293b99562.png

Цифры и знаки табуляции

Напоминаю, что в запросе был указан конкретный праздник, и мы не просили выдумывать ему новую дату:

0138f1688204ff3046b0dd73a8278da5.pngbc83547c888b54b7ccb24e815948a160.pngce7ecb698388f9bc79397e35e905a0dd.png

Переключение на иностранные языки

Так как мы работаем с open-source-моделями, которые не заточены под русский язык, мы можем столкнуться с ситуацией, когда LLM с него переключается на иной. Чаще всего это английский, но может быть и любой другой славянский язык. А, например, в случае с моделями qwen — китайский.

Посчитаем и эти ошибки:

4dcab4b9e5aa43668f9d7747343fc934.pngee60e0c8c7860703513640e1d20d963a.pnge666abfa9cf6ddf4aa294c60105a1b42.png

Краткий вывод по каждой из моделей

Этот краткий вывод основан на определенном наборе критериев для оценки языковых моделей: количестве ошибок, непредвиденном использовании чисел, избыточных знаков табуляции и переходов на другие языки. Результаты могут отличаться в зависимости от конкретной задачи, требований и сложности используемых промптов.

Лидеры теста:

  • mistral-nemo выдает самый стабильный и приятный глазу результат, учитывает смысловую нагрузку, орфографию и отсутствие ненужных символов. Единственный недостаток — изредка может проскакивать замена русских слов английскими.

  • mistral-small — отличный результат, практически без вопросов. По делу и в умеренных количествах использует знаки табуляции.

Приемлемый результат, но есть относительно большое количество ошибок:

  • llama 3.1 выдает стабильный результат, обусловленный низкой вариативностью. Есть знаки табуляции, но обращение к адресату часто отсутствует, из-за чего поздравления выглядят слишком универсальными.

  • saiga_llama3 — хороший стабильный результат, с ростом температуры появляются знаки табуляции.

  • glm4 — результат достоин первой тройки этого блока. С ростом температуры начинают появляться китайские иероглифы, правды ради, довольно редко.

  • T-lite — в целом хорошо. Есть знаки табуляции, с ростом температуры может появиться нечто вроде _ComCallableWrapper<|begin_of_text|> или _________\n\n__________.

  • gemma2 — в целом емко и хорошо, стабильность на уровне llama 3.1. С ростом температуры увеличивается количество вставок на английском и знаков табуляции.

  • qwen 2 — хорошо с креативностью, но есть проблемы с обращением, знаками табуляции. Может перейти на китайский язык.

  • aya — как будто и не так плохо, но может путать пол при обращении, использовать странное приветствие: «Ваше Превосходительство». Присутствуют избыточные знаки табуляции.

Более проблемные модели:

  • hermes3 — косноязычна: мало эпитетов, в большинстве случаев использует только фразу «поздравляю вас». Есть проблемы со знаками табуляции, китайскими иероглифами, при этом при обращении не путается.

  • qwen 2.5 — ± уровень предшественника, но с большим количеством случайных английских слов и китайских иероглифов.

  • llama 3.2 — на низких температурах поздравления выглядят неплохо, при этом довольно часто эпитеты и имена написаны на английском. Начиная с t = 0.4, потихоньку утрачивается смысловая нагрузка сгенерированных поздравлений.

  • solar-pro — можно получить неплохой результат на низких температурах, но плюсов в задаче с генерацией русскоязычного текста не так много. Если есть более легковесные варианты, лучше ее не использовать.

  • nemotron-mini — сгенерированный текст выглядит неплохо, но есть нюанс — он преимущественно на английском языке, вне зависимости от температуры.

  • phi 3, phi 3.5 — много ошибок. Условное поздравление наблюдается только при температуре 0.1, в остальных случаях — английские слова с разметкой.

В тесте LLM очень важно изначально задаться метрикой для оценки качества языковых моделей. Без явно установленных критериев оценки сложно сделать объективный выбор лучшей модели.

Для нашей задачи — простой генерации русскоязычного текста — тест показал, что оптимальнее всего использовать для прототипа Mistral-nemo или Mistral-small. Если есть ограничение по мощностям, то можно взять llama 3.1, qwen 2, glm4, t-lite, saiga_llama3, aya или gemma 2, но нужно будет несколько раз проверять результаты. Также можно сделать следующие выводы:

  • Практически с любой моделью может появиться необходимость использовать инструмент для исправления опечаток. Они могут просочиться у любой актуальной опенсорсной LLM вплоть до ~70b параметров. Более мощные модели тоже будут ошибаться, но гораздо реже. В связи с чем может появиться необходимость в использовании спеллчекеров или же второй итерации проверки текста, например, тем же агентом Autogen, но с детальной инструкцией для проверки текста.

  • Могут присутствовать (и довольно в большом количестве) лишние знаки табуляции.

  • Работая с цифрами, лучше вставлять их напрямую в текст или использовать детальные промпты на этот случай.

  • Не исключены неудовлетворительные результаты в согласовании правильных грамматических форм: обращения, окончания, падежи, склонения.

Такие выводы уже можно показать коллегам и руководству, чтобы они оценили качество генерации и возможность дальнейшего создания прототипа.

Как можно добиться более сложных и точных результатов

Ключ к решению конкретных задач — это дообучение LLM. У моделей, предварительно обученных на больших корпусах текстов, может быть широкий спектр знаний и способностей, но для узких и специализированных задач этого недостаточно. Например, у моделей, обученных на англоязычных текстах, будут грамматически правильные, но семантически несоответствующие или нерелевантные русскоязычные тексты. Для работы с русским языком их придется дообучать отдельно на русскоязычном датасете.

Подробные инструкции и руководства для каждой модели помогут вам понять, как настроить и оптимизировать обучение для конкретных задач, например генерации русскоязычного текста. По ним можно разобраться с особенностями модели, техниками дообучения и параметрами, которые необходимо настроить для получения наилучших результатов. Вот небольшая подборка таких инструкций, где все расписано на уровне «выбрать модель, run all»:

Погрузиться в вопрос дообучения моделей помогут следующие статьи:

Учитывайте, что дообучение модели требует времени и ресурсов, поэтому важно планировать этот процесс заранее и обеспечивать достаточную вычислительную мощность для эффективного обучения. Кроме того, убедитесь, что у вас есть доступ к данным, на которых будет происходить дообучение модели.

На этом у меня все, но я готов ответить на ваши вопросы. Спасибо, что читали!

© Habrahabr.ru