99re6这里有精品热视频,久久综合九色欧美综合狠狠,国产精品久久久久久无毒不卡,av免费无插件在线观看,欧美放荡办公室videos

當(dāng)前位置:首頁(yè) >  科技 >  IT業(yè)界 >  正文

谷歌 BERT 在環(huán)信 NLP 中的應(yīng)用

 2019-07-10 17:35  來(lái)源: 互聯(lián)網(wǎng)   我來(lái)投稿 撤稿糾錯(cuò)

  阿里云優(yōu)惠券 先領(lǐng)券再下單

Google 的 BERT 模型一經(jīng)發(fā)布便點(diǎn)燃了 NLP 各界的歡騰,Google Brain 的資深研究科學(xué)家 Thang Luong 曾給出其“開(kāi)啟了 NLP 新時(shí)代”的高度定義,國(guó)內(nèi)外許多公司及開(kāi)發(fā)者對(duì)其進(jìn)行了研究及應(yīng)用,本文作者及其團(tuán)隊(duì)對(duì) BERT 進(jìn)行了應(yīng)用探索。

隨著 Google 推出的 BERT 模型在多種 NLP 任務(wù)上取得 SOTA,NLP 技術(shù)真正進(jìn)入了大規(guī)模應(yīng)用階段,環(huán)信一直致力于幫助企業(yè)應(yīng)用先進(jìn)的AI技術(shù)提高生產(chǎn)效率,對(duì)于 BERT 的探索我們一直走在了行業(yè)前列。

訓(xùn)練模型

訓(xùn)練數(shù)據(jù)

訓(xùn)練其他模型時(shí)我們已經(jīng)標(biāo)注了大量的訓(xùn)練數(shù)據(jù),主要把相似句對(duì)分為三類(lèi)來(lái)標(biāo)注:

不相似(0)、相關(guān)(0.5)、相似(1)

所以,訓(xùn)練 BERT 模型時(shí)就可以“拿來(lái)主義”了。

模型修改

我們的主要應(yīng)用點(diǎn)是相似度計(jì)算,期望模型返回的結(jié)果是一個(gè)概率(分值)而不是每個(gè)類(lèi)別的概率。當(dāng)然如果模型給的結(jié)果是每一個(gè)類(lèi)別的概率,依然可以通過(guò)加權(quán)求和輸出一個(gè)分值,但這樣是不是又復(fù)雜了。

所以我們?cè)诠俜酱a上做了點(diǎn)小的修改(將最后的 softmax 改為了 sigmoid)使得模型輸出是一個(gè)分值,這個(gè)分值也就是我們要的相似度了。

模型訓(xùn)練

我們使用之前標(biāo)注的數(shù)據(jù)集在 GeForce GTX 1070 上訓(xùn)練(Fine-Tune),大概訓(xùn)練了 8 個(gè)小時(shí)左右。

模型導(dǎo)出

模型訓(xùn)練完會(huì)產(chǎn)生幾個(gè) Checkpoint,這些 Checkpoint 是不能直接在工程中使用的,需要導(dǎo)出成 PB 文件,可以使用 Estimator 的 export_savedmodel 方法導(dǎo)出。

模型使用

通過(guò)調(diào)研,主要有兩種方式:

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

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

這兩種方式各有優(yōu)缺點(diǎn),我們主要考慮以下幾個(gè)方面:

性能:我們對(duì)兩種方案做了實(shí)驗(yàn),Tensorflow Serving 是 C++ 寫(xiě)成的服務(wù),對(duì)于 batch 做過(guò)優(yōu)化[6],性能優(yōu)于 Java JNI。

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

簡(jiǎn)單好部署:兩種方案都不復(fù)雜。

與現(xiàn)有服務(wù)開(kāi)發(fā)和運(yùn)維體系兼容性:方案 1 更有優(yōu)勢(shì)。

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

效果對(duì)比

我們用一些典型客戶(hù)的數(shù)據(jù)構(gòu)建了測(cè)試環(huán)境,抽取這些客戶(hù)的真實(shí)訪客數(shù)據(jù),對(duì)現(xiàn)有模型和 BERT 模型做了對(duì)比實(shí)驗(yàn),BERT 模型的效果相比于對(duì)照模型提高了超過(guò) 10%。

調(diào)用圖

這是我們的調(diào)用時(shí)序圖:

