Салют, Хабр! На связи команды AGI NLP и нейронных сетей Виртуального ассистента Салют. В SberDevices наши команды занимаются созданием бенчмарков, а также обучением моделей для векторных представлений текстов или эмбеддеров. В этой статье расскажем про наш новый русскоязычный бенчмарк для эмбеддеров текста — ruMTEB.

Cегодня очень много новостей посвящено большим языковым моделям (Large Language Models). Каждый день мы слышим про то, что генеративные модели показывают те или иные выдающиеся результаты в области работы с текстом и постепенно переходят в мультимодальный формат. Мы тоже принимаем активное участие в развитии этого направления, например, в одном из предыдущих постов мы писали про бенчмарк MERA для оценки фундаментальных моделей, который позволяет исследовать их способности на широком спектре доменов и задач.

Однако в этом посте хотели бы написать про другое, не менее важное направление в NLP, которое, оставаясь немного в стороне от основного новостного стрима, было и продолжает быть крайне актуальным. Мы говорим о векторных представлениях текста, или, как их еще называют, текстовых эмбеддингах и эмбеддерах, то есть моделях, позволяющих строить подобные векторные представления. С помощью эмбеддингов сегодня решается множество различных текстовых и мультимодальных задач. Например, задачи, связанные с информационным поиском, ранжированием, семантическим поиском, RAG’ом, оценкой качества перефразирования текста, и многие другие.

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

Как только у нас появляется новый класс моделей и новый класс объектов (а сейчас мы говорим об эмбеддингах для текста и эмбеддерах), возникает вопрос: а насколько хорошего качества получаются эмбеддинги и насколько хорошо справляется с той или иной задачей определенная эмбеддер-модель? Тут не обойтись без оценки и набора задач, на которых мы можем оценивать качество и гонять модели. И если для английского языка уже существует ряд известных бенчмарков c MTEB во главе, то для русского до недавнего времени единственным набором тестов был бенчмарк Энкодечка, который появился несколько лет назад и активно используется до сих пор. Однако он имеет существенно меньше задач (10 против 56 в MTEB) и не имеет задач для оценки retrieval-способностей модели.

Задачи ruMTEB

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

Всего ruMTEB включает в себя 23 задания: 17 упомянутых выше датасетов и 6 мультиязычных сетов из оригинального MTEB (MassiveIntentClassification, MassiveScenarioClassification, MIRACLReranking, MIRACLRetrieval, STS22, RUParaphraserSTS), из которых мы взяли русскую часть. В этой статье поговорим именно про новые 17 задач для оценки эмбеддеров и покажем, как вы можете оценить свои модели на них.

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

Датасеты мы отфильтровали, удалили дубликаты, привели к формату оригинального бенчмарка MTEB и выложили под открытой лицензией в наш репозиторий ai-forever. Код для прогона моделей интегрировали в оригинальный репозиторий mteb (пример того, как оценивать свои модели на ruMTEB можно найти в части «Оценка своей модели на ruMTEB»).

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

Название задачи

HuggingFace name

Тип задачи

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

KinopoiskClassification

ai-forever/kinopoisk-sentiment-classification

Classification

huggingface.co/datasets/blinoff/kinopoisk

InappropriatenessClassification

ai-forever/inappropriateness-classification

Classification

github.com/s-nlp/inappropriate-sensitive-topics/tree/main/Version3

GeoreviewClassification

ai-forever/georeview-classification

Classification

github.com/yandex/geo-reviews-dataset-2023

HeadlineClassification

ai-forever/headline-classification

Classification

paraphraser.ru/download/

RuSciBenchOECDClassification

ai-forever/ruscibenc-oecd-classification

Classification

github.com/mlsa-iai-msu-lab/ru_sci_bench/tree/main/ru_sci_bench

RuSciBenchGRNTIClassification

ru-scibench-grnti-classification

Classification

github.com/mlsa-iai-msu-lab/ru_sci_bench/tree/main/ru_sci_bench

RuReviewsClassification

ai-forever/ru-reviews-classification

Classification

github.com/sismetanin/rureviews

TERRaClassification

ai-forever/terra-pairclassification

Pair Classification

russiansuperglue.com/tasks/task_info/TERRa

CEDRClassification

ai-forever/cedr-classification

MultiLabelClassification

huggingface.co/datasets/sagteam/cedr_v1

SensitiveTopicsClassification

ai-forever/sensitive-topics-classification

MultiLabelClassification

