模型概述
模型特點
模型能力
使用案例
🚀 USER-bge-m3
通用俄語句子編碼器(USER) 是一款 句子轉換器 模型,專門用於提取俄語句子的嵌入向量。它能將句子和段落映射到一個 1024 維的密集向量空間,可用於聚類或語義搜索等任務。
該模型基於 TatonkaHF/bge-m3_en_ru
進行初始化,這是 baai/bge-m3
的精簡版本,主要針對俄語進行訓練。目前尚未對該模型在其他語言上的表現進行評估。
🚀 快速開始
使用此模型前,請確保已安裝 sentence-transformers
:
pip install -U sentence-transformers
✨ 主要特性
- 專門針對俄語:該模型是專門為俄語設計的句子編碼器,能夠有效處理俄語句子和段落。
- 高維向量空間映射:將句子和段落映射到 1024 維的密集向量空間,便於進行聚類和語義搜索等任務。
- 多方式使用:可以使用
sentence-transformers
庫、transformers
庫或FlagEmbedding
庫進行調用。
📦 安裝指南
使用此模型前,請確保已安裝 sentence-transformers
:
pip install -U sentence-transformers
💻 使用示例
基礎用法
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)
高級用法
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)
此外,你還可以使用原生的 FlagEmbedding 庫進行評估,具體用法可參考 bge-m3
模型卡片。
📚 詳細文檔
訓練詳情
我們遵循 USER-base
模型的訓練算法,但由於使用了不同的主幹網絡,進行了一些調整。
初始化:基於 TatonkaHF/bge-m3_en_ru
進行初始化,這是 baai/bge-m3
的精簡版本,僅支持俄語和英語標記。
微調:基於數據對稱性對兩個不同的模型進行有監督的微調,然後通過 LM-Cocktail
進行合併:
- 由於我們對數據進行了分割,因此可以對對稱模型額外應用 AnglE 損失,以提高對稱任務的性能。
- 最後,我們將原始的
bge-m3
模型添加到兩個微調後的模型中,以防止災難性遺忘,並使用LM-Cocktail
調整合並的權重,得到最終的模型 USER-bge-m3。
數據集
在模型開發過程中,我們額外收集了 2 個數據集:
deepvk/ru-HNP
和
deepvk/ru-WANLI
。
對稱數據集 | 規模 | 非對稱數據集 | 規模 |
---|---|---|---|
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 |
總正樣本對:2,240,961 總負樣本對:792,644(來自 AIINLI、MIRACL、deepvk/ru-WANLI、deepvk/ru-HNP 的負樣本對)
對於所有有標籤的數據集,我們僅使用其訓練集進行微調。 對於 Gazeta、Mlsum、Xlsum 數據集,將(標題/文本)和(標題/摘要)對組合起來作為非對稱數據使用。
AllNLI
是 SNLI、MNLI 和 ANLI 的俄語翻譯組合。
實驗
我們在 encodechka
基準測試中,將我們的模型與基礎的 baai/bge-m3
進行了比較。此外,我們還在 MTEB
的俄語子集上對模型進行了評估,包括分類、重排序、多標籤分類、語義文本相似度(STS)、檢索和配對分類等任務。我們使用了每個任務官方倉庫中的驗證腳本。
encodechka 測試結果
模型 | 平均 S | 平均 S+W | STS | PI | NLI | SA | TI | IA | IC | ICX | NE1 | NE2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
baai/bge-m3 |
0.787 | 0.696 | 0.86 | 0.75 | 0.51 | 0.82 | 0.97 | 0.79 | 0.81 | 0.78 | 0.24 | 0.42 |
USER-bge-m3 |
0.799 | 0.709 | 0.87 | 0.76 | 0.58 | 0.82 | 0.97 | 0.79 | 0.81 | 0.78 | 0.28 | 0.43 |
MTEB 測試結果
類型 | baai/bge-m3 |
USER-bge-m3 |
---|---|---|
平均(30 個數據集) | 0.689 | 0.706 |
分類平均(12 個數據集) | 0.571 | 0.594 |
重排序平均(2 個數據集) | 0.698 | 0.688 |
多標籤分類(2 個數據集) | 0.343 | 0.359 |
STS 平均(4 個數據集) | 0.735 | 0.753 |
檢索平均(6 個數據集) | 0.945 | 0.934 |
配對分類平均(4 個數據集) | 0.784 | 0.833 |
🔧 技術細節
我們遵循了特定的訓練算法,並對模型進行了微調。具體來說,我們使用了不同的主幹網絡,並在訓練過程中進行了一些調整。我們還使用了多個數據集進行訓練和評估,以確保模型的性能和泛化能力。
📄 許可證
本項目採用 Apache-2.0 許可證。
🔖 引用
@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},
}
⚠️ 注意事項
我們尚未對模型的稀疏和多向量編碼能力進行全面評估。在使用模型時,請根據實際需求進行測試和驗證。







