Model reference · open weights
USER-bge-m3 is an open-weight embedding model from deepvk. USER-bge-m3 (FP32) weighs 718 MB; the smallest configuration that runs it is RTX 3060 12 GB.
Summary of the deepvk/USER-bge-m3 model card, 2026-10-01
What it is
| Released by | deepvk |
|---|---|
| Released | 2024-07-05 |
| Parameters | 359M |
| VRAM | 718 MB for the weights |
What it runs on
| Card | Runs | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
From the model card
Universal Sentence Encoder for Russian (USER) is a sentence-transformer model for extracting embeddings exclusively for Russian language. It maps sentences & paragraphs to a 1024 dimensional dense vector space and can be used for tasks like clustering or semantic search.
This model is initialized from TatonkaHF/bge-m3_en_ru which is shrinked version of baai/bge-m3 model and trained to work mainly with the Russian language. Its quality on other languages was not evaluated.
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
input_texts = [
"Когда был спущен на воду первый миноносец «Спокойный»?",
"Есть ли нефть в Удмуртии?",
"Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года.",
"Нефтепоисковые работы в Удмуртии были начаты сразу после Второй мировой войны в 1945 году и продолжаются по сей день. Добыча нефти началась в 1967 году."
]
model = SentenceTransformer("deepvk/USER-bge-m3")
embeddings = model.encode(input_texts, 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
input_texts = [
"Когда был спущен на воду первый миноносец «Спокойный»?",
"Есть ли нефть в Удмуртии?",
"Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года.",
"Нефтепоисковые работы в Удмуртии были начаты сразу после Второй мировой войны в 1945 году и продолжаются по сей день. Добыча нефти началась в 1967 году."
]
tokenizer = AutoTokenizer.from_pretrained("deepvk/USER-bge-m3")
model = AutoModel.from_pretrained("deepvk/USER-bge-m3")
model.eval()
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
# Perform pooling. In this case, cls pooling.
sentence_embeddings = model_output[0][:, 0]
# normalize embeddings
sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)
# [[0.5567, 0.3014],
# [0.1701, 0.7122]]
scores = (sentence_embeddings[:2] @ sentence_embeddings[2:].T)
Also, you can use native FlagEmbedding library for evaluation. Usage is described in bge-m3 model card.
We follow the USER-base model training algorithm, with several changes as we use different backbone.
Initialization: TatonkaHF/bge-m3_en_ru – shrinked version of baai/bge-m3 to support only Russian and English tokens.
Fine-tuning: Supervised fine-tuning two different models based on data symmetry and then merging via LM-Cocktail:
Since we split the data, we could additionally apply the AnglE loss to the symmetric model, which enhances performance on symmetric tasks.
Finally, we added the original bge-m3 model to the two obtained models to prevent catastrophic forgetting, tuning the weights for the merger using LM-Cocktail to produce the final model, USER-bge-m3.
During model development, we additional collect 2 datasets:
deepvk/ru-HNP and
deepvk/ru-WANLI.
| Symmetric Dataset | Size | Asymmetric Dataset | Size |
|---|---|---|---|
| AllNLI | 282 644 | MIRACL | 10 000 |
| MedNLI | 3 699 | MLDR | 1 864 |
| RCB | 392 | Lenta | 185 972 |
| Terra | 1 359 | Mlsum | 51 112 |
| Tapaco | 91 240 | Mr-TyDi | 536 600 |
| deepvk/ru-WANLI | 35 455 | Panorama | 11 024 |
| deepvk/ru-HNP | 500 000 | PravoIsrael | 26 364 |
| Xlsum | 124 486 | ||
| Fialka-v1 | 130 000 | ||
| RussianKeywords | 16 461 | ||
| Gazeta | 121 928 | ||
| Gsm8k-ru | 7 470 | ||
| DSumRu | 27 191 | ||
| SummDialogNews | 75 700 |
Total positive pairs: 2,240,961 Total negative pairs: 792,644 (negative pairs from AIINLI, MIRACL, deepvk/ru-WANLI, deepvk/ru-HNP)
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.