瑞典句子变换模型,多语言句子嵌入优化
该项目利用知识 蒸馏技术,使单语言瑞典语与英语句子嵌入具备多语言能力,适用于聚类、语义搜索等任务。最新的v2.0版本在更强教师模型指导下训练,支持处理更长段落,并在SweParaphrase和SweFAQ等测试集中表现出色。
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库:
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)
如果不使用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模型为处理瑞典语文本的自然语言处理任务提供了一种高效的解决方案,并在多个评估基准上展示了其出色的性能。