github.com/s-nlp/inappropriate-sensitive-topics/blob/main/Version3/sensitive_topics.csv

GeoreviewClusteringP2P

ai-forever/georeview-clustering-p2p

Clustering

github.com/yandex/geo-reviews-dataset-2023

RuSciBenchGRNTIClusteringP2P

ai-forever/ru-scibench-grnti-clustering-p2p

Clustering

github.com/mlsa-iai-msu-lab/ru_sci_bench/tree/main/ru_sci_bench

RuSciBenchOECDClusteringP2P

ai-forever/ru-scibench-oecd-clustering-p2p

Clustering

github.com/mlsa-iai-msu-lab/ru_sci_bench/tree/main/ru_sci_bench

RuSTSBenchmarkSTS

ai-forever/ru-stsbenchmark-sts

STS

huggingface.co/datasets/PhilipMay/stsb_multi_mt

RiaNewsRetrieval

ai-forever/ria-news-retrieval

Retrieval

github.com/RossiyaSegodnya/ria_news_dataset

RuBQRetrieval

ai-forever/rubq-retrieval

Retrieval

github.com/vladislavneon/RuBQ

RuBQReranking

ai-forever/rubq-reranking

Reranking

github.com/vladislavneon/RuBQ

Все задачи можно разделить на 7 типовых категорий: Классификация (Classification — 7 задач), Классификация пар (Pair Classification — 1 задача), Многозначная классификация (Multi-Label Classification — 2 задачи), Кластеризация (Clustering — 3 задачи), Поиск Семантической Близости (STS — 1 задача), Поиск (Retrieval — 2 задачи) и Переранжирование (Reranking — 1 задача). Ниже кратко опишем, что представляют из себя задачи каждой категории:

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

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

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

  • Кластеризация — датасеты на задачу кластеризации текстов, где требуется разделить тексты на непересекающиеся кластеры.

  • Поиск Семантической Близости (STS) — датасеты на задачу определения семантической близости между текстами. Каждый пример содержит пару текстов, для которой необходимо предсказать их семантическую близость, выраженную в виде числового коэффициента.

  • Переранжирование (реранкинг) датасеты на задачу реранкинга. Для каждого запроса в датасете дан набор релевантных и нерелевантных текстов. Задача — переранжировать набор текстов для конкретного запроса в порядке убывания релевантности.

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

Оценку моделей и текстовых эмбеддингов на ruMTEB мы сделали по формату бенчмарка MTEB. При этом мы интегрировали кодовую базу для оценки на наших сетах в оригинальный фреймворк, так что теперь для оценки достаточно установить код mteb и запустить его для нужных задач (пример запуска кода можно найти чуть ниже в секции «Оценка своей модели на ruMTEB»).

Оценка своих моделей на ruMTEB

Прежде всего вам необходимо установить фреймворк mteb с помощью команды:

pip install mteb

Дальше все, что вам остается сделать — запустить свою модель, подав на вход список задач из ruMTEB. Ниже представлен пример для модели sbert_large_mt_nlu_ru.

import mteb
# load a model from the hub (or for a custom implementation see https://github.com/embeddings-benchmark/mteb/blob/main/docs/reproducible_workflow.md)
model_name = "sbert_large_mt_nlu_ru"
model = mteb.get_model(model_name)

names = ['GeoreviewClassification', 'GeoreviewClusteringP2P','HeadlineClassification', 'InappropriatenessClassification', 'KinopoiskClassification', 'RiaNewsRetrieval', 'RuBQRetrieval', 'RuReviewsClassification', 'RuSciBenchGRNTIClassification', 'RuSciBenchGRNTIClusteringP2P', 'RuSciBenchOECDClassification', 'RuSciBenchOECDClusteringP2P', 'RuSTSBenchmarkSTS', 'TERRa', 'RuBQReranking', 'CEDRClassification', 'SensitiveTopicsClassification']

tasks = mteb.get_tasks(languages=['rus'], tasks = names)

evaluation = mteb.MTEB(tasks=tasks)

evaluation.run(model, output_folder="results")

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

Замечание: А если вы хотите прогнать модель на всем ruMTEB, то к списку задач необходимо добавить еще 6 заданий из оригинального MTEB: MassiveIntentClassification, MassiveScenarioClassification, MIRACLReranking, MIRACLRetrieval, STS22, RUParaphraserSTS.

Методология оценки

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

Классификация

