ContextTrap-4K v0.1 - крафтовый бенчмарк LLM моделей для оценки способностей отвечать на вопросы к контексту на русском языке

Результаты ContextTrap-4K v0.1 на 2024-05-31. % - это доля всех очков, полученная моделью.
Результаты ContextTrap-4K v0.1 на 2024-05-31. % - это доля всех очков, полученная моделью.

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

  • Общее описание
  • Почему крафтовый бенчмарк
  • Инференс через ollama
  • Предпосылки создания бенчмарка
  • Промпт бенчмарка
  • Формулировка вопросов
  • Декомпозиция сложных вопросов
  • Формат вывода ответа
  • Ложная слепота к Coca-Cola
  • Инсайты по моделям
  • Оркестр моделей вместо одной самой умной
  • Адаптация исходного текста под LLM
  • Будущее бенчмарка

Общее описание

ContextTrap (контекстная ловушка) - это небольшой крафтовый бенчмарк LLM моделей для оценки способностей отвечать на вопросы по контексту на русском языке. Другими словами, тест на способности модели извлекать, анализировать факты и знания из текста.

На текущий момент разработана бета версия ContextTrap-4K, оптимизированная для тестирования моделей, способных вместить не менее 4000 токенов.

Бенчмарк включает более 70 вопросов различной сложности, относящихся к 12 файлам разнообразной тематики и структуры (договоры, инструкции, технические обзоры и др.). Объем каждого файла составляет около 2000 слов на русском языке.

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

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

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

Внимание! ContextTrap сравнивает лишь узкий срез задач, поэтому об общем качестве модели говорить нельзя. В моем тесте модель может иметь низкий рейтинг, но в других задачах превосходить топ-модели моего рейтинга. Делайте свой бенч - это ML-дао).

Почему крафтовый бенчмарк

1) Проверка ответов на тестовые вопросы происходит только в ручном режиме, 2) тест запил на коленках в моем "гараже" 3) я энтузиаст без всяких ученых степеней и ML-звезд, 4) поэтому точно крафтовый бенч, сделанный с любовью к познанию))).

Каждый ответ внимательно изучается и сравнивается с правильными результатом. Интерпретация ответов порою бывает трудной, потому что модель дает скользкие ответы, полностью автоматизировать это трудно. С одной стороны, она не соврала, а с другой и не дала чёткий ответ. Иногда я ответы интерпретировал не четко. Поэтому есть погрешность в ручной оценке, но отклонение финального рейтинга скорее всего не более 1-5%.

Инференс через ollama

Инференс моделей проводился через API к Ollama без изменения template или system, которые прописаны к каждой модели свои. Пример:

ContextTrap-4K v0.1 - крафтовый бенчмарк LLM моделей для оценки способностей отвечать на вопросы к контексту на русском языке
ContextTrap-4K v0.1 - крафтовый бенчмарк LLM моделей для оценки способностей отвечать на вопросы к контексту на русском языке

Это не исключает полностью кривые настройки в самой Ollama, но хотя бы приближает к прогнозируемому инференсу моделей, в отличие от ванильного HF, где порою даже сложно заставить модель что-то сказать без бубнов.

TODO: В перспективе планируется сравнение разных подходов к квантизации.

Предпосылки создания бенчмарка

1. С начала года появилась туча новых LLM моделей и бесчисленные производные после файн-тюнинга и прочего нейрошаманизма. Обычно каждый новый релиз модели бьет предыдущие рекорды бенчмарков и, конечно же, обязательно в чем-то уносит в нокаут GPT-4 и Claude. Но когда начинаешь пахать с этой новой победоносной моделью в реальном поле - возникает когнитивный диссонанс, потому что модель тупит.

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

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

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

5. Появилось множество видов квантизаций и собственно даже в рамках одного метода типа GGUF мы имеем версии 8, 6, 5, 4 бита и другие вариации. Поэтому цель бенчмарка также состоит в оценке качества разной разрядности в сравнении с fp16.

