Python基于similarities实现文本语义相似度计算和文本匹配搜索

 更新时间:2024年03月08日 09:49:29   作者:小龙在山东  
similarities 实现了多种相似度计算、匹配搜索算法,支持文本、图像,python3开发,下面我们就来看看如何使用similarities实现文本语义相似度计算和文本匹配搜索吧

similarities 实现了多种相似度计算、匹配搜索算法,支持文本、图像,python3开发。

安装

pip3 install torch # conda install pytorch
pip3 install -U similarities

git clone https://github.com/shibing624/similarities.git
cd similarities
python3 setup.py install

报错

ChineseCLIPProcessor

Traceback (most recent call last): File “xx\similarity_test1.py”,
line 9, in
from similarities import BertSimilarity File “xx\lib\site-packages\similarities_init_.py”, line 28, in
from similarities.clip_similarity import ClipSimilarity File “xx\lib\site-packages\similarities\clip_similarity.py”, line 16, in

from similarities.clip_module import ClipModule File “xx\lib\site-packages\similarities\clip_module.py”, line 18, in

from transformers import ChineseCLIPProcessor, ChineseCLIPModel, CLIPProcessor, CLIPModel ImportError: cannot import name
‘ChineseCLIPProcessor’ from ‘transformers’
(xx\lib\site-packages\transformers_init_.py)

报这个错的原因是transformers版本太低,升级下版本就可以了。

pip install --upgrade transformers

pydantic

另外还缺少pydantic:

pip install pydantic

样例

# -*- coding: utf-8 -*-
"""
@author:XuMing(xuming624@qq.com)
@description: 文本语义相似度计算和文本匹配搜索
"""
import sys

sys.path.append('..')
from similarities import BertSimilarity

# 1.Compute cosine similarity between two sentences.
sentences = ['如何更换花呗绑定银行卡',
             '花呗更改绑定银行卡']
corpus = [
    '花呗更改绑定银行卡',
    '我什么时候开通了花呗',
    '俄罗斯警告乌克兰反对欧盟协议',
    '暴风雨掩埋了东北部;新泽西16英寸的降雪',
    '中央情报局局长访问以色列叙利亚会谈',
    '人在巴基斯坦基地的炸弹袭击中丧生',
]
model = BertSimilarity(model_name_or_path="shibing624/text2vec-base-chinese")
print(model)
similarity_score = model.similarity(sentences[0], sentences[1])
print(f"{sentences[0]} vs {sentences[1]}, score: {float(similarity_score):.4f}")

print('-' * 50 + '\n')
# 2.Compute similarity between two list
similarity_scores = model.similarity(sentences, corpus)
print(similarity_scores.numpy())
for i in range(len(sentences)):
    for j in range(len(corpus)):
        print(f"{sentences[i]} vs {corpus[j]}, score: {similarity_scores.numpy()[i][j]:.4f}")

print('-' * 50 + '\n')
# 3.Semantic Search
model.add_corpus(corpus)
res = model.most_similar(queries=sentences, topn=3)
print(res)
for q_id, id_score_dict in res.items():
    print('query:', sentences[q_id])
    print("search top 3:")
    for corpus_id, s in id_score_dict.items():
        print(f'\t{model.corpus[corpus_id]}: {s:.4f}')

print('-' * 50 + '\n')
print(model.search(sentences[0], topn=3))

结果:

Similarity: BertSimilarity, matching_model: <SentenceModel: shibing624/text2vec-base-chinese, encoder_type: MEAN, max_seq_length: 256, emb_dim: 768>
2024-03-07 20:12:46.481 | DEBUG    | text2vec.sentence_model:__init__:80 - Use device: cpu
如何更换花呗绑定银行卡 vs 花呗更改绑定银行卡, score: 0.8551
--------------------------------------------------

[[0.8551465  0.72119546 0.14502521 0.21666759 0.25171342 0.08089039]
 [0.9999997  0.6807433  0.17136583 0.21621695 0.27282682 0.12791349]]
如何更换花呗绑定银行卡 vs 花呗更改绑定银行卡, score: 0.8551
如何更换花呗绑定银行卡 vs 我什么时候开通了花呗, score: 0.7212
如何更换花呗绑定银行卡 vs 俄罗斯警告乌克兰反对欧盟协议, score: 0.1450
如何更换花呗绑定银行卡 vs 暴风雨掩埋了东北部;新泽西16英寸的降雪, score: 0.2167
如何更换花呗绑定银行卡 vs 中央情报局局长访问以色列叙利亚会谈, score: 0.2517
如何更换花呗绑定银行卡 vs 人在巴基斯坦基地的炸弹袭击中丧生, score: 0.0809
花呗更改绑定银行卡 vs 花呗更改绑定银行卡, score: 1.0000
花呗更改绑定银行卡 vs 我什么时候开通了花呗, score: 0.6807
花呗更改绑定银行卡 vs 俄罗斯警告乌克兰反对欧盟协议, score: 0.1714
花呗更改绑定银行卡 vs 暴风雨掩埋了东北部;新泽西16英寸的降雪, score: 0.2162
花呗更改绑定银行卡 vs 中央情报局局长访问以色列叙利亚会谈, score: 0.2728
花呗更改绑定银行卡 vs 人在巴基斯坦基地的炸弹袭击中丧生, score: 0.1279
--------------------------------------------------

