英文

paraphrase-spanish-distilroberta

这是一个 sentence-transformers 模型:它将句子和段落映射到一个768维的稠密向量空间,可用于聚类或语义搜索等任务。

我们遵循教师-学生的迁移学习方法,使用平行的EN-ES句对来训练一个bertin-roberta-base-spanish模型。

使用(Sentence-Transformers)

只要您安装了 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)

使用(HuggingFace Transformers)

如果没有 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)的测量:

ES-ES

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

ES-EN

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

作者