language:
- ru
library_name: sentence-transformers
tags:
- sentence-transformers
- sentence-similarity
- feature-extraction
widget: []
pipeline_tag: sentence-similarity
license: apache-2.0
datasets:
- deepvk/ru-HNP
- deepvk/ru-WANLI
- Shitao/bge-m3-data
- RussianNLP/russian_super_glue
- reciTAL/mlsum
- Milana/russian_keywords
- IlyaGusev/gazeta
- d0rj/gsm8k-ru
- bragovo/dsum_ru
- CarlBrendt/Summ_Dialog_News
USER-bge-m3
Universal Sentence Encoder for Russian(俄语通用句子编码器USER)是基于sentence-transformer框架、专门为俄语文本提取嵌入向量的模型。该模型能将句子和段落映射到1024维稠密向量空间,适用于聚类或语义搜索等任务。
本模型以TatonkaHF/bge-m3_en_ru为初始化基础(该模型是baai/bge-m3的精简版),经训练后主要支持俄语处理,未对其他语言表现进行评估。
使用方法
安装sentence-transformers后即可便捷使用:
pip install -U sentence-transformers
基础调用示例:
from sentence_transformers import SentenceTransformer
input_texts = [
"首艘驱逐舰「平静号」何时下水?",
"乌德穆尔特共和国有石油吗?",
"平静号驱逐舰\n1952年8月19日列入苏联海军序列。",
"乌德穆尔特共和国的石油勘探工作始于1945年二战结束后,持续至今。石油开采始于1967年。"
]
model = SentenceTransformer("deepvk/USER-bge-m3")
embeddings = model.encode(input_texts, normalize_embeddings=True)
也可直接使用transformers库:
import torch.nn.functional as F
from torch import Tensor, inference_mode
from transformers import AutoTokenizer, AutoModel
input_texts = [
"首艘驱逐舰「平静号」何时下水?",
"乌德穆尔特共和国有石油吗?",
"平静号驱逐舰\n1952年8月19日列入苏联海军序列。",
"乌德穆尔特共和国的石油勘探工作始于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)
sentence_embeddings = model_output[0][:, 0]
sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)
scores = (sentence_embeddings[:2] @ sentence_embeddings[2:].T)
还可使用FlagEmbedding库进行评估,用法参见bge-m3模型卡。
训练细节
训练流程基于USER-base算法改进,主要调整如下:
初始化: 采用支持俄英双语的精简版TatonkaHF/bge-m3_en_ru
微调策略:
- 根据数据对称性分别微调两个模型,应用AnglE损失增强对称任务表现
- 通过LM-Cocktail合并模型时加入原始bge-m3以防止灾难性遗忘,最终生成USER-bge-m3
训练数据
新增两个数据集:
deepvk/ru-HNP与
deepvk/ru-WANLI
总正样本对: 2,240,961
总负样本对: 792,644(来自AIINLI等数据集)
对于Gazeta等数据集,采用(标题/正文)+(标题/摘要)组合作为非对称数据。AllNLI是SNLI、MNLI和ANLI的俄语翻译合集。
性能评估
在encodechka基准测试中对比原始bge-m3:
模型 |
平均S |
平均S+W |
STS |
PI |
NLI |
SA |
TI |
IA |
IC |
ICX |
NE1 |
NE2 |
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子集上的表现:
任务类型 |
bge-m3 |
USER-bge-m3 |
平均(30数据集) |
0.689 |
0.706 |
分类平均(12数据集) |
0.571 |
0.594 |
...(完整表格见原文)... |
|
|
局限性
未全面评估稀疏编码和多向量编码能力。
引用
@misc{deepvk2024user,
title={USER: 俄语通用句子编码器},
author={Malashenko, Boris and Zemerov, Anton and Spirin, Egor},
url={https://huggingface.co/datasets/deepvk/USER-base},
publisher={Hugging Face},
year={2024},
}