bert實戰:安裝與跑demo

Bert介紹

Bert模型是Google在2018年10月發佈的語言表示模型,Bert在NLP領域橫掃了11項任務的最優結果,可以說是現今最近NLP中最重要的突破。Bert模型的全稱是Bidirectional Encoder Representations from Transformers,是通過訓練Masked Language Model和預測下一句任務得到的模型。關於Bert具體訓練的細節和更多的原理,有興趣的讀者可以去看在arXiv上的原文。本篇文章從實踐入手,帶領大家進行Bert的中文文本分類和作爲句子向量進行使用的教程。

準備工作

1.下載bert

1
git clone https://github.com/google-research/bert.git

2.下載bert預訓練模型

Google提供了多種預訓練好的bert模型,從下方鏈接下載 Google 發佈的預訓練模型,解壓到某個路徑下,比如: /tmp/english_L-12_H-768_A-12/

你可以使用包括 BERT-Base, Multilingual 和 BERT-Base, Chinese 在內的任意模型。

開啓 BERT 服務

python app.py -model_dir /tmp/english_L-12_H-768_A-12/ -num_worker=4

這個代碼將開啓一個 4 進程的 BERT 服務,意味着它可以最高處理來自 4 個客戶端的併發請求。雖然同一時刻連接服務的客戶端數量沒有限制,但在某時刻多餘 4 個的併發請求將被暫時放到一個負載均衡中,等待執行。

3.(可選項)安裝bert-as-service,這是一個可以利用bert模型將句子映射到固定長度向量的服務。

1
2
pip install bert-serving-server # server
pip install bert-serving-client # client, independent of 'bert-serving-server'

該服務要求tensorflow的最低版本爲1.10。

bert-as-service 將 BERT模型作爲一個獨立的句子編碼(sequence encoding/embedding)服務,在客戶端僅用兩行代碼就可以對句子進行高效編碼

無論下游是什麼任務,對於 NLP 研究者來說,最重要的就是獲取一段文字或一個句子的定長向量表示,而將變長的句子編碼成定長向量的這一過程叫做 sentence encoding/embedding。bert-as-service 正是出於此設計理念,將預訓練好的 BERT 模型作爲一個服務獨立運行,客戶端僅需通過簡單的 API 即可調用服務獲取句子、詞級別上的向量。在實現下游任務時,無需將整個 BERT 加載到 tf.graph 中,甚至不需要 TensorFlow 也不需要 GPU,就可以在 scikit-learn, PyTorch, Numpy 中直接使用 BERT。

 

以句子向量的形式使用Bert

如果想要將bert模型的編碼和其他模型一起使用,將bert模型作爲句子向量使用很有意義。我們可以使用bert-as-service來完成這個目標。

安裝完bert-as-service以後,就可以利用bert模型將句子映射到固定長度的向量上。在終端中用一下命令啓動服務:

1
bert-serving-start -model_dir /media/ganjinzero/Code/bert/chinese_L-12_H-768_A-12 -num_worker=4

model_dir後面的參數是bert預訓練模型所在的文件夾。num_worker的數量應該取決於你的CPU/GPU數量。

這時就可以在Python中調用如下的命令:

1
2
3
from bert_serving.client import BertClient
bc = BertClient()
bc.encode(['一二三四五六七八', '今天您吃了嗎?'])

最好以列表的形式,而非單個字符串傳給bc.encode()參數,這樣程序運行的效率較高。

在啓動了bert-as-service服務之後,客戶端也可以從另一臺機器上連接 BERT 服務,只需要一個 IP 地址和端口號:

from bert_serving.client import ConcurrentBertClient
bc = ConcurrentBertClient(port=5555, port_out=5556)

res = bc.encode(query)
res_sum = res[0].tolist()

 

 

 

參考鏈接:

重點說了官網上的demo怎麼跑,講的水了點

https://zhuanlan.zhihu.com/p/50582974

重點將了兩個demo任務,該博主還有其他一系列將bert的文章可以一起看

https://www.jianshu.com/p/3d0bb34c488a

安裝部分講的比較詳細,後面講自己的數據怎麼跑

https://ganjinzero.github.io/2019/02/28/%E7%AE%80%E6%98%93%E6%95%99%E7%A8%8B%EF%BC%9A%E4%BD%BF%E7%94%A8Bert%E9%A2%84%E8%AE%AD%E7%BB%83%E6%A8%A1%E5%9E%8B%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB/

理論講解比較多

https://www.jiqizhixin.com/articles/2018-11-01-9

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章