Sentence_transformers 是一种基于深度学习的自然语言处理技术,使用了大量的语料库进行训练,生成了多种预训练模型,主要用于将文本(包括句子、段落等)转换为向量表示,进而实现文本相似度计算、文本分类、文本聚类、语义搜索等多种自然语言处理任务。
该技术基于PyTorch和Transformers框架,支持多种语言(超过100种),提供了丰富的预训练模型,用户可以根据具体任务进行微调或直接使用。
其技术原理是通过将文本转换为向量,可以在向量空间中比较不同文本的相似度。这种表示方式能够捕捉文本的语义信息,而非仅仅是表面的词汇匹配。
使用Sentence_transformers 计算文本相似度:
首先下载Sentence_transformers与训练模型paraphrase-multilingual-MiniLM-L12-v2,下载地址为:https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/ 下载后解压即可直接使用。
安装依赖包(为了提升速度,我使用了清华源下载):
pip install sentence-transformers -i https://pypi.tuna.tsinghua.edu.cn/simple
在代码中import相应的依赖包:
from sentence_transformers.util import cos_sim
from sentence_transformers import SentenceTransformer as SBert
加载与训练模型
model = SBert('paraphrase-multilingual-MiniLM-L12-v2')
测试代码:
我定义了一个数组sen = ['human','i like you','人类','我爱你'],该数组中包含单词,也包含句子,有中文,也有英文,遍历数组,两两进行文本相似度计算,★数目越多,表示文本相似度也越高。
emb = model.encode(sen),将数组元素分别转换成向量
cos = cos_sim(emb,emb),计算待比较元素向量的余弦相似度,cos值越大,表示被比较的两个元素相似度越高。
def get_des_by_cosine(cos):
if cos>0.8:result='★★★★★'
elif cos>0.7:result='★★★★'
elif cos>0.5:result='★★★'
elif cos>0.4:result='★★'
else:result='★'
return result
def test_model():
sen = ['human','i like you','人类','我爱你']
emb = model.encode(sen)
cos = cos_sim(emb,emb)
for i in range(0,len(sen)):
for k in range(0,len(sen)):
val = cos[i][k]
result = get_des_by_cosine(val)
print('【{}】【{}】 {:.4f} {}'.format(sen[i],sen[k],val,result))