Промпт бенчмарка

Все модели тестировались с одним и тем же промптом:

p = "контекст: " + text + "Используй контекст выше для ответов на вопросы на русском языке. Если документ не содержит ответа - напиши неизвестно. Вопрос: " + question + ". Отвечай на русском языке."

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

Формулировка вопросов

"Правильно заданный вопрос - это уже половина ответа."

Формулировка вопросов, как и в поисковых системах, продолжает является ключом к поиску ответа. В 2024 году сообщается, что Google обрабатывает более 8,5 миллиардов поисковых запросов ежедневно. Из них около 15% являются совершенно новыми. Можно экстраполировать эту цифру и по отношению к LLM.

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

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

Декомпозиция сложных вопросов

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

Пример вопроса: Подсчитай сумму пени в евро за просрочку шефмонтажа на 10 дней.

Чтобы ответить на этот вопрос сначала 1) нужно найти в чем выражается пенни. Например, 0.5% от суммы монтажа за каждый день просрочки. 2) Затем нужно найти сумму шефмонтажа. Допустим 10 000 Евро. 3) Далее модель уже по своей логике должна подсчитать.

Часто некоторые модели не находили вводные данные при одном таком вопросе. Но легко находили по отдельным запросам. Из этого можно сделать вывод, что полезной практикой будет: разбивка сложного вопроса на несколько простых запросов, а потом соединение полученных ответов в новый контекст и повтор главного вопроса.

Формат вывода ответа

Читая разные ответы моделей сложилось впечатление, что каждая модель хороша по-своему. Где-то криво отвечает, но правильно, где-то слишком коротко, где-то выдумывает, где-то чересчур подробно. Больше всего вымораживает у всех моделей так это самые невероятные варианты ответов, именно по форматированию.

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

Ложная слепота к Coca-Cola

В ходе тестирования было обнаружено, что некоторые модели в упор не видят в тексте упоминание Coca-Cola. Бренд этот присутствовал документе договора явно и в нескольких местах - я специально приписал его для тестирования. Список моделей, склонных к ложной слепоте:

  • mixtral-8x7b
  • mixtral:8x22b
  • wizardlm2-8x22b
  • aya-8b-23-q8_0

Инсайты по моделям

Откровение, превзошел исходник llama3 почти на 10 пунктов. Это действительно воодушевляет. Пока это первый случай в моем тесте, чтобы после тюнинга модель стала лучше. LLaMA3-iterative-DPO-final - выпустили неофициальную контрольную точку самой передовой модели instruct в своем классе, LLaMA3-iterative-DPO-final. На всех трех широко используемых бенчмарках для обучающих моделей: Alpaca-Eval-V2, MT-Bench, Chat-Arena-Hard, модель превосходит все модели аналогичного размера (например, LLaMA-3-8B-it), большинство крупных моделей с открытым исходным кодом (например, Mixtral-8x7B-it), а также сильные проприетарные модели (например, GPT-3.5-turbo-0613). Модель обучена на открытых наборах данных без дополнительной человеческой/GPT4-маркировки.

llama3-chatqa:70b-v1.5-q8_0

llama3-70b деградировала после chatqa почти на 27 пунктов. Получается, уже как правило, что если кто-то на датасетах начал тюнить, то универсальность модели теряется исходная. В целом модель по многим вопросам отвечает очень коротко, что плюс, но по некоторым выдает только одну букву. С чем связно не понял. Думаю такую модель актуально только на инглише тестить.

При всей лично симпатии к wizardlm2:8x22b-q4_0

на русском он оказался слабоват в 4бит. Однако у него есть одна особенность/потенциал - он смог выполнить очень сложную задачу, которую во всех моих тестах выполнил только Cloude 3 Opus и GPT4. В следующих версиях бенча этой задаче будет выделен значительно больший вес и модель будет выше ранжироваться. Также визард порадовал богатством форматирования ответа, очень похож на GPT4.

wangrongsheng/openchat Q4_0

