Привет, Хабр! Команда AGI NLP снова на связи. В SberDevices мы занимаемся исследованиями, связанными с Large Language Models (LLM) и их оценкой. В коллаборации с коллегами из МФТИ, AIRI и ecom.tech мы разработали бенчмарк для оценки моделей на длинном контексте для русского языка под названием LIBRA, которому посвящен этот пост.

До недавнего времени большинство LLM испытывали трудности с обработкой длинных последовательностей и могли работать только с ограниченным контекстом длиной в несколько тысяч токенов. Источником проблемы является природа механизма self-attention в трансформерных нейросетях — зависимость количества вычислений для получения полной матрицы внимания от длины контекста является квадратичной. Однако при решении многих интеллектуальных задач умение модели оперировать с длинным контекстом является критически важной. Действительно — возможность поместить в контекст модели большой документ (книгу, большую таблицу, свод законов и т. п.) открывает путь к целому ряду полезных способов применения LLM. Неудивительно, что в последние годы развернулась настоящая гонка за удлинением контекста — благодаря хитрым оптимизациям появились способы более быстрого расчёта матрицы внимания, были созданы различные виды разреженного внимания, делались заявления о моделях с длиной контекста в миллионы и миллиарды токенов, строились глубокомысленные графики, демонстрирующие экспоненциальный рост длины контекста моделей год от года. Однако сама по себе длина контекста модели параметр весьма бессмысленный — в конце концов вы можете обеспечить практически любую длину контекста при помощи RAG-механики. Что действительно важно, так это то, что именно модель способна «увидеть» в этом контексте, всегда ли способна она найти скрытую «иголку» в «стоге сена» длинного контекста, способна ли качественно суммаризировать документ, помещённый в длинный контекст, способна ли предпринять реляционную операцию над огромной таблицей? Словом, важно не только количество (длина контекста), но и качество (способность модели эффективно оперировать с этим контекстом). А это, в свою очередь, подводит нас к необходимости уметь хорошо оценивать понимание LLM длинного контекста.

Для английского языка в этом направлении были разработаны бенчмарки, список которых возглавляют LongBench и L-Eval. На русском же языке бенчмарк такого рода до сих пор отсутствовал.

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


Из чего состоит LIBRA?

LIBRA включает в себя 21 задачу, которые разделены на четыре группы сложности и позволяют оценивать LLM в различных длинах контекстов — от 4K до 128K токенов.

В первую группу (Group I) мы поместили задачи, связанные с поиском короткого фрагмента важной информации среди большого количество нерелевантного текста.

Во второй группе (Group II) перед моделями ставятся задачи найти ответ на вопрос (question answering, QA) и ответы с множеством выбора (multiple choice). 

Третья группа (Group III) является логическим усложнением задач из второй группы, так как теперь перед моделями лежит необходимость поиска ответа, распределенного среди нескольких релевантных фрагментов во всем тексте. 

Наконец, четвертая группа (Group IV) состоит из задач, требующих от LLM понимания всего контекста, решения математических задач и задач QA в комплексных доменах.

Для распределения экземпляров датасетов по длинам контекстов мы посчитали на всем бенчмарке среднюю фертильность — среднее количество токенов, получаемое при токенизации одного слова. Значение средней фертильности получилось примерно равным 3, оно и было выбрано для подсчета длины контекста в токенах.

Ниже представлен список задач вместе с их длинами контекстов, метриками, а также источниками данных, которые легли в основу датасетов из нашего списка.

Название датасета

Максимальная длина контекста

Метрика

Источник данных

Passkey

128k

EM

https://github.com/CStanKonrad/long_llama/blob/main/examples/passkey.py

PasskeyWithLibrusec

128k

EM

https://github.com/CStanKonrad/long_llama/blob/main/examples/passkey.py, https://huggingface.co/datasets/IlyaGusev/librusec

MatreshkaNames

128k

EM

https://huggingface.co/datasets/zjkarina/matreshka, https://www.kaggle.com/datasets/rai220/russian-cyrillic-names-and-sex/data

MatreshkaYesNo

128k

EM

https://huggingface.co/datasets/zjkarina/matreshka, https://www.kaggle.com/datasets/rai220/russian-cyrillic-names-and-sex/data

LibrusecHistory

64k

EM

https://huggingface.co/datasets/IlyaGusev/librusec

ruTREC

32k

EM

https://huggingface.co/datasets/THUDM/LongBench/viewer/trec_e

ruSciFi

64k

EM

https://huggingface.co/datasets/L4NLP/LEval/viewer/sci_fi

ruSciAbstractRetrieval

128k

EM

https://huggingface.co/datasets/THUDM/LongBench/viewer/passage_retrieval_en, https://huggingface.co/datasets/mlsa-iai-msu-lab/ru_sci_bench

ruTPO

8k

EM

https://huggingface.co/datasets/L4NLP/LEval/viewer/tpo

ruQuALITY

16k

EM

https://huggingface.co/datasets/L4NLP/LEval/viewer/quality

