bert as service 的使用記錄

肖涵博士的bert-as-service

安裝:

pip install bert-serving-server  # server
pip install bert-serving-client  # client, independent of `bert-serving-server`
要求:

(1)Python >= 3.5
(2)Tensorflow >= 1.10
(3)不支持Python2?。。?/p>

準備工作

1、從以下列表里面下載好預訓練的BERT模型,解壓在某個文件夾中,例如:/model/chinese_L-12_H-768_A-12/
| BERT-Base, Uncased | 12-layer, 768-hidden, 12-heads, 110M parameters |
| BERT-Large, Uncased | 24-layer, 1024-hidden, 16-heads, 340M parameters |
| BERT-Base, Cased | 12-layer, 768-hidden, 12-heads , 110M parameters |
| BERT-Large, Cased | 24-layer, 1024-hidden, 16-heads, 340M parameters |
| BERT-Base, Multilingual Cased (New) | 104 languages, 12-layer, 768-hidden, 12-heads, 110M parameters |
| BERT-Base, Multilingual Cased (Old) | 102 languages, 12-layer, 768-hidden, 12-heads, 110M parameters |
| BERT-Base, Chinese | Chinese Simplified and Traditional, 12-layer, 768-hidden, 12-heads, 110M parameters |

使用

2、啟動BERT service

bert-serving-start -model_dir /model/chinese_L-12_H-768_A-12/ -num_worker=4 
#可以補充更多的參數(shù),詳情見API

3、使用客戶端來請求BERT service,得到BERT 句子編碼向量

from bert_serving.client import BertClient
bc = BertClient()
bc.encode(['我 喜歡 你們','我 喜 歡 你 們','我 喜歡 你'])
#更多細節(jié)參考API
#作為BERT的特點之一,可以得到一對句子的編碼(通過concatenate符號 ||| ,該符號前后都要加上空格),如下:
bc.encode(['First do it ||| then do it right'])

4、遠程使用BERT service
例如用GPU機器開service,然后遠程用其他機器請求service:

# on another CPU machine
from bert_serving.client import BertClient
bc = BertClient(ip='xx.xx.xx.xx')  # ip address of the GPU machine
bc.encode(['First do it', 'then do it right', 'then do it better'])

server and client API:

bert-as-service

其中遇到的問題和解決辦法

1、出現(xiàn)錯誤: bert-serving-start: 未找到命令...

如下啟動BERT service

bert-serving-start -model_dir /model/chinese_L-12_H-768_A-12/ -num_worker=4 

出現(xiàn)錯誤: bert-serving-start: 未找到命令...
解決:

#執(zhí)行命令
find / -name bert-serving-start
#找到:/usr/local/anaconda3/bin/bert-serving-start
#去到/usr/local/anaconda3/bin目錄下:
cd /usr/local/anaconda3/bin
./bert-serving-start -model_dir '/home/xxx/xxx/model/chinese_L-12_H-768_A-12/ ' -num_worker=4
2、啟動service遇到端口占用——zmq.error.ZMQError: Address already in use

執(zhí)行命令:

./bert-serving-start -model_dir '/home/xxx/xxx/model/chinese_L-12_H-768_A-12/ ' -num_worker=4

出現(xiàn)錯誤:
zmq.error.ZMQError: Address already in use
原因:因為BERT service 默認了port=5555,port_out=5556,啟動service時已經(jīng)有端口被其他進程占用了,所以我們要在啟動service時設置新的port和port_out:

./bert-serving-start -model_dir '/home/xxx/xxx/model/chinese_L-12_H-768_A-12/ ' -num_worker=4 -port=5777 -port_out=5778

顯然,在client我們也要設置port和port_out,否則會訪問默認的端口:

from bert_serving.client import BertClient
bc = BertClient(port=5777,port_out=5778)
bc.encode(['我 喜歡 你們','我 喜 歡 你 們','我 喜歡 你'])

這里也提醒我們遇到問題時可以多看看BERT service的API,一般都能解決~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容