用bert模型對句子或詞進行向量化,然後用sklearn比較其相似度:
# -*- coding:utf-8 -*-
from bert_serving.client import bertclient
from sklearn.metrics.pairwise import cosine_similarity
# 先命令列啟動服務
# bert-serving-start -model_dir c:\users\jason\pycharmprojects\code\chinese_l-12_h-768_a-12 -num_worker=1
class encoding(object):
def __init__(self):
self.server_ip = "127.0.0.1"
self.bert_client = bertclient(ip=self.server_ip)
def encode(self, query):
tensor = self.bert_client.encode([query])
return tensor
def query_similarity(self, query_list):
tensors = self.bert_client.encode(query_list)
return cosine_similarity(tensors)[0][1]
s1 = "我們今天所取得的成績離不開與qualcomm technologies等同樣致力於實現上述價值主張的行業領軍企業的密切合作。"
s2 = "康寧光通訊無線產品管理副總裁michelle engarto表示:「康寧與qualcomm technologies開展5g公釐波ran合作是為了給增值創新提供一條基準線。"
s3 = "oppo副總裁與全球銷售總裁吳強表示:「oppo與qualcomm technologies一直保持緊密合作關係。"
s4 = "此外,兩家公司正與廣和通合作開發 m.2 模組,該模組經過優化,可與英特爾客戶端平台整合。"
s5 = "今日,中興通訊對美國聯邦通訊委員會(fcc)「阻止美國電信運營商使用美國聯邦資金購買中國通訊網路裝置」提案進行了回應,在提交給fcc的申述檔案中稱,並不構成安全威脅。"
if __name__ == "__main__":
ec = encoding()
print(ec.encode("中國").shape) # (1, 768)
print(ec.encode("美國").shape)
print("中國和美國的向量相似度:", ec.query_similarity(["中國", "美國"])) # 中國和美國的向量相似度: 0.9300133
print("中國和地球的向量相似度:", ec.query_similarity(["中國", "澳大利亞"])) # 中國和地球的向量相似度: 0.8202904
print("張三和李四的向量相似度:", ec.query_similarity(["張三", "李四"])) # 張三和李四的向量相似度: 0.9328898
print("s1和s2的相似度:", ec.query_similarity([s1, s2]))
print("s1和s3的相似度:", ec.query_similarity([s1, s3]))
print("s1和s4的相似度:", ec.query_similarity([s1, s4]))
print("s1和s5的相似度:", ec.query_similarity([s1, s5]))
print("s2和s3的相似度:", ec.query_similarity([s2, s3]))
print("s2和s4的相似度:", ec.query_similarity([s2, s4]))
print("s2和s5的相似度:", ec.query_similarity([s2, s5]))
print("s3和s4的相似度:", ec.query_similarity([s3, s4]))
# s1和s2的相似度: 0.88187534
# s1和s3的相似度: 0.8883614
# s1和s4的相似度: 0.8948699 s1和s5的相似度: 0.8486718
# s2和s3的相似度: 0.9333299
# s2和s4的相似度: 0.906179 s2和s5的相似度: 0.87892824
# s3和s4的相似度: 0.89166194
# s = "此外,兩家公司正與廣和通合作開發 m.2 模組,該模組經過優化,可與英特爾客戶端平台整合。"
# bc = bertclient()
# li = ['中國', '美國', '澳大利亞', '張三', '李四光', '王五',s,]
# vecs = bc.encode(li)
句子相似度比較的歸一化
我們將不同長度的句子 預處理並分詞之後的長度 直接做比較其實是不公平的,舉個例子 sentence 1 長度為2 sentence 2 長度為1 sentence 3 長度為3 在取相似詞top4,exp 0.7,的情況下 即便sent2與sent1詞的組成完全不同,base similarity ...
LinuxTips cut或awk的比較
例如獲取所有包含python的程序的命令列 多的所有程序的詳細列表 ps ef 使用grep查詢包含的行且去除grep程序本身 grep v grep grep python 1 使用cut ps ef cut f8 上面的命令不能正常的工作,因為cut預設是以tab來分隔多個列的,但是ps的輸出是...
替換句子中的多個不同的詞 python 實現
對乙個句子中的多處不同的詞的替換,可以採用依次將句子中的每個詞分別和詞典進行匹配,匹配成功的進行替換來實現,可是這種方法直覺上耗時就很長,對於乙個篇幅很長的文件,會花費很多的時間,這裡介紹一種可以一次性替換句子中多處不同的詞的方法,如下 usr bin env python coding utf 8...