LongContextMultiQ

128k

EM

https://huggingface.co/datasets/ai-forever/MERA/viewer/multiq

LibrusecMHQA

8k

EM

https://huggingface.co/datasets/IlyaGusev/librusec

ru2WikiMultihopQA

32k

EM

https://huggingface.co/datasets/THUDM/LongBench/viewer/2wikimqa_e

ruBABILongQA1

128k

EM

https://huggingface.co/datasets/RMT-team/babilong

ruBABILongQA2

128k

EM

https://huggingface.co/datasets/RMT-team/babilong

ruBABILongQA3

128k

EM

https://huggingface.co/datasets/RMT-team/babilong

ruBABILongQA4

128k

EM

https://huggingface.co/datasets/RMT-team/babilong

ruBABILongQA5

128k

EM

https://huggingface.co/datasets/RMT-team/babilong

ruSciPassageCount

128k

EM

https://huggingface.co/datasets/THUDM/LongBench/viewer/passage_count, https://huggingface.co/datasets/mlsa-iai-msu-lab/ru_sci_bench

ruQasper

32k

F1

https://huggingface.co/datasets/THUDM/LongBench/viewer/qasper_e

ruGSM100

16k

EM

https://huggingface.co/datasets/L4NLP/LEval/viewer/gsm100

Чтобы не перегружать пост, мы опускаем множество деталей, подробные описание можно прочесть в препринте нашей статьи на arxiv, посвящённой LIBRA.

Результаты моделей

Мы взяли 12 наиболее популярных больших языковых моделей с длинным контекстом и замерили их на бенчмарке. Ниже представлена таблица с оценкой моделей по длинам контекстов, также мы сделали таблицу с оценкой моделей по задачам, она слишком велика для этой статьи, но доступна в нашем лидерборде.

Название модели

Общий результат

4k

8k

16k

32k

64k

128k

GPT-4o

70,2

73,4

73,2

73,6

62

65,3

54,9

GLM4-9B-Chat

52,3

61,5

59,8

53,4

50,6

48,7

43,8

Mistral-7B-Instruct-v0.3

29,9

48,3

44,7

37,3

32,3

0

0

Mistral-7B-v0.3

27,4

46,6

42,9

37,9

32,8

0

0

LLaMA-2-7B-32k

27,1

45,2

43,7

36,6

33

0

0

LongChat-7B-v1.5-32k

22,1

38,7

36

30,4

24,5

0

0

LLaMA-3-8B-Instruct

21,9

58,1

56,9

0

0

0

0

Saiga-LLaMA-3-8B

21

58,7

55,1

0

0

0

0

LLaMA-3-8B

18,5

54,7

49,4

0

0

0

0

Mistral-7B-v0.1

17,3

47,3

42,8

5,9

0,6

0

0

ChatGLM2-6B-32K

15,7

28,6

24,9

22,5

14,5

0

0

LongAlpaca

13,7

26

22,3

18,8

13,8

0

0

!N.B. Хочется сразу отметить, что из-за ограничения в ресурсах мы прогоняли GPT-4o только на 10% данных каждого датасета, поэтому его результаты могут быть неточными. Все остальные модели оценивались на всех датасетах по допустимым для них длинам.

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

Отметим, что в силу большой длины заданий мы проводим тесты моделей в формате zero-shot, что позволяет избежать выходов за пределы допустимой длины контекста.

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

DYI или как всё запустить самому

Клонируем репозиторий бенчмарка:

git clone https://github.com/ai-forever/LIBRA.git

Далее устанавливаем все необходимые пакеты:

pip install -r requirements.txt

Создаем конфиг для вашей модели в папке configs, используя шаблон configs/template.ini. После чего запускаем генерацию ответов моделью:

python predict.py -c <path_to_config>

Можем дополнительно указать токен доступа для аккаунта Hugging Face:

python predict.py -c <path_to_config> -hf <hf_token>

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

python eval.py -p <path_to_predictions>

Результаты оценки сохраняются в папке results.

Свои результаты можно загрузить на наш лидерборд, для этого их нужно добавить в формате <model_name>.json в репозиторий лидерборда и сделать Pull Request. После этого мы обновим таблицу с результатами, добавив вашу модель.

Эпилог

Мы рады презентовать созданный нашей командой русскоязычный бенчмарк LIBRA для оценки понимания LLM длинного контекста и надеемся, что он принесёт пользу сообществу создателей и пользователей LLM.

Мы всегда открыты к любым видам сотрудничества, а также будем рады видеть ваши сабмиты в наш лидерборд!

Над проектом трудились: тот самый я — Игорь Чурин (@Gscraid),  Мурат Апишев (@murat_apishev), Мария Тихонова (@mashkka_t), Денис Шевелев (@onetwotrickster), Айдар Булатов (@booydar), Юрий Куратов (@yurakuratov), Сергей Аверкиев (@averkij), Алена Феногенова (@alenusch).

До новых встреч!

Комментарии (0)