Прежде всего происходит даунсэмплинг трейна. А именно, из обучающей выборки сэмплируется подмножество примеров, содержащих n (8–16) примеров для каждого лейбла, которое затем и используется в качестве трейна. Далее с помощью эмбеддера получаем эмбеддинги для уменьшенной версии трейна и теста. На трейне обучаем логистическую регрессию (не более 100 итераций), с помощью которой затем делаем предсказание для тестовых примеров, а результат оцениваем с помощью Accuracy.

Классификация пар

Для задач классификации пар мы строим текстовые эмбеддинги для каждого из двух предложений в паре. Между этими эмбедингами вычисляется косинусная близость (Cosine Similarity), для которой затем подбирается наилучший порог бинарной отсечки (не зря у нас задачи данной категории относятся к бинарной классификации). А в качестве метрики используется Average Precision.

Многозначная Классификация

В многозначной классификации с помощью эмбеддера получаем векторы для трейна и теста. Для оценки полученных эмбеддингов используется техника bootsrap, когда оценка повторяется 10 раз на различных bootstrap-подвыборках. При этом в каждом из 10 экспериментов сэмплируется новая обучающая подвыборка, содержащая по 8 примеров для каждого лейбла, которая затем используется для обучения kNN с 5 соседями. Результат оценивается с помощью Accuracy, усредненной по всем экспериментам.

Кластеризация

В задачах кластеризации для cкорости оценки на больших датасетах берется подмножество из не более чем 2048 примеров. Затем с помощью эмбедерной модели для них строятся текстовые эмбеддинги. Сама оценка также как и многозначная классификация использует технику bootstrap, когда процедура оценки повторяется 10 раз, при этом каждый раз сэмплируется обучающая подвыборка размера N. На полученной выборке затем обучается алгоритм k-means, где гиперпараметр k равен числу классов. В качестве итоговой метрики используется V-measure, усредненная по всем запускам.

Поиск Семантической Близости (STS)

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

Переранжирование (реранкинг)

Для задачи реранкинга всем запросам и текстам из датасета сопоставляются текстовые эмбеддинги. Затем набор текстов для каждого запроса упорядочиваются в порядке убывания косинусной близости между эмбеддингом запроса и эмбеддингом текста. Результат оценивается с помощью MAP@10, усредненного по всем запросам.

Поиск

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

Комментарий: Отмечу, что выше мы описали стандартный pipeline оценки и основные метрики для каждой задачи. Помимо этого в процессе оценки для каждого типа задачи считается еще ряд дополнительных метрик, а также у пользователя есть возможность управлять отдельными шагами оценки (например, для задач классификации можно использовать kNN, а не логистическую регрессию). Подробнее об этом можно почитать в документации фреймворка.

Эксперименты

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

  • sbert_large_mt_nlu_ru — мультизадачная версия русскоязычного BERT large для эмбеддингов предложений;

  • sbert_large_nlu_ru — русскоязычная модель BERT large для эмбеддингов предложений;

  • rubert-tiny2 — компактная дистиллированная версия BERT для русского языка;

  • multilingual-e5-small — small версия мультиязычной модели e5 для эмбеддингов текстов;

  • multilingual-e5-base — base версия мультиязычной модели e5 для эмбеддингов текстов;

  • multilingual-e5-large — large версия мультиязычной модели e5 для эмбеддингов текстов.

 

Metric

sbert_large_mt_nlu_ru

sbert_large_nlu_ru

rubert-tiny2

multilingual-e5-small

multilingual-e5-base

multilingual-e5-large

CEDRClassification

Accuracy

0,368

0,358

0,369

0,401

0,4234

0,448

GeoreviewClassification

Accuracy

0,397

0,40

0,396

0,447

0,461

0,497

GeoreviewClusteringP2P

V-measure

0,584

0,590

0,442

0,586

0,545

0,605

HeadlineClassification

Accuracy

0,772

0,793

0,742

0,732

0,757

0,758

InappropriatenessClassification

Accuracy

0,646

0,625

0,586

0,592

0,588

0,616

KinopoiskClassification

Accuracy

0,503

0,495

0,491

0,50

0,509

0,566

RiaNewsRetrieval

NDCG@10

0,214

0,111

0,140

0,70

0,702

0,807

RuBQReranking

MAP@10

0,561

0,468

0,461

0,715

0,720

0,756

RuBQRetrieval

NDCG@10

0,298

0,124

0,109

0,685

0,696

0,741

RuReviewsClassification

Accuracy

0,589

0,583

0,570

0,612

0,630

0,653

