/ Модель

Характеристики

Контекст
512 токенов
Параметры
152 млн
Лицензия
Apache 2.0
Архитектура
deberta · dense
Библиотека
sentence-transformers
Опубликована
10 июн 2024

USER-base

ЭмбеддингиТекст → embedding11 профессий

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

30 204скачиваний за 30 дней26лайковвеса обновлены25 ноя 2024

Бенчмарки

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

Тесты пользователейпока нет

Никто ещё не опубликовал тест этой модели. Соберите бенчмарк из своих задач — результат появится здесь.

  1. Добавьте модель в бенчмарк

    Вместе с другими моделями категории «Эмбеддинги» — сравнение идёт внутри одной категории.

  2. Опишите свои задачи

    Напишите запросы, при необходимости приложите файлы и эталонные ответы.

  3. Запустите и опубликуйте

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

Публичные оценки33

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

  • MasakhaNEWSClassification

    main_score

    Результат

    0,5307

    MTEB

    Публичная таблицадругая ревизия

  • CodeEditSearchRetrieval

    main_score

    Результат

    0,1916

    MTEB

    Публичная таблицадругая ревизия

  • IndicGenBenchFloresBitextMining

    main_score

    Результат

    0,0285

    Общий результат 0,0437Общий результат 0,0409Общий результат 0,0398
    MTEB

    Публичная таблицадругая ревизия

  • MassiveScenarioClassification

    main_score

    Результат

    0,1175

    Общий результат 0,1101Общий результат 0,0893
    MTEB

    Публичная таблицадругая ревизия

  • MIRACLRetrievalHardNegatives

    main_score

    Результат

    0,3794

    MTEB

    Публичная таблицадругая ревизия

  • FEVERHardNegatives

    main_score

    Результат

    0,4543

    MTEB

    Публичная таблицадругая ревизия

  • SemRel24STS

    main_score

    Результат

    0,7055

    MTEB

    Публичная таблицадругая ревизия

  • TwitterSemEval2015

    main_score

    Результат

    0,6172

    MTEB

    Публичная таблицадругая ревизия

  • AlloprofRetrieval

    main_score

    Результат

    0,0453

    MTEB

    Публичная таблицадругая ревизия

  • XPQARetrieval

    main_score

    Результат

    0,0678

    Общий результат 0,1044
    MTEB

    Публичная таблицадругая ревизия

  • T2Reranking

    main_score

    Результат

    0,5418

    MTEB

    Публичная таблицадругая ревизия

  • CUREv1

    main_score

    Результат

    0,1405

    MTEB

    Публичная таблицадругая ревизия

  • MassiveIntentClassification

    main_score

    Результат

    0,0769

    Общий результат 0,3441Общий результат 0,3264Общий результат 0,1232
    MTEB

    Публичная таблицадругая ревизия

  • SNLRetrieval

    main_score

    Результат

    0,5038

    MTEB

    Публичная таблицадругая ревизия

  • GreekLegalCodeClassification

    main_score

    Результат

    0,038

    MTEB

    Публичная таблицадругая ревизия

  • MLQARetrieval

    main_score

    Результат

    0,4473

    Общий результат 0,1017Общий результат 0,0759Общий результат 0,046
    MTEB

    Публичная таблицадругая ревизия

  • MLSUMClusteringP2P

    main_score

    Результат

    0,316

    MTEB

    Публичная таблицадругая ревизия

  • JaGovFaqsRetrieval

    main_score

    Результат

    0,0201

    MTEB

    Публичная таблицадругая ревизия

  • MultiHateClassification

    main_score

    Результат

    0,5608

    MTEB

    Публичная таблицадругая ревизия

  • Robust04InstructionRetrieval

    main_score

    Результат

    −0,0596

    MTEB

    Публичная таблицадругая ревизия

  • PawsXPairClassification

    main_score

    Результат

    0,5793

    MTEB

    Публичная таблицадругая ревизия

  • WikipediaRerankingMultilingual

    main_score

    Результат

    0,6838

    MTEB

    Публичная таблицадругая ревизия

  • WebLINXCandidatesReranking

    main_score

    Результат

    0,0338

    MTEB

    Публичная таблицадругая ревизия

  • STS22.v2

    main_score

    Результат

    0,5057

    MTEB

    Публичная таблицадругая ревизия

  • IndicCrosslingualSTS

    main_score

    Результат

    −0,0201

    MTEB

    Публичная таблицадругая ревизия

  • NusaParagraphEmotionClassification

    main_score

    Результат

    0,2292

    MTEB

    Публичная таблицадругая ревизия

  • SwednClusteringS2S

    main_score

    Результат

    0,0158

    MTEB

    Публичная таблицадругая ревизия

  • CodeSearchNetRetrieval

    main_score

    Результат

    0,3702

    MTEB

    Публичная таблицадругая ревизия

  • XNLIV2

    main_score

    Результат

    0,7854

    MTEB

    Публичная таблицадругая ревизия

  • KLUE-STS

    main_score

    Результат

    0,0601

    MTEB

    Публичная таблицадругая ревизия

  • MTOPIntentClassification

    main_score

    Результат

    0,0668

    Общий результат 0,3507
    MTEB

    Публичная таблицадругая ревизия

  • NoRecClassification

    main_score

    Результат

    0,4097

    MTEB

    Публичная таблицадругая ревизия

  • CzechProductReviewSentimentClassification

    main_score

    Результат

    0,4372

    MTEB

    Публичная таблицадругая ревизия

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

