• 深度
  • 行業
  • 行業
  • 互動
極客熱點 > 廠商 > 正文

谷歌 BERT 在環信 NLP 中的應用

Google 的 BERT 模型一經發布便點燃了 NLP 各界的歡騰,Google Brain 的資深研究科學家 Thang Luong 曾給出其“開啟了 NLP 新時代”的高度定義,國內外許多公司及開發者對其進行了研究及應用,本文作者及其團隊對 BERT 進行了應用探索。

隨著 Google 推出的 BERT 模型在多種 NLP 任務上取得 SOTA,NLP 技術真正進入了大規模應用階段,環信一直致力于幫助企業應用先進的AI技術提高生產效率,對于 BERT 的探索我們一直走在了行業前列。

谷歌 BERT 在環信 NLP 中的應用

訓練模型

訓練數據

訓練其他模型時我們已經標注了大量的訓練數據,主要把相似句對分為三類來標注:

不相似(0)、相關(0.5)、相似(1)

所以,訓練 BERT 模型時就可以“拿來主義”了。

模型修改

我們的主要應用點是相似度計算,期望模型返回的結果是一個概率(分值)而不是每個類別的概率。當然如果模型給的結果是每一個類別的概率,依然可以通過加權求和輸出一個分值,但這樣是不是又復雜了。

所以我們在官方代碼上做了點小的修改(將最后的 softmax 改為了 sigmoid)使得模型輸出是一個分值,這個分值也就是我們要的相似度了。

模型訓練

我們使用之前標注的數據集在 GeForce GTX 1070 上訓練(Fine-Tune),大概訓練了 8 個小時左右。

模型導出

模型訓練完會產生幾個 Checkpoint,這些 Checkpoint 是不能直接在工程中使用的,需要導出成 PB 文件,可以使用 Estimator 的 export_savedmodel 方法導出。

模型使用

通過調研,主要有兩種方式:

Java JNI:基于我們的 GPU 編譯[1]一個合適的 libtensorflow 和libtensorflow_jni_gpu(如果你的配置和官方一致就不需要自己編譯 了,自己編譯太多坑,這里有一份經過驗證的編譯環境配置[2])打成 jar 包并加入到工程依賴,使用 TensorFlow 提供的 Java API 加載 BERT 模型,在你的 Java 工程中使用[3]。

Docker + Nvidia-docker + Tensorflow Serving:需要一個合適的 Tensorlfow Serving 的 image,這里有一份官方做好的 image 列表[4],當然你也可以自己做一個。

這兩種方式各有優缺點,我們主要考慮以下幾個方面:

性能:我們對兩種方案做了實驗,Tensorflow Serving 是 C++ 寫成的服務,對于 batch 做過優化[6],性能優于 Java JNI。

多模型支持能力:方案 2 是支持多模型的,也就是多個模型共用一個 GPU,方案 1 不支持。

簡單好部署:兩種方案都不復雜。

與現有服務開發和運維體系兼容性:方案 1 更有優勢。

另外,方案 2 不僅支持多模型還支持多版本、模型的冷啟動和熱加載。綜合考慮下,我們使用了方案 2 進行模型部署。

效果對比

我們用一些典型客戶的數據構建了測試環境,抽取這些客戶的真實訪客數據,對現有模型和 BERT 模型做了對比實驗,BERT 模型的效果相比于對照模型提高了超過 10%。

調用圖

這是我們的調用時序圖:

谷歌 BERT 在環信 NLP 中的應用

FAQ服務->相似度計算服務:句子1和句子2相似度是多少?

相似度計算服務->TensorflowServing:句子1和句子2相似度是多少?

NoterightofTensorflowServing:bert模型預測

TensorflowServing->相似度計算服務:句子1和句子2相似度是xx

相似度計算服務->FAQ服務:句子1和句子2相似度是xx

這里抽象出一個相似度計算服務,是因為我們集成了多種相似度計算方法。

優化

后處理

這種模型的一個主要問題是:模型并不能完美解決所有問題,時不時總會有 bad case 出現。一旦模型上線,如果有問題我們無法及時解決(訓練模型和上線都會消耗大量時間)。為此我們增加了后處理,以便于我們的訓練師能夠及時干預,解決問題。

預訓練

BERT 預訓練的模型使用的數據來源于維基百科,與我們的主要應用場景不一致。我們可以猜想如果在 BERT 原有 Pre-Training 模型的基礎上,使用客服里的數據再次進行 Pre-Training 應該會更好,事實上我們也的確這樣做了。結論是影響不大,可能是數據不夠多,新的訓練實驗還在進行中。

數據標注

GPT 2.0 的出現再次證明了要想得到好的模型,不僅要有數據量,還要提高數據的品質。我們新的標注也在進行中,相信會對模型效果有所提高。

其他應用

我們在產品中還提供了意圖識別的服務,意圖識別服務要求必須能夠在線訓練。如果直接使用 BERT 來做意圖識別,很難滿足在線訓練的要求(BERT 訓練太慢了)。為此我們使用了簡單的模型來支持在線訓練,并把 Fine-tune 模型的倒數第二層作為特征,增強意圖識別的效果。

BERT 的近鄰

最近 Google 又攜 XLnet 屠榜了,從實驗效果看對比 BERT 確實有比較大的提升,我們也在關注中,實驗的小手已經蠢蠢欲動了。如果在我們的場景實驗效果好的話,相信我們環信的客戶很快便會體驗到。

作者簡介:董文濤,環信人工智能研發中心算法工程師,負責環信中文語義分析開放平臺和環信智能機器人的設計與研發。

下一篇:讓美人不老的秘密!這項非遺在抖音獲300萬點贊,把 “時裝秀” 搬到和珅府

(免責聲明:本網站內容主要來自原創、合作媒體供稿和第三方自媒體作者投稿,凡在本網站出現的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。 )