自学内容网 自学内容网

文本相似度计算

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))


原文地址:https://blog.csdn.net/catontower/article/details/142615553

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!