pipeline_tag: 句子相似度
language: "多语言"
tags:
- 特征提取
- 句子相似度
- transformers
- 多语言
mstsb-paraphrase-multilingual-mpnet-base-v2
这是对sentence-transformers中的paraphrase-multilingual-mpnet-base-v2
模型进行微调的版本,基于扩展至15种语言的语义文本相似度基准。该模型将句子和段落映射到768维的密集向量空间,可用于聚类、语义搜索及测量两句话之间的相似度等任务。
本模型是针对多语言数据的语义文本相似度任务对paraphrase-multilingual-mpnet-base-v2
进行微调的版本。微调所用数据集是通过谷歌翻译扩展至15种语言的STSb数据集。为保证数据质量,置信度低于0.7的句子对被剔除。扩展后的数据集可在GitHub获取,包含的语言有:阿拉伯语(ar)、捷克语(cs)、德语(de)、英语(en)、西班牙语(es)、法语(fr)、印地语(hi)、意大利语(it)、日语(ja)、荷兰语(nl)、波兰语(pl)、葡萄牙语(pt)、俄语(ru)、土耳其语(tr)、简体中文(zh-CN)、繁体中文(zh-TW)。通过平均池化操作将词嵌入压缩为句子嵌入(更多细节见下文)。
使用(HuggingFace Transformers)
若不使用sentence-transformers,可按以下方式调用模型:首先将输入传入transformer模型,然后对上下文相关的词嵌入应用适当的池化操作。
from transformers import AutoTokenizer, AutoModel
import torch
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)
sentences = ["这是一个示例句子", "这是另一个示例句子", "最後の例文"]
tokenizer = AutoTokenizer.from_pretrained('AIDA-UPM/mstsb-paraphrase-multilingual-mpnet-base-v2')
model = AutoModel.from_pretrained('AIDA-UPM/mstsb-paraphrase-multilingual-mpnet-base-v2')
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
with torch.no_grad():
model_output = model(**encoded_input)
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
print("句子嵌入:")
print(sentence_embeddings)
评估结果
在语义文本相似度任务中测试了模型性能。多语言STSB提供的15种语言被组合为单语和跨语言任务,共31项任务。单语任务中的句子来自同一语言(如Ar-Ar、Es-Es),而跨语言任务中的句子分别使用不同语言,其中一句为英语(如en-ar、en-es)。
下表比较了基于paraphrase-multilingual-mpnet-base-v2
的模型与针对语义相似度微调的mstsb-paraphrase-multilingual-mpnet-base-v2
模型在31项任务中的平均多语言语义文本相似度能力。需注意两者均为多语言模型,但后者使用多语言数据针对语义相似度进行了调整。平均相关系数通过将各相关系数转换为Fisher's z值、求平均后再转换回相关系数得出。
模型 |
平均Spearman余弦测试 |
mstsb-paraphrase-multilingual-mpnet-base-v2 |
0.835890 |
paraphrase-multilingual-mpnet-base-v2 |
0.818896 |
下表按任务类型细分了mstsb-paraphrase-multilingual-mpnet-base-v2
的性能表现。为便于阅读,任务分为单语和跨语言两类展示。
单语任务 |
Pearson余弦测试 |
Spearman余弦测试 |
en;en |
0.868048310692506 |
0.8740170943535747 |
ar;ar |
0.8267139454193487 |
0.8284459741532022 |
cs;cs |
0.8466821720942157 |
0.8485417688803879 |
de;de |
0.8517285961812183 |
0.8557680051557893 |
es;es |
0.8519185309064691 |
0.8552243211580456 |
fr;fr |
0.8430951067985064 |
0.8466614534379704 |
hi;hi |
0.8178258630578092 |
0.8176462079184331 |
it;it |
0.8475909574305637 |
0.8494216064459076 |
ja;ja |
0.8435588859386477 |
0.8456031494178619 |
nl;nl |
0.8486765104527032 |
0.8520856765262531 |
pl;pl |
0.8407840177883407 |
0.8443070467300299 |
pt;pt |
0.8534880178249296 |
0.8578544068829622 |
ru;ru |
0.8390897585455678 |
0.8423041443534423 |
tr;tr |
0.8382125451820572 |
0.8421587450058385 |
zh-CN;zh-CN |
0.826233678946644 |
0.8248515460782744 |
zh-TW;zh-TW |
0.8242683809675422 |
0.8235506799952028 |
跨语言任务 |
Pearson余弦测试 |
Spearman余弦测试 |
en;ar |
0.7990830340462535 |
0.7956792016468148 |
en;cs |
0.8381274879061265 |
0.8388713450024455 |
en;de |
0.8414439600928739 |
0.8441971698649943 |
en;es |
0.8442337511356952 |
0.8445035292903559 |
en;fr |
0.8378437644605063 |
0.8387903367907733 |
en;hi |
0.7951955086055527 |
0.7905052217683244 |
en;it |
0.8415686372978766 |
0.8419480899107785 |
en;ja |
0.8094306665283388 |
0.8032512280936449 |
en;nl |
0.8389526140129767 |
0.8409310421803277 |
en;pl |
0.8261309163979578 |
0.825976253023656 |
en;pt |
0.8475546209070765 |
0.8506606391790897 |
en;ru |
0.8248514914263723 |
0.8224871183202255 |
en;tr |
0.8191803661207868 |
0.8194200775744044 |
en;zh-CN |
0.8147678083378249 |
0.8102089470690433 |
en;zh-TW |
0.8107272160374955 |
0.8056129680510944 |
训练过程
模型训练参数如下:
数据加载器:
使用torch.utils.data.dataloader.DataLoader
,长度687,参数:
{'batch_size': 132, 'sampler': 'torch.utils.data.sampler.RandomSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
损失函数:
sentence_transformers.losses.CosineSimilarityLoss.CosineSimilarityLoss
fit()方法参数:
{
"callback": null,
"epochs": 2,
"evaluation_steps": 1000,
"evaluator": "sentence_transformers.evaluation.EmbeddingSimilarityEvaluator.EmbeddingSimilarityEvaluator",
"max_grad_norm": 1,
"optimizer_class": "<class 'transformers.optimization.AdamW'>",
"optimizer_params": {
"lr": 2e-05
},
"scheduler": "WarmupLinear",
"steps_per_epoch": null,
"warmup_steps": 140,
"weight_decay": 0.01
}
完整模型架构
SentenceTransformer(
(0): Transformer({'max_seq_length': 128, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
)
引用与作者