模型:
hackathon-pln-es/paraphrase-spanish-distilroberta
这是一个 sentence-transformers 模型:它将句子和段落映射到一个768维的稠密向量空间,可用于聚类或语义搜索等任务。
我们遵循教师-学生的迁移学习方法,使用平行的EN-ES句对来训练一个bertin-roberta-base-spanish模型。
只要您安装了 sentence-transformers ,使用此模型就很容易:
pip install -U sentence-transformers
然后您可以像这样使用模型:
from sentence_transformers import SentenceTransformer sentences = ["Este es un ejemplo", "Cada oración es transformada"] model = SentenceTransformer('hackathon-pln-es/paraphrase-spanish-distilroberta') embeddings = model.encode(sentences) print(embeddings)
如果没有 sentence-transformers ,您可以像这样使用模型:首先,将输入传递给转换器模型,然后您必须在上下文化的词嵌入之上应用正确的池操作。
from transformers import AutoTokenizer, AutoModel import torch import torch.nn.functional as F #Mean Pooling - Take attention mask into account for correct averaging def mean_pooling(model_output, attention_mask): token_embeddings = model_output[0] #First element of model_output contains all token embeddings 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 we want sentence embeddings for sentences = ['Este es un ejemplo", "Cada oración es transformada'] # Load model from HuggingFace Hub tokenizer = AutoTokenizer.from_pretrained('hackathon-pln-es/paraphrase-spanish-distilroberta') model = AutoModel.from_pretrained('hackathon-pln-es/paraphrase-spanish-distilroberta') # Tokenize sentences encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt') # Compute token embeddings with torch.no_grad(): model_output = model(**encoded_input) # Perform pooling sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask']) # Normalize embeddings sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1) print("Sentence embeddings:") print(sentence_embeddings)
SentenceTransformer( (0): Transformer({'max_seq_length': 128, 'do_lower_case': False}) with Transformer model: BertModel (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}) )
在STS-2017.es-en.txt和STS-2017.es-es.txt(手动翻译以进行评估)上的相似性评估
我们对不同语言的句对之间进行语义文本相似度(STS)的测量:
cosine_pearson | cosine_spearman | manhattan_pearson | manhattan_spearman | euclidean_pearson | euclidean_spearman | dot_pearson | dot_spearman |
---|---|---|---|---|---|---|---|
0.8495 | 0.8579 | 0.8675 | 0.8474 | 0.8676 | 0.8478 | 0.8277 | 0.8258 |
cosine_pearson | cosine_spearman | manhattan_pearson | manhattan_spearman | euclidean_pearson | euclidean_spearman | dot_pearson | dot_spearman |
---|---|---|---|---|---|---|---|
0.8344 | 0.8448 | 0.8279 | 0.8168 | 0.8282 | 0.8159 | 0.8083 | 0.8145 |
我们的模型用于作为句子和短段落编码器。给定一个输入文本,它输出一个捕捉语义信息的向量。可以将句向量用于信息检索、聚类或句子相似性任务。
这个模型是根据论文 Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation 和其配套的python包 的说明培训的双语西班牙语-英语模型。我们使用了最强大的预训练的英文双编码器( paraphrase-mpnet-base-v2 )作为教师模型,使用预训练的西班牙语 BERTIN 作为学生模型。
我们在hackathon-pln-es组织的 Hackathon 2022 NLP - Spanish 中开发了这个模型。
我们使用多个数据集的句对(EN-ES)的连接。我们可以查看在训练期间使用的数据集: parallel-sentences
Dataset |
---|
AllNLI - ES (SNLI + MultiNLI) |
EuroParl |
JW300 |
News Commentary |
Open Subtitles |
TED 2020 |
Tatoeba |
WikiMatrix |