В последние годы большие языковые модели (LLM) стали важной частью бизнес-решений на базе ИИ, применяемых для генерации текста и анализа данных. Однако, большинство разработок ориентированы на англоязычные проекты, что создает сложности для компаний, работающих с русскоязычными данными.
Готовые LLM для русского языка часто показывают низкую точность и ограниченные возможности. Проблемы конфиденциальности также вынуждают компании выбирать локальные модели.
Наша компания давно занимается искусственным интеллектом и стала часто получать подобные запросы от клиентов — создание ИИ-решения с локальной обработкой данных. Мы задались вопросом, какие LLM хороши для таких решений, что мы можем предложить заказчику? Всё это вылилось в большой рисеч разных языковых моделей.
В статье рассмотрим, какие LLM подходят для задач на русском языке, протестируем их по разным параметрам и выявим лидеров. Мы оценили генерацию текста, ответы на вопросы, исправление ошибок и другие функции.
Цель данного исследования — оценить несколько больших языковых моделей (LLM), которые могут быть использованы для проектов, связанных с русским языком, и выбрать оптимальное решение для локальной работы с документами и текстами.
Мы выбрали следующие аспекты работы с текстом и данными, для выявления наилучшей LLM:
Для применения LLM на практике модель должна не только хорошо генерировать текст, но и справляться с различными типами запросов: от корректировки грамматики до создания сложных SQL-запросов. Навыки составления SQL-запросов крайне важна, потому что помогает LLM доставать нужную информацию из БД, ведь не всегда у заказчика в качестве входных данных используются документы.
Поэтому каждую модель мы тестировали по этим задачам и оценивали, насколько она готова к применению в реальных бизнес-задачах.
В рамках исследования были протестированы 6 самых перспективных на наш взгляд больших языковых моделей (LLM), доступных для работы с русским языком. Каждая из которых имеет свои уникальные особенности.
OpenChat 3.5 — мультиязычная модель с открытым исходным кодом, обученная на множестве данных с различных языков, включая русский. Модель предназначена для обработки запросов, генерации текста и выполнения других задач, связанных с естественным языком.
YandexGPT — разработка компании Яндекс, оптимизированная для работы с русским языком. Модель доступна через платное API, что ограничивает её использование в локальных системах.
GigaChat — модель, разработанная компанией Сбербанк для мультиязычной поддержки, в том числе и русского языка. Она ориентирована на обработку текстов и генерацию контента.
Mistral — модель от одноимённого французского стартапа. На конец сентября 2023 года была лучшей LLM с размером 7 млрд параметров. Она используется для различных целей, от написания кода до генерации контента на множестве языков, включая русский.
Saiga-Mistral-7b-Lora — это версия модели Mistral, дообученная на русском датасете с использованием технологии LoRA (Low-Rank Adaptation). Модель специально адаптирована для задач на русском языке.
Saiga-Llama3-8b — версия модели Llama3, дообученная на русском датасете. Это мощная модель, способная выполнять задачи различной сложности, связанные с текстом.
Все протестированные модели оценивались в одинаковых условиях по широкому спектру задач, чтобы объективно оценить их способности.
Для каждой задачи был разработан уникальный сценарий, часть из них была основана на реальных бизнес-кейсах. Это позволило имитировать ситуации, с которыми компании сталкиваются в повседневной работе с документами на русском языке.
Генерация текста: мы предложили моделям создать текст на заданную тему, например, описание дня туриста на Марсе или формальный приказ для юридической компании. Оценивались связность текста, грамматика и отсутствие вставок на английском языке.
Ответы на вопросы: моделям задавались простые вопросы (например, "Кто написал 'Ромео и Джульетту'?" или "Что такое теория относительности?"). Оценивалась точность и краткость ответов.
Ответы в диалоге: здесь проверялась способность моделей удерживать контекст разговора, когда несколько связанных вопросов задавались последовательно. Например: "Сколько весит Луна?" — "А Марс?" — "А в фунтах?" — "Какое расстояние между ними?".
Исправление ошибок: моделям предлагались тексты с ошибками, которые они должны были исправить, сохраняя оригинальный смысл и структуру текста.
Краткий пересказ текста: Мы предложили моделям пересказать длинные тексты (как художественные, так и юридические) в сжатой форме, сохраняя их основную суть.
Ответы на вопросы по тексту: мы предложили моделям ответить на три фактологических вопроса по различным текстам — художественному и юридическому документу.
Извлечение данных: моделям был представлен юридический текст, из которого они должны были извлечь такие данные, как имена, даты, суммы, типы документов, и представить их в формате JSON.
Написание SQL-запросов: модели должны были сгенерировать SQL-запросы на основе описания базы данных и условий запроса. Оценивались правильность синтаксиса и логика запроса.
Для каждой задачи были разработаны следующие критерии оценки:
Каждый критерий оценивался от 0 до 5, где 5 — наивысший балл, который может получить модель, если отлично выполнит поставленную перед ней задачу.
Также мы оценивали в целом выполнение задачи, насколько хорошо модели справились с поставленными задачами: 0 – модель вообще не справилась с задачей, 1 – справилась, но со значительными помарками, 2 – справилась почти идеально.
Все тестирования проводились в одинаковых условиях, используя Google Collab с заданными ресурсами:
Такой подход позволил обеспечить равные условия для каждой модели и оценить их производительность на одинаковом оборудовании.
Однако, если модель не справлялась с задачей с первого раза, промт редактировался для получения более точного результата. Это позволяло проверить гибкость и адаптивность моделей к изменениям запросов.
Поскольку каждая модель тестировалась по определенной задаче, будет логично рассмотреть все 6 моделей в разрезе каждой задачи.
Задача: модели должны были сгенерировать связный текст по заданной теме. В этой задаче хотели протестировать качество сгенерированного текста: грамматику, наличие вставок английских слов или букв, связность текста, стиль повествования и соответствие теме.
Использовалось два промта:
Второй промт предлагал составить юридический документ:
YandexGPT: Показала высокую связность и грамматическую правильность текста. Текст был логичным, стилистически правильным и без ошибок. Модель не использовала вставки английских слов, что сделало её результат почти идеальным для русскоязычных проектов (2 балла за выполнение).
Saiga-Mistral-7b-Lora: Также показала отличные результаты, генерируя текст высокого качества с хорошей структурой и минимальными ошибками. Текст был креативным и полностью соответствовал заданной теме (2 балла за выполнение).
OpenChat3.5: Результаты были удовлетворительными, однако встречались вставки английских слов и недочеты в структуре текста. Текст мог быть связанным, но не всегда соответствовал стилю или контексту (1 балл за выполнение).
GigaChat: Модель показала хорошие результаты. Текст был менее структурированным и встречались ошибки в согласовании предложений, но все равно модель заслужила высокий балл (2 балла за выполнение).
Mistral: Генерация текста была неплохой, но в некоторых случаях модель допускала синтаксические ошибки и не всегда удачно выбирала стиль текста (2 балла за выполнение).
Saiga-Llama3-8b: Текст был грамматически правильным, но менее связным по сравнению с лидерами. Иногда наблюдались небольшие несоответствия в стиле (1 балл за выполнение).
Лучшими моделями для генерации связного текста оказались YandexGPT и Saiga-Mistral-7b-Lora, обе модели обеспечили высокий уровень грамматической точности и стилевого соответствия.
Задача: модели должны были кратко и точно отвечать на вопросы, требующие общих знаний. Мы оценивали точность ответа и связность текста.
YandexGPT: Показала превосходные результаты. Модель отвечала кратко, точно и без ошибок. Поддерживался правильный стиль ответа без лишних отклонений (2 балла за выполнение).
Saiga-Mistral-7b-Lora: Хорошо справилась с задачей, давая точные ответы, однако иногда ответы были немного длиннее, чем требовалось (2 балла за выполнение).
OpenChat3.5: Модель часто повторяла вопрос в ответе, что делало ответы менее эффективными. Были недочеты в краткости и точности (1 балл за выполнение).
GigaChat: Ответы были неплохими, но иногда модель отклонялась от темы или давала излишне подробные ответы (2 балла за выполнение).
Mistral: Ответы были точными, но не всегда краткими. Модель иногда предоставляла дополнительные данные, что не требовалось (1 балл за выполнение).
Saiga-Llama3-8b: В целом справилась с задачей, дала хорошие ответы (2 балла за выполнение).
Лучшими моделями для точных и кратких ответов на вопросы стали YandexGPT и Saiga-Llama3-8b.
Задача: Модели должны были удерживать контекст и продолжать отвечать на вопросы в формате диалога. Мы задавали вопрос в несколько итераций, поскольку хотели проверить, насколько хорошо модель держит контекст. Оценивали точность ответа и связность текста.
YandexGPT: Отлично справилась с задачей. Модель удерживала контекст на протяжении всего диалога, четко и последовательно отвечала на вопросы, не теряя нить разговора (2 балла за выполнение).
Saiga-Mistral-7b-Lora: Показала хорошие результаты, удерживая контекст и отвечая на вопросы последовательно. Лишь в редких случаях ответы могли быть немного отклонены от основной темы (1 балл за выполнение).
OpenChat3.5: Модель плохо справлялась с диалогом, иногда теряла контекст, особенно при длинной последовательности вопросов (0 баллов за выполнение).
GigaChat: Результаты были средними. Модель иногда теряла контекст и давала ответы, которые не соответствовали предыдущим вопросам (1 балл за выполнение).
Mistral: Модель не хранит контекст, если задавать вопросы последовательно. Но отвечает на вопросы, заданные в одном промте (0 баллов за выполнение).
Saiga-Llama3-8b: Модель потеряла контекст при длинных диалогах и допускала ошибки в последовательности ответов (0 баллов за выполнение).
Лучшими моделями для ведения диалога оказались YandexGPT, GigaChat и Saiga-Mistral-7b-Lora, благодаря их способности точно поддерживать контекст.
Задача: Исправить грамматические ошибки в тексте, сохраняя оригинальный смысл. Оценивали соответствие грамматическим нормам русского языка.
YandexGPT: Модель справилась практически идеально. Ошибки были исправлены грамотно и текст стал полностью правильным, однако присутствовали англоязычные слова (1 балл за выполнение).
Saiga-Mistral-7b-Lora: Показала высокие результаты. Модель успешно исправила ошибки и выдала грамматически правильный текст (2 балла за выполнение).
OpenChat3.5: Модель исправила текст, но оставила множество ошибок и недочетов, из чего сделан вывод, что она не справилась (0 баллов за выполнение).
GigaChat: Результаты были почти идеальными — все ошибки были исправлены (2 балла за выполнение).
Mistral: Исправила часть ошибок, но не все корректно, сделан вывод, что модель не справилась (0 баллов за выполнение).
Saiga-Llama3-8b: Справилась с задачей, но иногда оставляла ошибки в тексте (2 балла за выполнение).
GigaChat, Saiga-Mistral-7b-Lora и Saiga-Llama3-8b показали лучшие результаты в исправлении грамматических ошибок.
Задача: модель должна пересказать длинный текст, сохраняя его основную суть. Здесь мы оценивали связность текста и то, ухватит ли модель основную суть. Моделям предлагался отрывок из произведенич "Идиот" Ф. М. Достоевского почти на тысячу знаков.
В качестве второго промта предлагали текст из юридического документа.
Saiga-Mistral-7b-Lora: Показала отличные результаты в кратком пересказе текста, сохраняя основные моменты и делая текст лаконичным (2 балла за выполнение).
Saiga-Llama3-8b: Хорошо справлялась с задачей, сокращая текст, но иногда упуская некоторые важные детали (1 балл за выполнение).
YandexGPT: Пересказы были точными, но иногда длились чуть больше необходимого (2 балла за выполнение).
OpenChat3.5: Модель в целом пересказывала текст, но иногда пропускала важные моменты или делала текст менее связным и некрасивым (0 баллов за выполнение).
GigaChat: Результаты были средними — пересказ был либо слишком коротким, либо терял ключевые элементы текста (1 балл за выполнение).
Mistral: Пересказ был недостаточно точным и текст мог терять важные аспекты (1 балл за выполнение).
Лидерами в этой категории стали YandexGPT, Saiga-Mistral-7b-Lora и Saiga-Llama3-8b.
Задача: модели, прочитав заданный текст, должны были ответить на вопросы, связанные с его содержанием. Вопросы касались ключевых деталей, фактов или выводов, изложенных в тексте. Важно было оценить, насколько точно и кратко модель может извлечь нужную информацию и ответить на вопрос, сохраняя контекст.
Мы предложили моделям те же тексты, которые использовали для краткого пересказа. Вопросы по текстам выглядели следующим образом:
YandexGPT: Показала отличные результаты. Модель давала точные и краткие ответы на вопросы по тексту, чётко следуя контексту и сохраняя логику (2 балла за выполнение).
Saiga-Mistral-7b-Lora: Хорошо справляется с ответами, поддерживает контекст и даёт точные ответы, но иногда склонна к избыточным деталям в ответах (2 балла за выполнение).
Saiga-Llama3-8b: Достаточно точна в ответах на вопросы, но иногда упускает детали или дает менее чёткие ответы по сравнению с лидерами (2 балла за выполнение).
OpenChat3.5: Модель отвечает на вопросы, но с недочетами, вроде некрасивого текста и стиля языка (1 балл за выполнение).
GigaChat: отличные результаты (2 балла за выполнение).
Mistral: Показала слабые результаты. Часто давала неточные или неполные ответы, особенно на более сложные вопросы по тексту (1 балл за выполнение).
Наилучшие результаты в решении этой задачи показала YandexGPT. Модель демонстрировала высокую точность и краткость ответов, уверенно удерживала контекст и справлялась как с простыми, так и с более сложными вопросами. Saiga-Mistral-7b-Lora также показала хорошие результаты, но иногда давала избыточно детализированные ответы, что могло быть излишним.
Задача: извлечь ключевые данные (имена, даты, суммы и т.д.) из юридического текста и представить их в формате JSON.
Saiga-Llama3-8b: Модель продемонстрировала хорошие результаты, однако извлекла не все данные (1 балл за выполнение).
YandexGPT: Также хорошо справилась с извлечением данных, но иногда могла допускать ошибки при сложных запросах (1 балл за выполнение).
Saiga-Mistral-7b-Lora: Показала хорошие результаты, но в сложных случаях иногда могла пропустить важные детали (1 балл за выполнение).
OpenChat3.5: Модель не справилась с задачей совсем (0 баллов за выполнение).
GigaChat: Результаты были идеальными, модель всегда извлекала данные корректно (2 балла за выполнение).
Mistral: Модель справилась хуже остальных, часто теряя данные и предоставляя их в некорректной форме (0 баллов за выполнение).
GigaChat стала лучшей моделью для извлечения структурированных данных.
8. Написание SQL-запросов
Задача: Генерация SQL-запросов на основе текстового описания базы данных и условий запроса.
YandexGPT: Продемонстрировала высокие результаты, генерируя SQL-запросы с минимальными ошибками. Модель понимала структуру базы данных и могла писать логически корректные запросы (2 балла за выполнение).
Saiga-Mistral-7b-Lora: Также показала хорошие результаты, но иногда допускала незначительные ошибки в синтаксисе (2 балла за выполнение).
OpenChat3.5: Модель не справлялась с задачей, даже если мы начинали общение на английском языке (0 баллов за выполнение).
GigaChat: Модель решала задачу, результаты были хорошими (2 балла за выполнение).
Mistral: SQL-запросы были неправильными, модель не решала задачу (0 баллов за выполнение).
Saiga-Llama3-8b: Модель справилась с задачей (2 балла за выполнение).
YandexGPT, GigaChat, Saiga-Llama3-8b и Saiga-Mistral-7b-Lora лучше всего справлялись с задачей написания SQL-запросов.
Результаты тестирования показали, что каждая из протестированных моделей обладает своими уникальными преимуществами и недостатками. В зависимости от специфики задачи, одна модель может быть более подходящей, чем другая.
Мы протестировали 4 LLM модели, которые можно поднять локально, и 2 облачных решения (YandexGPT и GigaChat) на ряде синтетических задач, которые показывают возможности моделей с разных сторон: генерация новых текстов, либо работа с уже готовыми текстами, их анализ и систематизация.
Мы свели оценки по каждому критерию и решаемой задаче в общую таблицу для наглядности. Оценка по каждому критерию может иметь оценку от 0 до 5. Ниже представлена таблица с критериями, по которым мы оценили данную модель (в качестве эталонных ответов взяли ответы YandexGPT):
Критерий | OpenChat 3.5 | YandexGPT | GigaChat | Mistral | Saiga-Mistral-7b-Lora | Saiga-Llama3-8b |
Точность ответов | 2 | 5 | 5 | 3 | 4 | 4 |
Ясность изложения | 2 | 5 | 4 | 2 | 4 | 4 |
Связность текста | 2 | 5 | 5 | 2 | 3 | 3 |
Грамматическая корректность | 2 | 5 | 5 | 2 | 4 | 4 |
Креативность | 3 | 5 | 4 | 3 | 4 | 4 |
Умение суммаризировать | 1 | 5 | 5 | 2 | 5 | 5 |
Общение на русском языке | 1 | 5 | 5 | 1 | 5 | 5 |
Итого среднее значение | 1,9 | 5,0 | 4,7 | 2,1 | 4,1 | 4,1 |
Оба облачных решения хорошо справились с синтетическими задачами, и только 2 локальных модели из 5 локальных показали сравнимый по качеству результат: Saiga-Mistral-7b-Lora и Saiga-Llama3-8b.
Ниже приведена таблица с результатами по всем моделям, насколько хорошо они справились с поставленными задачами: 0 – модель вообще не справилась с задачей, 1 – справилась, но со значительными помарками, 2 – справилась почти идеально.
Задача | OpenChat 3.5 | YandexGPT | GigaChat | Mistral | Saiga-Mistral-7b-Lora | Saiga-Llama3-8b |
Ответы на известные вопросы | 1 | 2 | 2 | 1 | 2 | 2 |
Генерация текста | 1 | 2 | 2 | 2 | 2 | 1 |
Ответы в формате беседы | 0 | 2 | 1 | 0 | 1 | 0 |
Исправление грамматики | 0 | 1 | 2 | 0 | 2 | 2 |
Краткий пересказ | 0 | 2 | 1 | 1 | 2 | 1 |
Ответы на вопросы по тексту | 1 | 2 | 2 | 1 | 2 | 2 |
Извлечение данных | 0 | 1 | 2 | 0 | 1 | 1 |
Написание SQL запросов | 0 | 2 | 2 | 0 | 2 | 2 |
Общий балл | 3 | 14 | 14 | 5 | 14 | 11 |
По результатам этой таблицы Saiga-Mistral-7b-Lora является лучшим выбором в качестве локальной языковой модели.
На основе двух вариантов оценки мы делаем вывод, что лучшие решения для работы с русскоязычными документами - облачные платформы YandexGPT и GigaChat.
Но в ситуациях, когда необходимо использовать локальную языковую модель, стоит рассмотреть Saiga-Mistral-7b-Lora.
Модели YandexGPT и Saiga-Mistral-7b-Lora показали наилучшие результаты в большинстве задач, связанных с генерацией текста, диалогами и исправлением ошибок.
Saiga-Llama3-8b стала лучшим выбором для задач извлечения данных и анализа документов, что делает её отличным инструментом для автоматизации обработки документов.
В будущем, с развитием технологий NLP, можно ожидать появления ещё более точных и производительных языковых моделей, которые смогут решать задачи на ещё более высоком уровне.
Кроме того, возможность дообучения моделей на специализированных датасетах (как это было сделано с Saiga-Mistral-7b-Lora и Saiga-Llama3-8b) позволит адаптировать их под конкретные нужды компаний, работающих с русским языком.