2024-03-07 20:13:03.429 | INFO     | similarities.bert_similarity:add_corpus:108 - Start computing corpus embeddings, new docs: 6
Batches: 100%|██████████| 1/1 [00:10<00:00, 10.45s/it]
2024-03-07 20:13:13.889 | INFO     | similarities.bert_similarity:add_corpus:120 - Add 6 docs, total: 6, emb len: 6
{0: {0: 0.8551465272903442, 1: 0.7211954593658447, 4: 0.25171342492103577}, 1: {0: 0.9999997019767761, 1: 0.6807432770729065, 4: 0.27282682061195374}}
query: 如何更换花呗绑定银行卡
search top 3:
    花呗更改绑定银行卡: 0.8551
    我什么时候开通了花呗: 0.7212
    中央情报局局长访问以色列叙利亚会谈: 0.2517
query: 花呗更改绑定银行卡
search top 3:
    花呗更改绑定银行卡: 1.0000
    我什么时候开通了花呗: 0.6807
    中央情报局局长访问以色列叙利亚会谈: 0.2728
--------------------------------------------------

{0: {0: 0.8551465272903442, 1: 0.7211954593658447, 4: 0.25171342492103577}}

以上就是Python基于similarities实现文本语义相似度计算和文本匹配搜索的详细内容,更多关于Python文本相似度计算的资料请关注脚本之家其它相关文章!

相关文章

  • Python打包编译工具Pyinstaller与Nuitka特性超详细对比

    Python打包编译工具Pyinstaller与Nuitka特性超详细对比

    应用程序开发完毕,一般都需要对程序进行打包后发布,除开源项目外,很少有发布源码的,这篇文章主要介绍了Python打包编译工具Pyinstaller与Nuitka特性对比的相关资料,需要的朋友可以参考下
    2026-03-03
  • Python 处理图片像素点的实例

    Python 处理图片像素点的实例

    今天小编就为大家分享一篇Python 处理图片像素点的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python+tkinter编写一个最近很火的强制表白神器

    Python+tkinter编写一个最近很火的强制表白神器

    这篇文章主要为大家详细介绍了Python如何通过tkinter编写一个最近很火的强制表白神器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起尝试一下
    2023-04-04
  • python删除文件示例分享

    python删除文件示例分享

    这篇文章主要介绍了删除文件夹下所有文件和子文件夹的示例,大家参考使用吧
    2014-01-01
  • python必学知识之装饰器详解

    python必学知识之装饰器详解

    这篇文章主要介绍了python必学知识之装饰器详解,python的三大器指的是:装饰器、迭代器、生成器,下面就装饰器整理一下从各种资源收获的对装饰器的理解,需要的朋友可以参考下
    2023-09-09
  • Python机器学习之使用Pyecharts制作可视化大屏

    Python机器学习之使用Pyecharts制作可视化大屏

    pyecharts是一个用于生成Echarts图表的Python库,Echarts是百度开源的一个数据可视化 JS 库,可以生成一些非常酷炫的图表,这篇文章主要给大家介绍了关于Python机器学习之Pyecharts制作可视化大屏的相关资料,需要的朋友可以参考下
    2021-10-10
  • 基于Python实现一个AI物体识别

    基于Python实现一个AI物体识别

    计算机视觉是其中的一大领域 ,应用场景也比较多,这篇文章主要为大家详细介绍了如何基于Python实现一个AI物体识别功能,需要的小伙伴可以了解下
    2024-11-11
  • python实现数字炸弹游戏程序

    python实现数字炸弹游戏程序

    这篇文章主要为大家详细介绍了python实现数字炸弹游戏程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Python使用date模块进行日期处理的终极指南

    Python使用date模块进行日期处理的终极指南

    在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能和使用技巧,需要的可以了解下
    2025-03-03
  • python Bamboolib库加速Pandas数据分析过程详解

    python Bamboolib库加速Pandas数据分析过程详解

    这篇文章主要介绍了python Bamboolib库加速Pandas数据分析过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01

最新评论