当前位置:首页 > 日记本 > 正文内容

python计算中文文本相似度神器

zhangchap6个月前 (11-14)日记本217


我的代码:

def sentence_relevance(title, query):
    # 计算文本向量
    embeddings = model.encode([title, query], convert_to_tensor=True)
    # 计算余弦相似度
    cosine_scores = util.pytorch_cos_sim(embeddings[0], embeddings[1])

    return cosine_scores.item()


以下为转载:



介绍

最近因为工作需要,需要使用一个功能,就是中文文本相似度的计算。属于nlp领域的一个应用吧,这里找到一个非常好的包和大家分享。这个包叫sentence-transformers。

这里给大家介绍,如何使用这个包对中文文本做相似度计算(这个包的其中一个小用途罢了)

    这里使用的模型是paraphrase-multilingual-MiniLM-L12-v2模型,因为paraphrase-MiniLM-L6-v2模型已经非常好了,paraphrase-multilingual-MiniLM-L12-v2是paraphrase-MiniLM-L6-v2模型的多语言版本,速度快,效果好,支持中文!

    这里计算相似度的方法是使用的余弦相似度。

使用步骤

    1、第一步先安装这个包,可以直接使用pip安装:

pip install sentence-transformers

2、导入包

import sys
from sentence_transformers.util import cos_sim  
from sentence_transformers import SentenceTransformer as SBert


3、使用模型

model = SBert('paraphrase-multilingual-MiniLM-L12-v2')

因为在中国境内,访问一些模型网站,可能会失败,出现这样的结果:

HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /api/models/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)')))

那么我们就可以换成这样的方法:先去下载模型,然后解压到文件夹中,然后直接传递这个文件夹路径就行了。



先去模型网站下载模型:模型网站链接为:https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/

然后查找paraphrase-multilingual-MiniLM-L12-v2这个模型名字,点击下载即可。

然后将这个模型解压到paraphrase-multilingual-MiniLM-L12-v2文件夹。然后再将这个文件夹路径放到下面的模型即可。

model = SBert("C:\\Users\xxxx\Downloads\\paraphrase-multilingual-MiniLM-L12-v2")
  1. 计算结果

下面的内容就很简单了,传递了两个list,分别对每个list里面的文本做encode,然后再计算余弦相似度,最后输出结果。

# Two lists of sentences
sentences1 = ['如何更换花呗绑定银行卡',
              'The cat sits outside',
              'A man is playing guitar',
              'The new movie is awesome']

sentences2 = ['花呗更改绑定银行卡',
              'The dog plays in the garden',
              'A woman watches TV',
              'The new movie is so great']

# Compute embedding for both lists
embeddings1 = model.encode(sentences1)
embeddings2 = model.encode(sentences2)

# Compute cosine-similarits
cosine_scores = cos_sim(embeddings1, embeddings2)
cosine_scores

感想

我其实刚开始打算就是使用text2vec这个包的,我感觉这个包写的挺好的,非常强大。我于是想看看他这个包的源码,打开源码的一瞬间,我都惊呆了,没想到代码写的这么干净漂亮。

可是我后来细看才知道,竟然跳转到sentence-transformers包了😂,原来刚才很多漂亮的代码,都是sentence-transformers包哇😂。

text2vec包也很不错,sentence-transformers包更不错!!

我这里也只是提供了sentence-transformers包一个简单的使用用途,大家可以仔细读读包的源码,非常值得学习~
参考链接

    https://github.com/UKPLab/sentence-transformers
    https://github.com/shibing624/text2vec

阅读更多

https://www.zhihu.com/question/510987022/answer/2778610483


原文链接:https://blog.csdn.net/yuanzhoulvpi/article/details/121755062



分享给朋友:

相关文章

更换服务器需要设置的几点

此设置只针对个人习惯,因为需要开通的网站及服务器较多,做个记录!就不公开了 此设置只针对个人习惯,因为需要开通的网站及服务器较多,做个记录!就不公开了 此设置只针对个人习惯,因为需要开...

火狐添加自定义搜索引擎

直接网址搜索自定义添加:https://mycroftproject.com/...

网络编辑工具箱注册ComCtl32.ocx

1.把ComCtl32.ocx放到c:\Windows\SysWOW64,注:需要管理员权限 2.打开C:\Windows\System32 找到 cmd.exe 鼠标右键管理员身份...

python xpath语法总结

python xpath语法总结:常用的://1.从任意节点开始/2.从根节点开始//div/p3.div下的p标签//div[@class="hrzz_bottom"]/ul/l...

python 获取当前时间及随机时间戳

import time from random import randint time.strftime('%Y-%m-%d %H:%M:...

python读取txt文件放到Queue队列

from queue import Queue with open('kw.txt',encoding='utf-8')&nb...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。