项目介绍:sentence-bert-swedish-cased
sentence-bert-swedish-cased项目是一个专为瑞典语和英语设计的句子转换模型,它能够将瑞典语的句子和段落映射到768维的密集向量空间中。这样,用户可以利用模型进行聚类操作或语义搜索任务。
模型背景
该模型采用了强力的英语Bi-Encoder模型 (all-mpnet-base-v2) 作为教师模型,而预训练的瑞典语模型 KB-BERT 则作为学生模型。训练策略依赖于一篇关于知识蒸馏的论文,旨在使单语句子嵌入模型多语言化。这一方法有效地提升了在不同语言环境中的句子理解能力。
模型版本更新
项目最初的版本是v1.0,当前最新版本为v2.0,升级的模型在训练时运用了更强大的教师模型,并在更长的段落上进行了训练。下表展示了不同时期的模型版本、教师模型及最大序列长度:
模型版本 | 教师模型 | 最大序列长度 |
---|---|---|
v1.0 | paraphrase-mpnet-base-v2 | 256 |
v1.1 | paraphrase-mpnet-base-v2 | 384 |
v2.0 | all-mpnet-base-v2 | 384 |
如何使用模型
使用Sentence-Transformers库
要使用该模型,用户需要安装sentence-transformers库:
pip install -U sentence-transformers
然后可以使用以下代码进行调用:
from sentence_transformers import SentenceTransformer
sentences = ["Det här är en exempelmening", "Varje exempel blir konverterad"]
model = SentenceTransformer('KBLab/sentence-bert-swedish-cased')
embeddings = model.encode(sentences)
print(embeddings)
使用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 = ['Det här är en exempelmening', 'Varje exempel blir konverterad']
tokenizer = AutoTokenizer.from_pretrained('KBLab/sentence-bert-swedish-cased')
model = AutoModel.from_pretrained('KBLab/sentence-bert-swedish-cased')
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("Sentence embeddings:")
print(sentence_embeddings)
模型评估结果
模型在SweParaphrase v1.0和SweParaphrase v2.0上进行了评估,计算了模型预测的相似性分数与人为评分之间的皮尔逊和斯皮尔曼相关性:
模型版本 | 皮尔逊 | 斯皮尔曼 |
---|---|---|
v1.0 | 0.9183 | 0.9114 |
v1.1 | 0.9183 | 0.9114 |
v2.0 | 0.9283 | 0.9130 |
此外,对于检索类任务,v2.0在SweFAQ v2.0上的表现显著优于其他版本。
训练细节
项目使用瑞典-英语平行语料库进行训练,覆盖多种数据集,例如JW300, Europarl, DGT-TM, EMEA等,模型的详细训练参数配置如下:
DataLoader:
利用torch.utils.data.dataloader.DataLoader训练180513条样本,采用参数如下:
{'batch_size': 64, 'sampler': 'torch.utils.data.sampler.RandomSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
损失函数:
使用sentence_transformers.losses.MSELoss.MSELoss
训练方法参数:
{
"epochs": 2,
"evaluation_steps": 1000,
"evaluator": "sentence_transformers.evaluation.SequentialEvaluator.SequentialEvaluator",
"max_grad_norm": 1,
"optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
"optimizer_params": {
"eps": 1e-06,
"lr": 8e-06
},
"scheduler": "WarmupLinear",
"steps_per_epoch": null,
"warmup_steps": 5000,
"weight_decay": 0.01
}
引用与作者
本模型由瑞典国家图书馆的数据实验室KBLab所开发。如果需要引用这项研究,可以参考其博文:https://kb-labb.github.io/posts/2021-08-23-a-swedish-sentence-transformer/
致谢
感谢HPC RIVR联盟和EuroHPC JU对这项研究提供的计算资源支持。
通过上述介绍,sentence-bert-swedish-cased模型为处理瑞典语文本的自然语言处理任务提供了一种高效的解决方案,并在多个评估基准上展示了其出色的性能。