介绍

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

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

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

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

使用步骤

  1. 第一步先安装这个包,可以直接使用pip安装:
1
pip install sentence-transformers
  1. 导入包
1
import sys from sentence_transformers.util import cos_sim from sentence_transformers import SentenceTransformer as SBert
  1. 使用模型
1
model = SBert('paraphrase-multilingual-MiniLM-L12-v2')

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

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

要使用特定的模型,您可以按照以下步骤操作:

  1. 访问模型网站:首先,您需要前往模型的官方网站进行下载。网址为:模型网站
  2. 寻找所需模型:在网站上,搜索名为paraphrase-multilingual-MiniLM-L12-v2的模型。
  3. 下载模型:找到模型后,点击相应的下载链接进行下载。
  4. 解压模型文件:下载完成后,将模型文件解压到您选择的文件夹中。
  5. 使用模型:最后,通过传递该文件夹的路径,即可直接使用模型。 请确保您的操作环境支持模型的运行,并检查模型文件的完整性。

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

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

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

1
# 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

最近,我接触到了两个非常出色的Python包:text2vecsentence-transformers。这两个包在自然语言处理领域,特别是在文本嵌入(Sentence Embedding)方面,表现出了极高的性能和灵活性。以下是我对这两个包的体验和感想。

text2vec包体验

起初,我是出于对text2vec的兴趣而开始探索的。这个包的设计非常精良,功能强大,能够将文本转换为向量表示,这在处理诸如文本相似度计算等任务时非常有用。当我查看其源码时,我被代码的整洁和优雅所震撼。

发现sentence-transformers

然而,在深入研究后,我意外地发现text2vec实际上在内部调用了sentence-transformers。这个发现让我意识到,我之前所赞赏的许多精妙的代码,实际上源自sentence-transformers

sentence-transformers的认识

sentence-transformers是一个由德国乌尔姆大学的UKPLab开发的库,它提供了一种简便的方法来计算句子、段落甚至图像的密集向量表示。这些模型基于BERT等变换器网络,并且在多个任务上达到了最先进的性能。

源码学习的价值

无论是text2vec还是sentence-transformers,它们的源码都非常值得一读。它们不仅代码质量高,而且展示了如何高效地实现复杂的NLP功能。对于任何对自然语言处理感兴趣的开发者来说,深入研究这些源码都是一次宝贵的学习经历。

结论

尽管我最初是被text2vec所吸引,但最终我对两个包都留下了深刻的印象。它们各自在文本嵌入领域都有着独特的贡献,值得每一个NLP从业者关注和学习。

参考链接

  1. sentence-transformers GitHub2. text2vec GitHub

延伸阅读

有关更多关于文本嵌入的深入讨论和使用案例,推荐阅读以下知乎回答:知乎 - Sentence Embedding 十碘努 sota 脊北儿兰唇?