使用bert service獲取句向量和相似度計算

2021-10-07 10:18:04 字數 2769 閱讀 2354

本文選擇的是bert-base, chinese:chinese simplified and traditional, 12-layer, 768-hidden, 12-heads, 110m parameters

所有預訓練模型:

pip install bert-serving-server   #server

pip install bert-serving-client #client

2、啟動服務

#bert-serving-start -model_dir /project/bert/chinese-l-12_h768_a-12 -num worker=4    #模型解壓路徑,可指定gpu使用數量

bert-serving-start -model_dir /project/bert/chinese-l-12_h768_a-

12

3、bert-server-document

from bert_serving.client import bertclient

bc = bertclient(

)sen_emb = bc.encode(

["今天你感覺好些了嗎"])

#return a ndarray (or list[list(float)])

print

(sen_emb.shape)

print

(sen_emb)

# 匯入bert客戶端

from bert_serving.client import bertclient

import numpy as np

class

similarmodel

:def

__init__

(self)

:# ip預設為本地模式,如果bert服務部署在其他伺服器上,修改為對應ip

self.bert_client = bertclient(

)def

close_bert

(self)

: self.bert_client.close(

)def

get_sentence_vec

(self,sentence)

:'''

根據bert獲取句子向量

:param sentence:

:return:

'''return self.bert_client.encode(

[sentence])[

0]defcos_similar

(self,sen_a_vec, sen_b_vec)

:'''

計算兩個句子的余弦相似度

:param sen_a_vec:

:param sen_b_vec:

:return:

'''vector_a = np.mat(sen_a_vec)

vector_b = np.mat(sen_b_vec)

num =

float

(vector_a * vector_b.t)

denom = np.linalg.norm(vector_a)

* np.linalg.norm(vector_b)

cos = num / denom

return cos

if __name__==

'__main__'

:# 從候選集condinates 中選出與sentence_a 最相近的句子

condinates =

['為什麼天空是蔚藍色的'

,'太空為什麼是黑的?'

,'天空怎麼是藍色的'

,'明天去爬山如何'

] sentence_a =

'天空為什麼是藍色的'

bert_client = similarmodel(

) max_cos_similar =

0 most_similar_sentence =

''for sentence_b in condinates:

sentence_a_vec = bert_client.get_sentence_vec(sentence_a)

sentence_b_vec = bert_client.get_sentence_vec(sentence_b)

cos_sim = bert_client.cos_similar(sentence_a_vec,sentence_b_vec)

print

(sentence_b_vec,cos_sim)

if cos_sim > max_cos_similar:

max_cos_similar = cos_sim

most_similar_sentence = sentence_b

print

('最相似的句子:'

,most_similar_sentence)

bert_client.close_bert(

)

output:

為什麼天空是蔚藍色的 0.9817470751381709

太空為什麼是黑的? 0.9311994519047564

天空怎麼是藍色的 0.9746721649911299

明天去爬山如何 0.8408672630644225

最相似的句子: 為什麼天空是蔚藍色的

使用CSLoader獲取Node後再獲取精靈失敗

今天在寫 的時候遇到乙個很鬱悶的問題,用cocostudio做了乙個介面,然後將其載入到程式當中,也成功獲取了node節點下的幾個精靈,但唯獨有乙個精靈獲取後使用失敗,程式中斷,下面 auto node csloader createnode cocostudio scene.csb mones s...

使用ALAssertLibrary獲取系統相簿

使用alassertlibrary必須要開啟系統定位,先判斷是否可以使用 iscanreadalasset yes void assetgroupenumerator alassetsgroup bool alassetsgroup group,bool stop group enumerator ...

使用curl獲取資料

在工作中需要獲取別人提供的介面,於是使用curl來獲得資料,下面是簡單例子 curl curl init 初始化 curl setopt curl curlopt url url 設定訪問位址 curl setopt curl curlopt timeout,3 設定等待時間為3秒 curl set...