USER-base — модель sentence-transformers, разработанная DeepVK для получения эмбеддингов предложений и абзацев на русском языке. Она основана на DeBERTa v1 base, содержит 151,8 млн параметров и преобразует текст в плотные векторы размерности 768; максимальная длина контекста — 512 токенов. Модель предназначена для семантического поиска, оценки сходства, кластеризации, поиска перефразировок и использования эмбеддингов как признаков классификации.

Модель дообучена на русскоязычных парах текстов, включая данные ru-HNP и ru-WANLI, а также обучающие выборки ряда задач NLI, поиска и суммаризации. Для асимметричного поиска рекомендуется добавлять к запросу префикс «query: », а к документу — «passage: »; для симметричных задач и эмбеддингов-признаков используется «query: ». В опубликованных сравнениях USER-base показывает конкурентные результаты среди моделей сопоставимого размера, но уступает некоторым более крупным моделям в задачах поиска. Другие языки не оценивались. Лицензия — Apache-2.0.

Сценарии применения

  • семантический поиск по русским документам
  • поиск ответов и фрагментов по запросу
  • оценка сходства русских предложений
  • поиск перефразировок и дубликатов
  • кластеризация текстов на русском языке
  • получение признаков для классификации текста

Ограничения

Модель предназначена для русского языка; качество на других языках не оценивалось. В задачах поиска она уступает некоторым более крупным моделям, а для сохранения качества следует использовать рекомендованные префиксы query: и passage:.

Для каких профессий подходит11

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

USER-base

Universal Sentence Encoder for Russian (USER) is a sentence-transformer model for extracting embeddings exclusively for Russian language. It maps sentences & paragraphs to a 768 dimensional dense vector space and can be used for tasks like clustering or semantic search.

This model is initialized from deepvk/deberta-v1-base and trained to work exclusively with the Russian language. Its quality on other languages was not evaluated.

Usage

Using this model becomes easy when you have sentence-transformers installed:

pip install -U sentence-transformers

Then you can use the model like this:

from sentence_transformers import SentenceTransformer

queries = [
  "Когда был спущен на воду первый миноносец «Спокойный»?",
  "Есть ли нефть в Удмуртии?"
]
passages = [
  "Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года.",
  "Нефтепоисковые работы в Удмуртии были начаты сразу после Второй мировой войны в 1945 году и продолжаются по сей день. Добыча нефти началась в 1967 году."
]

model = SentenceTransformer("deepvk/USER-base")
# Prompt should be specified according to the task (either 'query' or 'passage').
passage_embeddings = model.encode(passages, normalize_embeddings=True, prompt_name='passage')
# For tasks other than retrieval, you can simply use the `query` prompt, which is set by default.
query_embeddings = model.encode(queries, normalize_embeddings=True)

However, you can use model directly with transformers

import torch.nn.functional as F
from torch import Tensor, inference_mode
from transformers import AutoTokenizer, AutoModel

def average_pool(
  last_hidden_states: Tensor,
  attention_mask: Tensor
) -> Tensor:
    last_hidden = last_hidden_states.masked_fill(
      ~attention_mask[..., None].bool(), 0.0
    )
    return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]

# You should manually add prompts when using the model directly. Each input text should start with "query: " or "passage: ".
# For tasks other than retrieval, you can simply use the "query: " prefix.
input_texts = [
  "query: Когда был спущен на воду первый миноносец «Спокойный»?",
  "query: Есть ли нефть в Удмуртии?",
  "passage: Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года.",
  "passage: Нефтепоисковые работы в Удмуртии были начаты сразу после Второй мировой войны в 1945 году и продолжаются по сей день. Добыча нефти началась в 1967 году."
]

tokenizer = AutoTokenizer.from_pretrained("deepvk/USER-base")
model = AutoModel.from_pretrained("deepvk/USER-base")

batch_dict = tokenizer(
  input_texts, padding=True, truncation=True, return_tensors="pt"
)
with inference_mode():
  outputs = model(**batch_dict)
  embeddings = average_pool(
    outputs.last_hidden_state, batch_dict["attention_mask"]
  )
  embeddings = F.normalize(embeddings, p=2, dim=1)