FAQ 服務(wù)->相似度計(jì)算服務(wù):句子 1 和 句子 2 相似度是多少 ?

相似度計(jì)算服務(wù)->TensorflowServing: 句子 1 和 句子 2 相似度是多少 ?

Note right of TensorflowServing: bert 模型預(yù)測(cè)

TensorflowServing->相似度計(jì)算服務(wù): 句子 1 和 句子 2 相似度是 xx

相似度計(jì)算服務(wù)->FAQ 服務(wù): 句子 1 和 句子 2 相似度是 xx

這里抽象出一個(gè)相似度計(jì)算服務(wù),是因?yàn)槲覀兗闪硕喾N相似度計(jì)算方法。

優(yōu)化

后處理

這種模型的一個(gè)主要問(wèn)題是:模型并不能完美解決所有問(wèn)題,時(shí)不時(shí)總會(huì)有 bad case 出現(xiàn)。一旦模型上線,如果有問(wèn)題我們無(wú)法及時(shí)解決(訓(xùn)練模型和上線都會(huì)消耗大量時(shí)間)。為此我們?cè)黾恿撕筇幚?,以便于我們的?xùn)練師能夠及時(shí)干預(yù),解決問(wèn)題。

預(yù)訓(xùn)練

BERT 預(yù)訓(xùn)練的模型使用的數(shù)據(jù)來(lái)源于*,與我們的主要應(yīng)用場(chǎng)景不一致。我們可以猜想如果在 BERT 原有 Pre-Training 模型的基礎(chǔ)上,使用客服里的數(shù)據(jù)再次進(jìn)行 Pre-Training 應(yīng)該會(huì)更好,事實(shí)上我們也的確這樣做了。結(jié)論是影響不大,可能是數(shù)據(jù)不夠多,新的訓(xùn)練實(shí)驗(yàn)還在進(jìn)行中。

數(shù)據(jù)標(biāo)注

GPT 2.0 的出現(xiàn)再次證明了要想得到好的模型,不僅要有數(shù)據(jù)量,還要提高數(shù)據(jù)的品質(zhì)。我們新的標(biāo)注也在進(jìn)行中,相信會(huì)對(duì)模型效果有所提高。

其他應(yīng)用

我們?cè)诋a(chǎn)品中還提供了意圖識(shí)別的服務(wù),意圖識(shí)別服務(wù)要求必須能夠在線訓(xùn)練。如果直接使用 BERT 來(lái)做意圖識(shí)別,很難滿(mǎn)足在線訓(xùn)練的要求(BERT 訓(xùn)練太慢了)。為此我們使用了簡(jiǎn)單的模型來(lái)支持在線訓(xùn)練,并把 Fine-tune 模型的倒數(shù)第二層作為特征,增強(qiáng)意圖識(shí)別的效果。

BERT 的近鄰

最近 Google 又?jǐn)y XLnet 屠榜了,從實(shí)驗(yàn)效果看對(duì)比 BERT 確實(shí)有比較大的提升,我們也在關(guān)注中,實(shí)驗(yàn)的小手已經(jīng)蠢蠢欲動(dòng)了。如果在我們的場(chǎng)景實(shí)驗(yàn)效果好的話,相信我們環(huán)信的客戶(hù)很快便會(huì)體驗(yàn)到。

[1]: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/java/README.md

[2]: https://www.tensorflow.org/install/source#tested_build_configurations

[3]: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/java/README.md

[4]: https://hub.docker.com/r/tensorflow/serving/tags

[5]: https://github.com/tensorflow/serving/blob/master/tensorflow_serving/g3doc/building_with_docker.md

[6]: https://github.com/tensorflow/serving/tree/master/tensorflow_serving/batching

[7]: https://www.tensorflow.org/tfx/serving/serving_config

[8]: https://arxiv.org/abs/1906.08237

作者簡(jiǎn)介:董文濤,環(huán)信人工智能研發(fā)中心算法工程師,負(fù)責(zé)環(huán)信中文語(yǔ)義分析開(kāi)放平臺(tái)和環(huán)信智能機(jī)器人的設(shè)計(jì)與研發(fā)。

申請(qǐng)創(chuàng)業(yè)報(bào)道,分享創(chuàng)業(yè)好點(diǎn)子。點(diǎn)擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

相關(guān)標(biāo)簽
google
科技公司

相關(guān)文章

熱門(mén)排行

信息推薦