模型简介
模型特点
模型能力
使用案例
🚀 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},
}
⚠️ 注意事项
我们尚未对模型的稀疏和多向量编码能力进行全面评估。在使用模型时,请根据实际需求进行测试和验证。







