Python基于similarities實(shí)現(xiàn)文本語義相似度計(jì)算和文本匹配搜索
similarities 實(shí)現(xiàn)了多種相似度計(jì)算、匹配搜索算法,支持文本、圖像,python3開發(fā)。
安裝
pip3 install torch # conda install pytorch pip3 install -U similarities
或
git clone https://github.com/shibing624/similarities.git cd similarities python3 setup.py install
報(bào)錯(cuò)
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)
報(bào)這個(gè)錯(cuò)的原因是transformers版本太低,升級下版本就可以了。
pip install --upgrade transformers
pydantic
另外還缺少pydantic:
pip install pydantic
樣例
# -*- coding: utf-8 -*- """ @author:XuMing(xuming624@qq.com) @description: 文本語義相似度計(jì)算和文本匹配搜索 """ import sys sys.path.append('..') from similarities import BertSimilarity # 1.Compute cosine similarity between two sentences. sentences = ['如何更換花唄綁定銀行卡', '花唄更改綁定銀行卡'] corpus = [ '花唄更改綁定銀行卡', '我什么時(shí)候開通了花唄', '俄羅斯警告烏克蘭反對歐盟協(xié)議', '暴風(fēng)雨掩埋了東北部;新澤西16英寸的降雪', '中央情報(bào)局局長訪問以色列敘利亞會談', '人在巴基斯坦基地的炸彈襲擊中喪生', ] 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))
結(jié)果:
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 我什么時(shí)候開通了花唄, score: 0.7212
如何更換花唄綁定銀行卡 vs 俄羅斯警告烏克蘭反對歐盟協(xié)議, score: 0.1450
如何更換花唄綁定銀行卡 vs 暴風(fēng)雨掩埋了東北部;新澤西16英寸的降雪, score: 0.2167
如何更換花唄綁定銀行卡 vs 中央情報(bào)局局長訪問以色列敘利亞會談, score: 0.2517
如何更換花唄綁定銀行卡 vs 人在巴基斯坦基地的炸彈襲擊中喪生, score: 0.0809
花唄更改綁定銀行卡 vs 花唄更改綁定銀行卡, score: 1.0000
花唄更改綁定銀行卡 vs 我什么時(shí)候開通了花唄, score: 0.6807
花唄更改綁定銀行卡 vs 俄羅斯警告烏克蘭反對歐盟協(xié)議, score: 0.1714
花唄更改綁定銀行卡 vs 暴風(fēng)雨掩埋了東北部;新澤西16英寸的降雪, score: 0.2162
花唄更改綁定銀行卡 vs 中央情報(bào)局局長訪問以色列敘利亞會談, 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
我什么時(shí)候開通了花唄: 0.7212
中央情報(bào)局局長訪問以色列敘利亞會談: 0.2517
query: 花唄更改綁定銀行卡
search top 3:
花唄更改綁定銀行卡: 1.0000
我什么時(shí)候開通了花唄: 0.6807
中央情報(bào)局局長訪問以色列敘利亞會談: 0.2728
--------------------------------------------------
{0: {0: 0.8551465272903442, 1: 0.7211954593658447, 4: 0.25171342492103577}}
以上就是Python基于similarities實(shí)現(xiàn)文本語義相似度計(jì)算和文本匹配搜索的詳細(xì)內(nèi)容,更多關(guān)于Python文本相似度計(jì)算的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pyecharts調(diào)整圖例與各板塊的位置間距實(shí)例
這篇文章主要介紹了pyecharts調(diào)整圖例與各板塊的位置間距實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python面向?qū)ο笕筇卣鳎豪^承、封裝和多態(tài)的深度解析
在面向?qū)ο蟪绦蛟O(shè)計(jì)中,對象可以看做是數(shù)據(jù)(特性)以及由一系列可以存取、操作這些數(shù)據(jù)的方法所組成的集合,Python是面向?qū)ο蟮恼Z言,支持面向?qū)ο缶幊痰娜筇匦裕豪^承、封裝(隱藏)、多態(tài),本文將逐一講解Python的三大特性2025-01-01Flask利用自定義接口實(shí)現(xiàn)mock應(yīng)用詳解
后端接口已提供,前端需要依賴后端接口返回的數(shù)據(jù)進(jìn)行前端頁面的開發(fā),如何配合前端?這篇就來介紹一下Flask如何利用自定義接口實(shí)現(xiàn)mock應(yīng)用,需要的可以參考一下2023-03-03python學(xué)習(xí)之SpaCy庫的高級特性詳解
在之前的文章中,我們介紹了SpaCy庫的一些基本概念和功能,在這篇文章中,我們將深入學(xué)習(xí)一些更高級的特性,包括詞向量、依賴性解析、和自定義組件2023-07-07Python中關(guān)于面向?qū)ο笾欣^承的詳細(xì)講解
面向?qū)ο缶幊?(OOP) 語言的一個(gè)主要功能就是“繼承”。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能進(jìn)行擴(kuò)展2021-10-10python GUI庫圖形界面開發(fā)之PyQt5控件QTableWidget詳細(xì)使用方法與屬性
這篇文章主要介紹了python GUI庫圖形界面開發(fā)之PyQt5控件QTableWidget詳細(xì)使用方法與屬性,需要的朋友可以參考下2020-02-02Django 開發(fā)調(diào)試工具 Django-debug-toolbar使用詳解
這篇文章主要介紹了Django 開發(fā)調(diào)試工具 Django-debug-toolbar使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07