项目介绍:all-MiniLM-L6-v2-similarity-es
项目背景
all-MiniLM-L6-v2-similarity-es是一个基于sentence-transformers的项目,旨在将句子和段落映射到一个768维的稠密向量空间。这种模型非常适合用于聚类分析或语义搜索等任务。
模型特性
这款模型主要处理西班牙语的句子相似度计算,使用了一组经过微调的句子转换器。模型的表示能力使其能够有效地将句子编码为向量,从而方便地进行比较。
使用方式
使用sentence-transformers库
要使用该模型,首先需要安装sentence-transformers
库。安装完成后,可以使用如下代码加载并应用模型:
pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
sentences = ["Esta es una frase para ser comparada", "Esta es otra oración"]
model = SentenceTransformer('jaimevera1107/roberta-similarity-es')
embeddings = model.encode(sentences)
print(embeddings)
使用HuggingFace Transformers库
如果不使用sentence-transformers
库,也可以通过HuggingFace
的transformers
库来使用该模型。这需要手动实现池化操作以从上下文中正确计算词嵌入:
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 = ["Esta es una frase para ser comparada", "Esta es otra oración"]
tokenizer = AutoTokenizer.from_pretrained('jaimevera1107/roberta-similarity-es')
model = AutoModel.from_pretrained('jaimevera1107/roberta-similarity-es')
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)
模型评估
在模型评估中,使用了R平方和Spearman相关系数进行衡量。微调后的Roberta模型在R平方上表现为70.67%,在Spearman相关上为80.1%,这些指标说明模型在句子相似度的捕捉上具备较强的能力。
训练过程
模型的训练使用了西班牙语句子相似度数据集,训练过程中采用了CosineSimilarityLoss
损失函数。在5个训练周期中,采用的优化器为AdamW
,学习率设定为2e-05,并设置了权重衰减和学习率调度策略。
模型架构概览
模型的整体架构包含两个主要部分之一是基于Roberta的Transformer模型,另一个是用于执行池化操作的Pooling模块。具体的架构如下:
SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: RobertaModel
(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})
)
通过这种结构,模型能够有效地从输入文本中提炼有意义的语义信息。