(Llama-3 based version OpenChat 3.6 20240522) деградация несущественная, но никакого обещанного outperforming official Llama 3 8B Instruct не возникло в моем тесте.

Cвежий mistral:7b-instruct-v0.3-fp16 вышедший в конце мая

Неожиданно поборол ну или можно сказать на уровне Mixtral 8х7b v0.1. Весьма хороша. Никаких артефактов, русский норм. Но часто видел противоречивость логики на вопрос "Можно ли" - ответ "Да", и тут же цитата из документа, где как раз нельзя).

mixtral:8x7b-instruct-v0.1-q5_1 RUEN QRU

Еще одно откровение, ожидаемое. Модель поднялась почти аж на 13 пунктов после того, когда я перевел исходный русский текст файлов на английский через Яндекс (метка RUEN), а вопросы продолжил задавать на русском языке (метка QRU). Правда моя просьба в промпте отвечать только на русском не срабатывает - вывод почти всегда был корявым - русско-английским. Но это возможно поправимо. Другие модели в таком режиме не стал тестировать.

Оркестр моделей вместо одной самой умной

Все чаще приходишь к выводу, что полагаться на одну самую умную локальную модель контрпродуктивно. Распространение MoE моделей и распространения фреймворков для LLM-агентов также подтверждает эту идею.

Мощные и умные модели долгие и дорогие в инференсе. Поэтому молотить все тексты через Llama 3 70b видится расточительством.

По типу задач по контексту модели можно разделить на

  • Ищейка - поиск фактов и цифр при несложных запросах в несложных структурах, с этим могут справляться 7Б модели
  • Математик - для вычисления математических задач по контексту
  • Логик - для размышления по контексту, не связанные с математикой. Он же на ошибки проверит.
  • Писатель - хорошо форматирует вывод

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

Адаптация исходного текста под LLM

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

На мой взгляд, к локальным LLM нужно относится как к ребенку, а к GPT4 или Cloude как к подростку, и подсовывать им текст уже заранее адаптированный под особенности работы моделей. Это актуально для набора данных, который будет многократно использован. Потому что само переформатирование может занять минуты и десятки минут, что неадекватно для нетерпеливого пользователя со случайным документом.

Отчасти RAG методы, в частности Knowledge Map, пытаются решить эту проблему, но в конечном счете чаще всего они подсовывают в LLM те самые исходные блоки текста. Моя идея заключается еще в том, что нужно сам текст готовить и упрощать, еще до применения RAG.

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

Некоторые идеи как переписать текст я уже озвучивал в другой своей статье:

Будущее бенчмарка

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

Нужно сбалансировать число простых и сложных вопросов, чтобы действительно умные модели получили еще больший отрыв от слабых. Сейчас отрыв в 10 пунктов кажется несущественным, но при балансировке отрыв может стать более адекватным - в 50 и более пунктов.

Необходима группировка вопросов по категориям - поиск, логика, математика и другие. Таким образом можно будет в лидерборде более структурно показать в чем модель сильна или слаба.

Интерпретация ответов также требует корректировки, простое правильно/неправильно по многим ответам не подходит. Например, при задаче NER. Если правильный ответ 10 позиций, но модель ответила 8-9, то это хороший ответ.

Система штрафов будет доработана и созданы более четкие правила их применения.

В тест пока не включаются разные суммаризации, классификации и прочие задачи изменения или переформатирования содержания. Сюда также не включены задачи типа few-shot learning. Возможно со временем стоит внедрить.

На этом пока все, скидывайте какие модели хотели бы протестить на текущем и будущих версиях тестах. Если есть примеры интересных задач по контексту - было бы полезно, если поделитесь, по возможности включу в следующие версии.

Также вы можете подписаться на мой ТГ-канал, где я делюсь своими находками и опытом.

1010
3 комментария

Жду суммаризацию) Отличная статья

1

LLaMA3-iterative-DPO-final - такой модели нет в рейтинге на картинке

Это в ollama dimweb/sfr-llama3-8b

1