RuSTSBenchmarkSTS

Pearson correlation

0,712

0,588

0,694

0,781

0,796

0,831

RuSciBenchGRNTIClassification

Accuracy

0,542

0,539

0,456

0,550

0,563

0,582

RuSciBenchGRNTIClusteringP2P

V-measure

0,522

0,504

0,414

0,511

0,516

0,520

RuSciBenchOECDClassification

Accuracy

0,438

0,430

0,355

0,427

0,423

0,445

RuSciBenchOECDClusteringP2P

V-measure

0,473

0,464

0,381

0,443

0,448

0,450

SensitiveTopicsClassification

Accuracy

0,285

0,280

0,220

0,228

0,234

0,257

TERRaClassification

Average Precision

0,520

0,502

0,519

0,551

0,550

0,584

Результаты моделей пока еще далеки от 100%, что говорит о достаточной сложности датасетов для адекватной оценки моделей текущего поколения и дает надежду на то, что ruMTEB не будет «полностью решен» еще несколько лет, несмотря на стремительный прогресс в области NLP.

Наиболее сильными оказываются модели типа E5 с multilingual-e5-large во главе и модель sbert_large_mt_nlu_ru, которая обходит другие модели на ряде задач классификации и кластеризации.

Для более детального анализа посмотрим также на усредненные по категориям результаты.

Model Name

Metric

sbert_large_mt_nlu_ru

sbert_large_nlu_ru

rubert-tiny2

multilingual-e5-small

multilingual-e5-base

multilingual-e5-large

Classification

Accuracy

0.554

0.552

0.514

0.551

0.561

0.588

Clustering

V-measure

0.526

0.519

0.412

0.513

0.503

0.525

MultiLabelClassification

Accuracy

0.326

0.3190

0.294

0.314

0.329

0.353

PairClassification

Average Precision

0.51973

0.502

0.519

0.551

0.550

0.584

Reranking

MAP@10

0.561

0.468

0.461

0.715

0.720

0.756

Retrieval

NDCG@10

0.256

0.118

0.124

0.697

0.699

0.774

STS

Pearson correlation

0.712

0.588

0.694

0.781

0.796

0.831

Average

Average

0.494

0.438

0.431

0.588

0.594

0.630

После агрегации преимущество мультиязычных E5 сохраняется, также среди сильных моделей оказывается sbert_large_mt_nlu_ru, а sbert_large_nlu_ru несколько отстает. rubert-tiny2 будучи маленькой и менее сильной моделью находится внизу рейтинга. Для всех типов задач классификации результаты мультиязычных E5 и моделей Sbert оказываются близки, а для задач кластеризации лучшей оказывается sbert_large_mt_nlu_ru. В то же время мы видим огромный разрыв между моделями E5 и обеими моделями Sbert для задач Reranking и Retrieval, что объясняется тем, что модели Sbert не заточены под эти типы задач, они учились парафразированию. Если говорить про категорию STS, то агрегированные результаты здесь не являются очень показательными, так как эта группа задач включает лишь один датасет RuSTSBenchmarkSTS, и фактически отражают качество на нем.

Если оценивать сложность самих заданий, то агрегированные результаты подтверждают то, что мы видели для отдельных задач: результаты моделей далеки от 100%, что говорит о том, что задачи, представленные в бенчмарке являются достаточно сложными для моделей текущего поколения и не находится «на грани решения».

Вместо послесловия

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

Мы открыты для сотрудничества и будем рады видеть ваши сабмиты на ruMTEB!

Такой большой проект как новый бенчмарк ruMTEB — это всегда результат совместной работы большого количества людей и команд. Хотела сказать спасибо своему Тимлиду команды AGI NLP SberDevices @alenusch и коллегам из команды Управления экспериментальных систем машинного обучения SberDevices: @Andriljo, @anpalmak, @artemsnegirev за идею и неоценимый вклад в проект, который родился только благодаря этой совместной работе!

С вами была я — Мария Тихонова. До новых встреч на просторах ruMTEB! 

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


  1. snakers4
    25.07.2024 15:36

    то для русского до недавнего времени единственным набором тестов был бенчмарк Энкодечка

    Прохожу по ссылке в профиль автора стать, которую рекомендует Сбер, а там:

    Зачем Сбер пиарит это у себя в блоге - ума не приложу, вопрос к Сберу.

    Возможно по этой причине, что нужно аж вмешательство прокуратуры, чтобы сервисы Сбера перестали нарушать законы РФ.