模型概述
模型特點
模型能力
使用案例
🚀 USER2-base
USER2 是新一代的俄語通用句子編碼器,專為句子表示而設計,支持長達 8192 個標記的長上下文。
該模型基於 RuModernBERT
編碼器構建,並針對檢索和語義任務進行了微調。此外,它們還支持 Matryoshka 表示學習 (MRL) 技術,該技術能夠在表示質量損失最小的情況下減小嵌入大小。
這是一個具有 1.49 億參數的基礎模型。
屬性 | 詳情 |
---|---|
模型類型 | 基於 RuModernBERT 編碼器構建的俄語通用句子編碼器 |
訓練數據 | deepvk/ru-HNP 、deepvk/ru-WANLI 、deepvk/cultura_ru_ed 、Shitao/bge-m3-data 、CarlBrendt/Summ_Dialog_News 、IlyaGusev/gazeta 、its5Q/habr_qna 、wikimedia/wikipedia 、RussianNLP/wikiomnia 等 |
🚀 快速開始
本模型適用於俄語句子表示,支持長上下文,可用於檢索和語義任務。以下是使用示例和相關性能指標,幫助你快速瞭解和使用該模型。
✨ 主要特性
- 長上下文支持:支持長達 8192 個標記的長上下文。
- 微調優化:基於
RuModernBERT
編碼器構建,並針對檢索和語義任務進行了微調。 - MRL 技術支持:支持 Matryoshka 表示學習 (MRL) 技術,可減小嵌入大小並保持表示質量。
📦 安裝指南
文檔未提及安裝步驟,因此跳過此章節。
💻 使用示例
基礎用法
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("deepvk/USER2-base")
query_embeddings = model.encode(["Когда был спущен на воду первый миноносец «Спокойный»?"], prompt_name="search_query")
document_embeddings = model.encode(["Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года."], prompt_name="search_document")
similarities = model.similarity(query_embeddings, document_embeddings)
高級用法
# 截斷嵌入維度
model = SentenceTransformer("deepvk/USER2-base", truncate_dim=128)
此模型使用維度 [32, 64, 128, 256, 384, 512, 768]
進行訓練,因此建議使用這些維度之一以獲得最佳性能。
Transformers 庫使用示例
import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0]
input_mask_expanded = (
attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
)
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(
input_mask_expanded.sum(1), min=1e-9
)
queries = ["search_query: Когда был спущен на воду первый миноносец «Спокойный»?"]
documents = ["search_document: Спокойный (эсминец)\nЗачислен в списки ВМФ СССР 19 августа 1952 года."]
tokenizer = AutoTokenizer.from_pretrained("deepvk/USER2-base")
model = AutoModel.from_pretrained("deepvk/USER2-base")
encoded_queries = tokenizer(queries, padding=True, truncation=True, return_tensors="pt")
encoded_documents = tokenizer(documents, padding=True, truncation=True, return_tensors="pt")
with torch.no_grad():
queries_outputs = model(**encoded_queries)
documents_outputs = model(**encoded_documents)
query_embeddings = mean_pooling(queries_outputs, encoded_queries["attention_mask"])
query_embeddings = F.normalize(query_embeddings, p=2, dim=1)
doc_embeddings = mean_pooling(documents_outputs, encoded_documents["attention_mask"])
doc_embeddings = F.normalize(doc_embeddings, p=2, dim=1)
similarities = query_embeddings @ doc_embeddings.T
截斷嵌入維度的高級用法
query_embeddings = mean_pooling(queries_outputs, encoded_queries["attention_mask"])
query_embeddings = query_embeddings[:, :truncate_dim]
query_embeddings = F.normalize(query_embeddings, p=2, dim=1)
📚 詳細文檔
模型性能
為了評估模型,我們在 MTEB-rus
基準測試中衡量質量。此外,為了衡量長上下文檢索能力,我們運行了 MultiLongDocRetrieval (MLDR) 任務的俄語子集。
MTEB-rus 性能指標
模型 | 大小 | 隱藏維度 | 上下文長度 | MRL 支持 | 平均(任務) | 平均(任務類型) | 分類 | 聚類 | 多標籤分類 | 成對分類 | 重排序 | 檢索 | STS |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
USER-base |
1.24 億 | 768 | 512 | ❌ | 58.11 | 56.67 | 59.89 | 53.26 | 37.72 | 59.76 | 55.58 | 56.14 | 74.35 |
USER-bge-m3 |
3.59 億 | 1024 | 8192 | ❌ | 62.80 | 62.28 | 61.92 | 53.66 | 36.18 | 65.07 | 68.72 | 73.63 | 76.76 |
multilingual-e5-base |
2.78 億 | 768 | 512 | ❌ | 58.34 | 57.24 | 58.25 | 50.27 | 33.65 | 54.98 | 66.24 | 67.14 | 70.16 |
multilingual-e5-large-instruct |
5.6 億 | 1024 | 512 | ❌ | 65.00 | 63.36 | 66.28 | 63.13 | 41.15 | 63.89 | 64.35 | 68.23 | 76.48 |
jina-embeddings-v3 |
5.72 億 | 1024 | 8192 | ✅ | 63.45 | 60.93 | 65.24 | 60.90 | 39.24 | 59.22 | 53.86 | 71.99 | 76.04 |
ru-en-RoSBERTa |
4.04 億 | 1024 | 512 | ❌ | 61.71 | 60.40 | 62.56 | 56.06 | 38.88 | 60.79 | 63.89 | 66.52 | 74.13 |
USER2-small |
3400 萬 | 384 | 8192 | ✅ | 58.32 | 56.68 | 59.76 | 57.06 | 33.56 | 54.02 | 58.26 | 61.87 | 72.25 |
USER2-base |
1.49 億 | 768 | 8192 | ✅ | 61.12 | 59.59 | 61.67 | 59.22 | 36.61 | 56.39 | 62.06 | 66.90 | 74.28 |
MLDR-rus 性能指標
模型 | 大小 | nDCG@10 ↑ |
---|---|---|
USER-bge-m3 |
3.59 億 | 58.53 |
KaLM-v1.5 |
4.94 億 | 53.75 |
jina-embeddings-v3 |
5.72 億 | 49.67 |
E5-mistral-7b |
71.1 億 | 52.40 |
USER2-small |
3400 萬 | 51.69 |
USER2-base |
1.49 億 | 54.17 |
我們僅比較上下文長度為 8192 的模型。
Matryoshka 表示學習 (MRL)
為了評估 MRL 能力,我們同樣使用 MTEB-rus
,對嵌入進行維度裁剪以匹配所選大小。
輸入前綴
該模型的訓練方式與 Nomic Embed 類似,需要在輸入中添加特定任務的前綴。前綴的選擇取決於具體任務。在選擇前綴時,我們遵循以下一般準則:
- “classification: ” 是默認且最通用的前綴,通常在各種任務中表現良好。
- “clustering: ” 建議用於聚類應用,如將文本分組到聚類中、發現共享主題或去除語義重複項。
- “search_query: ” 和 “search_document: ” 用於檢索和重排序任務。此外,在某些分類任務中,特別是對於較短的文本,“search_query” 的性能優於其他前綴。另一方面,“search_document” 對於長上下文句子相似性任務可能有益。
不過,我們鼓勵用戶嘗試不同的前綴,因為某些領域可能會從特定的前綴中受益。
訓練細節
這是一個具有 1.49 億參數的基礎版本,基於 RuModernBERT-base
。它在三個階段進行了微調:RetroMAE、弱監督微調 (Weakly Supervised Fine-Tuning) 和監督微調 (Supervised Fine-Tuning)。
遵循 bge-m3 訓練策略,我們將 RetroMAE 用作面向檢索的連續預訓練步驟。利用 RuModernBERT
訓練最後階段的數據,RetroMAE 提高了檢索質量,特別是對於長上下文輸入。
為了遵循構建最先進編碼器的最佳實踐,我們依賴於大規模的弱相關文本對訓練。然而,與英語或中文不同,俄語沒有公開可用的此類數據集。為了克服這一問題,我們採用了兩種互補的策略:
- 跨語言遷移:我們同時在英語和俄語數據上進行訓練,利用英語資源 (
nomic-unsupervised
) 以及我們內部的英俄平行語料庫。 - 無監督對挖掘:從
deepvk/cultura_ru_edu
語料庫中,我們使用簡單的啟發式方法提取了 5000 萬對,即選擇不重疊且不是彼此子字符串的文本塊。
這種方法顯示出了有希望的結果,使我們能夠使用最少的目標語言對訓練出高性能的模型,特別是與其他語言使用的管道相比。
以下表格顯示了使用的數據集以及每個數據集的上採樣次數。
數據集 | 大小 | 上採樣次數 |
---|---|---|
nomic-en | 2.35 億 | 1 |
nomic-ru | 3900 萬 | 3 |
內部英俄平行語料庫 | 2.5 億 | 1 |
cultura-sampled | 5000 萬 | 1 |
總計 | 6.52 億 |
在第三階段,我們切換到更乾淨、特定任務的數據集。在某些情況下,使用交叉編碼器進行了額外的過濾。對於所有檢索數據集,我們挖掘了難負樣本。
數據集 | 示例數量 | 備註 |
---|---|---|
Nomic-en-supervised | 170 萬 | 未修改 |
AllNLI | 20 萬 | 將 SNLI/MNLI/ANLI 翻譯成俄語 |
fishkinet-posts | 9.3 萬 | 標題 - 內容對 |
gazeta | 5.5 萬 | 標題 - 文本對 |
habr_qna | 10 萬 | 標題 - 描述對 |
lenta | 10 萬 | 標題 - 新聞對 |
miracl_ru | 1 萬 | 每個錨點一個正樣本 |
mldr_ru | 1800 | 未修改 |
mr-tydi_ru | 5300 | 未修改 |
mmarco_ru | 50 萬 | 未修改 |
ru-HNP | 10 萬 | 每個錨點一個正樣本 + 一個負樣本 |
ru‑queries | 19.9 萬 | 內部生成(如 arXiv:2401.00368 所述) |
ru‑WaNLI | 3.5 萬 | 蘊含 -> 正樣本,矛盾 -> 負樣本 |
sampled_wiki | 100 萬 | 從維基百科採樣的文本塊 |
summ_dialog_news | 3.7 萬 | 摘要 - 信息對 |
wikiomnia_qna | 10 萬 | QA 對(T5 生成) |
yandex_q | 8.3 萬 | Q + 描述 - 答案對 |
總計 | 430 萬 |
消融實驗
除了最終模型,我們還發布了所有中間訓練步驟。retromae 和 weakly_sft 模型可在本倉庫的指定版本中獲取。我們希望這些額外的模型對你的實驗有所幫助。
以下是所有訓練階段在 MTEB-rus
子集上的比較。
🔧 技術細節
該模型基於 RuModernBERT
編碼器構建,通過三個階段的微調(RetroMAE、弱監督微調、監督微調)來優化性能。在訓練過程中,採用了跨語言遷移和無監督對挖掘等策略,以解決俄語特定數據集不足的問題。同時,在第三階段使用了更乾淨、特定任務的數據集,並進行了額外的過濾和難負樣本挖掘。
📄 許可證
本項目採用 Apache-2.0 許可證。
📚 引用
@misc{deepvk2025user,
title={USER2},
author={Malashenko, Boris and Spirin, Egor and Sokolov Andrey},
url={https://huggingface.co/deepvk/USER2-base},
publisher={Hugging Face}
year={2025},
}







