[原创]python计算中文文本相似度神器

本文介绍了如何使用sentence-transformers库,特别是paraphrase-multilingual-MiniLM-L12-v2模型进行中文文本的余弦相似度计算,解决访问问题的方法,并提到了text2vec和sentence-transformers包的关系。

介绍

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

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

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

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

使用步骤

  1. 第一步先安装这个包,可以直接使用pip安装:
pip install sentence-transformers
  1. 导入包
import sys
from sentence_transformers.util import cos_sim  
from sentence_transformers import SentenceTransformer as SBert
  1. 使用模型
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包一个简单的使用用途,大家可以仔细读读包的源码,非常值得学习~

参考链接

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

阅读更多

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

### 关于 paraphrase-multilingual-MiniLM-L12-v2 模型 #### 模型概述 paraphrase-multilingual-MiniLM-L12-v2 是一种多语言语义相似度模型,在性能、功能和便捷性方面表现出色,能够处理多种自然语言处理(NLP)任务并广泛应用于不同行业中[^1]。 #### 主要特点 此模型具备以下特性: - **多语言支持**:可以用于超过50种语言的文本表示学习。 - **高效计算资源利用**:相较于大型预训练模型,MiniLM系列在减少参数量的同时保持了良好的表现效果。 - **强大的泛化能力**:经过充分训练后能够在未见过的数据集上取得优异成绩。 #### 使用场景 适用于但不限于以下几个领域内的具体应用场景: - 文本匹配与检索系统构建; -语言信息抽取及问答系统的开发- 社交媒体监控平台中的观点挖掘分析工具创建; #### 实际操作指南 为了有效部署该模型,建议按照如下方式准备环境: 安装必要的库文件可以通过 pip 完成,例如 `transformers` 库提供了简单易用接口来加载 Hugging Face 上托管的各种预训练模型实例。下面给出一段 Python 代码作为演示如何快速启动一个基于此模型的服务端点: ```python from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2') sentences = ['这是一句话', 'This is a sentence'] embeddings = model.encode(sentences) print(embeddings) ``` 此外,对于特定需求下的调优工作也非常重要。比如适当调节最大序列长度 (`max_seq_length`) 和池化模式 (`pooling_mode`) 可以显著改善运行效率而不明显牺牲精度水平[^4]。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值