This is a sentence-transformers model: It maps Swedish sentences & paragraphs to a 768 dimensional dense vector space and can be used for tasks like clustering or semantic search. This model is a bilingual Swedish-English model trained according to instructions in the paper Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation and the documentation accompanying its companion python package. We have used the strongest available pretrained English Bi-Encoder (all-mpnet-base-v2) as a teacher model, and the pretrained Swedish KB-BERT as the student model.
A more detailed description of the model can be found in an article we published on the KBLab blog here and for the updated model here.
Update: We have released updated versions of the model since the initial release. The original model described in the blog post is v1.0. The current version is v2.0. The newer versions are trained on longer paragraphs, and have a longer max sequence length. v2.0 is trained with a stronger teacher model and is the current default.
1from sentence_transformers import SentenceTransformer
2sentences =["Det här är en exempelmening","Varje exempel blir konverterad"]34model = SentenceTransformer('KBLab/sentence-bert-swedish-cased')5embeddings = model.encode(sentences)6print(embeddings)
Loading an older model version (Sentence-Transformers)
Currently, the easiest way to load an older model version is to clone the model repository and load it from disk. For example, to clone the v1.0 model:
Without sentence-transformers, you can use the model like this: First, you pass your input through the transformer model, then you have to apply the right pooling-operation on-top of the contextualized word embeddings.
python
1from transformers import AutoTokenizer, AutoModel
2import torch
345#Mean Pooling - Take attention mask into account for correct averaging6defmean_pooling(model_output, attention_mask):7 token_embeddings = model_output[0]#First element of model_output contains all token embeddings8 input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()9return torch.sum(token_embeddings * input_mask_expanded,1)/ torch.clamp(input_mask_expanded.sum(1),min=1e-9)101112# Sentences we want sentence embeddings for13sentences =['Det här är en exempelmening','Varje exempel blir konverterad']1415# Load model from HuggingFace Hub16# To load an older version, e.g. v1.0, add the argument revision="v1.0" 17tokenizer = AutoTokenizer.from_pretrained('KBLab/sentence-bert-swedish-cased')18model = AutoModel.from_pretrained('KBLab/sentence-bert-swedish-cased')1920# Tokenize sentences21encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')2223# Compute token embeddings24with torch.no_grad():25 model_output = model(**encoded_input)2627# Perform pooling. In this case, max pooling.28sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])2930print("Sentence embeddings:")31print(sentence_embeddings)
Loading an older model (Hugginfface Transformers)
To load an older model specify the version tag with the revision arg. For example, to load the v1.0 model, use the following code:
The model was evaluated on SweParaphrase v1.0 and SweParaphrase v2.0. This test set is part of SuperLim -- a Swedish evaluation suite for natural langage understanding tasks. We calculated Pearson and Spearman correlation between predicted model similarity scores and the human similarity score labels. Results from SweParaphrase v1.0 are displayed below.
Model version
Pearson
Spearman
v1.0
0.9183
0.9114
v1.1
0.9183
0.9114
v2.0
0.9283
0.9130
The following code snippet can be used to reproduce the above results:
In general, v1.1 correlates the most with human assessment of text similarity on SweParaphrase v2.0. Below, we present zero-shot evaluation results on all data splits. They display the model's performance out of the box, without any fine-tuning.
Model version
Data split
Pearson
Spearman
v1.0
train
0.8355
0.8256
v1.1
train
0.8383
0.8302
v2.0
train
0.8209
0.8059
v1.0
dev
0.8682
0.8774
v1.1
dev
0.8739
0.8833
v2.0
dev
0.8638
0.8668
v1.0
test
0.8356
0.8476
v1.1
test
0.8393
0.8550
v2.0
test
0.8232
0.8213
SweFAQ v2.0
When it comes to retrieval tasks, v2.0 performs the best by quite a substantial margin. It is better at matching the correct answer to a question compared to v1.1 and v1.0.
Model version
Data split
Accuracy
v1.0
train
0.5262
v1.1
train
0.6236
v2.0
train
0.7106
v1.0
dev
0.4636
v1.1
dev
0.5818
v2.0
dev
0.6727
v1.0
test
0.4495
v1.1
test
0.5229
v2.0
test
0.5871
Examples how to evaluate the models on some of the test sets of the SuperLim suites can be found on the following links: evaluate_faq.py (Swedish FAQ), evaluate_swesat.py (SweSAT synonyms), evaluate_supersim.py (SuperSim).
Training
An article with more details on data and v1.0 of the model can be found on the KBLab blog.
Around 14.6 million sentences from English-Swedish parallel corpuses were used to train the model. Data was sourced from the Open Parallel Corpus (OPUS) and downloaded via the python package opustools. Datasets used were: JW300, Europarl, DGT-TM, EMEA, ELITR-ECA, TED2020, Tatoeba and OpenSubtitles.
The model was trained with the parameters:
DataLoader:
torch.utils.data.dataloader.DataLoader of length 180513 with parameters:
@misc{rekathati2021introducing,
author = {Rekathati, Faton},
title = {The KBLab Blog: Introducing a Swedish Sentence Transformer},
url = {https://kb-labb.github.io/posts/2021-08-23-a-swedish-sentence-transformer/},
year = {2021}
}
Acknowledgements
We gratefully acknowledge the HPC RIVR consortium (www.hpc-rivr.si) and EuroHPC JU (eurohpc-ju.europa.eu/) for funding this research by providing computing resources of the HPC system Vega at the Institute of Information Science (www.izum.si).