# Scores for query-passage
scores = (embeddings[:2] @ embeddings[2:].T) * 100
# [[55.86, 30.95],
#  [22.82, 59.46]]
print(scores.round(decimals=2))

⚠️ Attention ⚠️

Each input text should start with "query: " or "passage: ". For tasks other than retrieval, you can simply use the "query: " prefix.

Training Details

We aimed to follow the bge-base-en model training algorithm, but we made several improvements along the way.

Initialization: deepvk/deberta-v1-base

First-stage: Contrastive pre-training with weak supervision on the Russian part of mMarco corpus.

Second-stage: Supervised fine-tuning two different models based on data symmetry and then merging via LM-Cocktail:

  1. We modified the instruction design by simplifying the multilingual approach to facilitate easier inference. For symmetric data (S1, S2), we used the instructions: "query: S1" and "query: S2", and for asymmetric data, we used "query: S1" with "passage: S2".

  2. Since we split the data, we could additionally apply the AnglE loss to the symmetric model, which enhances performance on symmetric tasks.

  3. Finally, we combined the two models, tuning the weights for the merger using LM-Cocktail to produce the final model, USER.

Dataset

During model development, we additional collect 2 datasets: deepvk/ru-HNP and deepvk/ru-WANLI.

Symmetric DatasetSizeAsymmetric DatasetSize
AllNLI282 644MIRACL10 000
MedNLI3 699MLDR1 864
RCB392Lenta185 972
Terra1 359Mlsum51 112
Tapaco91 240Mr-TyDi536 600
Opus1001 000 000Panorama11 024
BiblePar62 195PravoIsrael26 364
RudetoxifierDataDetox31 407Xlsum124 486
RuParadetox11 090Fialka-v1130 000
deepvk/ru-WANLI35 455RussianKeywords16 461
deepvk/ru-HNP500 000Gazeta121 928
Gsm8k-ru7 470
DSumRu27 191
SummDialogNews75 700

Total positive pairs: 3,352,653
Total negative pairs: 792,644 (negative pairs from AIINLI, MIRACL, deepvk/ru-WANLI, deepvk/ru-HNP)

For all labeled datasets, we only use its training set for fine-tuning. For datasets Gazeta, Mlsum, Xlsum: pairs (title/text) and (title/summary) are combined and used as asymmetric data.

AllNLI is an translated to Russian combination of SNLI, MNLI, and ANLI.

Experiments

As a baseline, we chose the current top models from the encodechka leaderboard table. In addition, we evaluate model on the russian subset of MTEB, which include 10 tasks. Unfortunately, we could not validate the bge-m3 on some MTEB tasks, specifically clustering, due to excessive computational resources. Besides these two benchmarks, we also evaluated the models on the MIRACL. All experiments were conducted using NVIDIA TESLA A100 40 GB GPU. We use validation scripts from the official repositories for each of the tasks.

ModelSize (w/o Embeddings)Encodechka (Mean S)MTEB (Mean Ru)Miracl (Recall@100)
bge-m33030.7860.6940.959
multilingual-e5-large3030.780.6650.927
USER (this model)850.7720.6660.763
paraphrase-multilingual-mpnet-base-v2850.760.6250.149
multilingual-e5-base850.7560.6450.915
LaBSE-en-ru850.740.5990.327
sn-xlm-roberta-base-snli-mnli-anli-xnli850.740.5930.08

Model sizes are shown, with larger models visually distinct from the others. Absolute leaders in the metrics are highlighted in bold, and the leaders among models of our size is underlined.

In this way, our solution outperforms all other models of the same size on both Encodechka and MTEB. Given that the model is slightly underperforming in retrieval tasks relative to existing solutions, we aim to address this in our future research.

FAQ

Do I need to add the prefix "query: " and "passage: " to input texts?

Yes, this is how the model is trained, otherwise you will see a performance degradation. Here are some rules of thumb:

  • Use "query: " and "passage: " correspondingly for asymmetric tasks such as passage retrieval in open QA, ad-hoc information retrieval.
  • Use "query: " prefix for symmetric tasks such as semantic similarity, bitext mining, paraphrase retrieval.
  • Use "query: " prefix if you want to use embeddings as features, such as linear probing classification, clustering.

Citations

@misc{deepvk2024user,
    title={USER: Universal Sentence Encoder for Russian},
    author={Malashenko, Boris and  Zemerov, Anton and Spirin, Egor},
    url={https://huggingface.co/datasets/deepvk/USER-base},
    publisher={Hugging Face}
    year={2024},
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · sentence-transformers

Можно запустить

Подбираем GPU…

Класс архитектуры
DebertaModel
Ревизия весов
e844647

0 моделей