pipeline_tag: 句子相似度
tags:
- sentence-transformers
- 特征提取
- 句子相似度
- transformers
模型描述
这是一个sentence-transformers模型:它将句子和段落映射到512维的密集向量空间,可用于聚类或语义搜索等任务。
该模型是基于ult5-pt-small的sentence-transformers类型模型。它将句子和段落映射为512维的密集向量,可用于文本聚类、相似度计算或语义搜索。
使用场景
sentence-transformers模型生成的文本嵌入质量优于直接使用BERT或T5等编码器生成的嵌入。
该模型的潜在应用包括:
可能的使用场景:
基础模型
tgsc/ult5-pt-small
使用方法(Sentence-Transformers)
最简单的方法是使用sentence-transformers库:
安装sentence-transformers后即可轻松使用此模型:
pip install -U sentence-transformers
获取嵌入向量:
然后可以这样使用模型:
from sentence_transformers import SentenceTransformer
sentences = ["这是一个示例句子", "句子被转换为513维文本"]
model = SentenceTransformer('tgsc/sentence-transformer-ult5-pt-small')
embeddings = model.encode(sentences)
print(embeddings)
使用方法(HuggingFace Transformers)
也可以仅使用transformers库。首先将文本输入模型,然后对文本的上下文嵌入执行右池化操作。
不使用sentence-transformers时,可以这样使用模型:首先将输入通过transformer模型,然后需要在上下文词嵌入上应用正确的池化操作。
from transformers import AutoTokenizer, T5EncoderModel
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 = ["这是一个示例句子", "句子被转换为513维文本"]
tokenizer = AutoTokenizer.from_pretrained('tgsc/sentence-transformer-ult5-pt-small')
model = T5EncoderModel.from_pretrained('tgsc/sentence-transformer-ult5-pt-small')
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("句子嵌入:")
print(sentence_embeddings)
相似度示例
from sentence_transformers import SentenceTransformer, util
model = SentenceTransformer('tgsc/sentence-transformer-ult5-pt-small')
sentences1 = 10*['《共和国宪法》是规范国家组织和运作的最高准则,保障基本权利并确立指导巴西社会的原则和义务。']
sentences2 = [
'保障基本权利并确立指导巴西社会的原则和义务,《共和国宪法》是规范国家组织和运作的最高准则。',
'作为最高法律,联邦宪法规定了国家的政治组织,保护基本权利并确立引导巴西社会的准则和义务。',
'作为基本规范,《大宪章》规范了国家的法律和政治秩序,保护基本保障并确立指导巴西社会的原则和责任。',
'《最高法律》规定了公共权力的组织和运作,保障基本自由和权利,并确立指导巴西社会的价值观和承诺。',
'国家的基本法律在定义国家结构和运作时,保障基本权利并确立指导巴西社会的规范和原则。',
'服务合同应清晰明确地制定,定义双方的权利义务。',
'《通用数据保护法》(LGPD)规定了巴西个人数据处理和保护的规则,旨在保护数据主体的隐私和安全。',
'音乐节有众多国内外乐队参与,在三天的活动中吸引了大量观众。',
'手工艺品博览会汇集了全国各地的工匠,为参观者提供各种创意独特的产品。',
'企业家会议有商界领袖出席,分享了他们在商业成功中的经验和策略。']
embeddings1 = model.encode(sentences1, convert_to_tensor=True)
embeddings2 = model.encode(sentences2, convert_to_tensor=True)
cosine_scores = util.cos_sim(embeddings1, embeddings2)
print('参考句\n', sentences1[0],'\n')
print('参考句的改写')
for i in range(len(sentences1)):
print("相似度: {:.4f} {} \t\t".format(cosine_scores[i][i], sentences2[i]))
if i==4:
print('\n不同主题的句子')
引用
@misc{ult5-pt2023,
author = {Thacio Garcia Scandaroli},
title = {ULT5-pt: 使用UL2训练的葡萄牙语语言模型},
year = {2023},
}