NLP bert as service的簡單使用

2021-10-25 05:48:23 字數 2337 閱讀 7107

bert火遍了2019,不少修行者躍躍欲試,然而訓練bert模型是一次很昂貴的過程,想簡單地先享受一下成果變得有些困難。幸而google已發布了一些預訓練好的模型,修行者可以通過一些捷徑輕鬆的使用bert模型構建自己的nlp應用,詳細可參考

本文將對文字句子進行向量編碼,通過文字相似度計算來說明其使用過程.

bert-as-service的總體架構如下:

1、bert模型部署,是為服務端

2、bert請求呼叫服務,是為客戶端

使用方式如下:

pip install bert-serving-server 

pip install bert-serving-client

另外推薦安裝 tensorflow=1.14.0 and numpy=1.16.4,否則一堆問題

命令列輸入

bert-serving-start -model_dir 模型解壓路徑
# 匯入bert客戶端

from bert_serving.client import bertclient

import numpy as np

class

similarmodel

:def

__init__

(self)

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

self.bert_client = bertclient(ip=

'192.168.x.x'

)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_similar = bert_client .cos_similar(sentence_a_vec,sentence_b_vec)

if cos_similar > max_cos_similar:

max_cos_similar = cos_similar

most_similar_sentence = sentence_b

print

('最相似的句子:'

,most_similar_sentence)

bert_client .close_bert(

)# 為什麼天空是蔚藍色的

UICollectionView的簡單使用

所屬controller要遵循三個協議 uicollectionviewdatasource,uicollectionviewdelegate,uicollectionviewdelegateflowlayout uicollectionviewflowlayout flowlayout uicol...

BGAQRCode Android的簡單使用

compile com.google.zxing core 3.2.1 xmlns android 這句是使用選擇器框架時用到的 xmlns tools package com.huaqiang.zxingdemo 選擇框架用到 android name android.permission.cam...

Android VideoView的簡單使用

mvideoview.setvideouri uri.parse android.resource getpackagename r.raw play 設定乙個 控制器 控制器預設在父布局的地步 可以自己實現控制器布局 mvideoview.setmediacontroller new mediac...