pipeline_tag: 句子相似度
tags:
多语言E5基础版(sentence-transformers)
这是intfloat/multilingual-e5-base模型的句子转换器版本:它将句子和段落映射到768维密集向量空间,可用于聚类或语义搜索等任务。
使用方法(Sentence-Transformers)
安装sentence-transformers后,使用此模型变得非常简单:
pip install -U sentence-transformers
然后可以像这样使用模型:
from sentence_transformers import SentenceTransformer
sentences = ['query: 女性每天应摄入多少蛋白质',
'query: 南瓜的家常做法',
"passage: 根据CDC的一般指南,19至70岁女性每日平均蛋白质需求量为46克。但从这张图表可以看出,怀孕或备战马拉松时需要增加摄入量。查看下方图表了解每日蛋白质建议摄入量。",
"passage: 1.清炒南瓜丝 原料:嫩南瓜半个 调料:葱、盐、白糖、鸡精 做法: 1、南瓜削去薄皮,刮去瓤 2、擦成细丝(无擦菜板可用刀切丝) 3、热锅放油,爆香葱花 4、下南瓜丝快炒1分钟,加盐、糖和鸡精调味出锅 2.香葱炒南瓜 原料:南瓜1只 调料:香葱、蒜末、橄榄油、盐 做法: 1、南瓜去皮切片 2、油锅八成热爆香蒜末 3、下南瓜片翻炒 4、翻炒时可少量多次加水 5、加盐炒匀 6、南瓜变软后关火 7、撒香葱出锅"]
model = SentenceTransformer('embaas/sentence-transformers-multilingual-e5-base')
embeddings = model.encode(sentences)
print(embeddings)
使用方法(Huggingface)
import torch.nn.functional as F
from torch import Tensor
from transformers import AutoTokenizer, AutoModel
def average_pool(last_hidden_states: Tensor,
attention_mask: Tensor) -> Tensor:
last_hidden = last_hidden_states.masked_fill(~attention_mask[..., None].bool(), 0.0)
return last_hidden.sum(dim=1) / attention_mask.sum(dim=1)[..., None]
input_texts = ['query: 女性每天应摄入多少蛋白质',
'query: 南瓜的家常做法',
"passage: 根据CDC指南,19-70岁女性每日蛋白质平均需求为46克。但怀孕或马拉松训练时需要增加。查看图表了解每日建议摄入量。",
"passage: 1.清炒南瓜丝 做法:南瓜削皮去瓤切丝,爆香葱花后快炒调味 2.香葱炒南瓜 做法:南瓜切片,爆香蒜末后翻炒,加盐调味,撒香葱出锅"]
tokenizer = AutoTokenizer.from_pretrained('intfloat/multilingual-e5-base')
model = AutoModel.from_pretrained('intfloat/multilingual-e5-base')
batch_dict = tokenizer(input_texts, max_length=512, padding=True, truncation=True, return_tensors='pt')
outputs = model(**batch_dict)
embeddings = average_pool(outputs.last_hidden_state, batch_dict['attention_mask'])
embeddings = F.normalize(embeddings, p=2, dim=1)
scores = (embeddings[:2] @ embeddings[2:].T) * 100
print(scores.tolist())
使用API
您可以使用embaas API编码输入。从embaas.io获取免费API密钥
import requests
url = "https://api.embaas.io/v1/embeddings/"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer ${您的API密钥}"
}
data = {
"texts": ["这是一个示例句子", "这是另一个句子"],
"instruction": "query"
"model": "multilingual-e5-base"
}
response = requests.post(url, json=data, headers=headers)
评估结果
MTEB评估结果可在此处查看。
完整模型架构
SentenceTransformer(
(0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) 使用Transformer模型: XLMRobertaModel
(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, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False})
(2): Normalize()
)
引用与作者