揭祕!機器人和你對話時在想什麼?

阿里妹導讀:爲何聊天機器人愈來愈普及?聊天機器人不只能夠節省時間,提高效率,還能一天24小時提供服務,更是能夠減小偏差。聊天機器人背後的問題原理是什麼?效率如何提高?就是今天咱們要了解的內容。本篇內容已被收錄於ACL2019,但願對你有所幫助。算法

1.背景

在Chatbot總體解決方案中, 既有面向任務型的taskbot(諸如訂機票、查天氣等), 也有更偏向知識問答的qabot,而在客服場景下,最基礎的類型也是這類。若是從知識庫的形式來區分qabot,能夠有 基於「文檔」的doc-qabot、基於「知識圖譜」的kg-qabot、基於「問答對」的faq-qabot等。咱們這裏重點關注的是最後一種faq-qabot(也簡稱faqbot), 這種形式的方案對用戶而言易理解易維護,也是目前chatbot解決方案中不可缺的一部分。網絡

faqbot就是將query匹配到一條「問答對」上,從技術的角度看,有兩大類方法, 一是text classification, 二是text matching,它們各有適合的場景,前者適合諮詢量大且比較穩定的faq,後者適合長尾或時常變化的faq。框架

店小蜜是咱們提供給阿里平臺商家的一套智能客服解決方案。在店小蜜中, 基於Faq的問答是個很基礎的部分,咱們在這個領域,在文本分類和文本匹配上進行了各方面的研究和實踐, 在本篇中重點對文本匹配的基礎模型進行介紹。ide

「文本匹配」是NLP方向的一個重要研究領域,有着悠久的歷史,不少NLP任務都與此相關,好比 natual language inference、parahparase identification、answer selection等,均可以歸結成「文本匹配」問題。函數

有不少人研究這個課題, 當前優秀的匹配模型有哪些?這些模型有什麼異同?這些模型存在哪些問題?這些都是咱們展開這個項目須要先分析和回答的問題。咱們經過分析SNLI榜單上的模型,有幾個結論:性能

  • 優秀的匹配模型均可以概括成embed-encode-interacte-aggregate-predict五個步驟, interact部分主要是作inter-sentence alignment;
  • 在interact步驟中的對齊操做,設計會比較複雜;並且不少模型只有一次interact步驟;
  • 也有些更深的模型結構,會作屢次的inter-sentence alignment, 但由於較深的模型面臨着梯度消失、難以訓練的問題;
  • 不論是參數量仍是響應時間,支撐像店小蜜這樣對實時性能要求比較高的場景,都不是很理想。

因此咱們在設計的時候, 要求咱們的模型在更少的參數量、更簡潔的模型結構、更少的inference cost, 保證更容易訓練、更適合部署到生產環境, 在這幾個前提下, 咱們也但願能借鑑深層網絡的優點,讓咱們能夠很方便地加深咱們的網絡層次, 讓模型有更強的表達能力。學習

2.模型

咱們經過對學術界提出的各類模型,諸如Decomposable Attention Model、CAFE、DIIN等, 概括總結,一個匹配模型的總體框架基本上有Embedding Layer、Encoder Layer、Interaction Layer、Aggregation Layer和Prediction Layer五層, 只是每一層都有不一樣的設計,咱們實現一種可插拔的匹配模型框架, 每層都有一些典型的實現。優化

爲了加強咱們模型框架的表達能力, 咱們將Encoder+Interaction Layer打包成一個Block, 經過堆疊多個Block, 經過屢次的inter-sentence alignment,可讓咱們的模型更充分地理解兩句文本之間的匹配關係。編碼

咱們基於這種框架,經過大量試驗獲得一個模型結構RE2, 能夠在各種公開數據集、和咱們本身的業務數據上都能獲得最優的結果,以下圖所示。spa

RE2包括有N個Block, 多個Block的參數徹底獨立。在每一個Block內有一個encoder產出contextual representation, 而後將encoder的輸入和輸出拼在一塊兒,作inter-sentence alignment,以後經過fusion獲得Block的輸出。第i個Block的輸出,會經過Augmented Residual Connection的方式與這個Block的輸入進行融合, 做爲第i+1個Block的輸入。

下面咱們詳細介紹每一個部分:

2.1 Augmented Residual Connection

連續的Block之間用Augmented Residual Connection來鏈接, 咱們將第n個Block第i個位置的輸出記做:5是個全零的向量。

第一個Block的輸入爲6, 也就是Embeddling Layer的輸出, 在Augmented Residual Connection中,第n個block的輸入爲:

其中 [;] 表示拼接操做;

在interaction layer的輸入中,存在三種信息, 一是original point-wise information, 在這裏就是原始的詞向量,在每一個Block中都會使用這份信息;二是經過encoder編碼獲得的contextual information;三是以前兩層Block通過對齊加工過的信息。這三份信息,對最終的結果都有不可替代的做用, 在試驗分析中會展顯這一點。在咱們這裏encoder使用兩層CNN(SAME padding)。

2.2 Alignment Layer

這塊咱們使用Decomposable Attention Model(Parikh et al., 2016)的對齊機制:

2.3 Fusion Layer

這塊咱們參考CAFE中對concat、multiply、sub三個操做分別經過FM計算三個scalar特徵值, 咱們針對這三個操做, 用獨立的三個全鏈接網絡計算三個vector特徵, 以後將三個vector拼接並用進行projection。

2.4 Prediction Layer

輸出層就比較常規,針對文本類似度匹配這類任務, 咱們使用對稱的形式:

針對文本蘊含、問答匹配這類任務, 咱們使用

其中H表示多層全聯接網絡;

3.試驗

3.1 數據集

要驗證模型效果,咱們選擇三類NLP任務, Nature Language Inference、Paraphrase Identification、Question Answering, 選用SNLI、MultiNLI、SciTail、Quora Question Pair、Wikiqa這樣幾份公開數據集。評估指標,前兩個任務選用Acc, 後一個任務選擇MAP/MRR。

3.2 實現細節

咱們用Tensorflow實現模型, 用Nvidia P100 GPU 訓練模型, 英文數據集使用NLTK分詞並統一轉小寫、去除全部標點。序列長度不作限制,每一個batch中的序列統一pad到這個batch中最長序列長度,詞向量選用840B-300d Glove向量,在訓練過程當中fix住,全部OOV詞初始化爲0向量,訓練中不更新這些參數。全部其餘參數使用He initialization, 並用Weight normalization歸一化;每一個卷積層或全聯接層以後,有dropout層,keep rate設爲0.8;輸出層是兩層前饋網絡;Block數量在1-5之間調參。

在這幾份公開數據集上, 隱層大小設爲150;激活函數使用GeLU激活函數。優化算法選用Adam,學習率先線性warmup而後指數方式衰減,初始學習率在1e-4~ 3e-3之間調參;batch size在64~512之間調參。

3.3 結果

咱們在這幾份公開數據集上,均取得state-of-art的結果(不使用BERT的狀況下):

一樣這個模型性能上也有很良好的表現,參數量和inference speed都有很強的競爭力, 從而能夠在咱們店小蜜這樣的工業場景中獲得普遍應用,給咱們匹配準確率這樣的業務指標上帶來顯著的提高。

3.4 結果分析

3.4.1 Ablation study

咱們構造了四個baseline模型, 分別是:

1) w/o enc-in: alignment layer只使用encoder的輸出;
2) w/o residual:去除全部block之間的residual 鏈接;
3) w/o enc-out: 去除全部encoder,alignment layer只使用block的輸入;
4) highway: 使用highway 網絡融合encoder的輸入和輸出,而不是直接拼接。

在SNLI上獲得的結果如圖所示。經過1)3)和完整模型的對比, 咱們發現alignment layer只使用encoder的輸出或只使用encoder的輸入,都會獲得不好的結果,說明原始的詞向量信息、以前Block產出的align信息、當前Block中encoder產出的上下文信息,對最終的結果都是缺一不可的。經過2)和完整模型的對比,咱們發現Block之間residual鏈接發揮了做用;而4)和完整模型的對比顯示,咱們直接拼接的方式是個更優解。

3.4.2 Block數量的影響
如上圖所示,經過Augmented Residual Connection鏈接的網絡,更容易在深層網絡中生效,可以支撐更深的網絡層次,而其餘baseline 模型,在Block數量大於3時, 效果會有很明顯的降低,並不能支撐更深層模型的應用。

3.4.3 Occlusion sensitivity

前面講過, 在alignment layer的輸入中,實際上是三類信息的拼接:原始的詞向量信息、以前Block產出的align信息、當前Block中encoder產出的上下文信息, 爲了更好地理解這三份信息對最終結果的影響,咱們參照機器視覺中相關工做, 進行了Occlusion sensitivity的分析。咱們在SNLI-dev數據上,使用包含3個Block的一個RE2模型,分別將某層Block中alignment layer輸入特徵的某部分mask成0向量,而後觀察在entailment、neutral 、 contradiction三個類別上的準確率變化:

能夠獲得幾個分析結論:

  • mask原始的詞向量信息, 會對neutral和contradiction類的識別帶來比較大的損失, 說明原始詞向量信息在判斷兩個句子差別性上發揮着重要做用;
  • mask以前Block產出的alignment信息, 會對neutral和contradiction類帶來比較大的影響,尤爲是最後一層Block的這部分信息對最終的結果影響最大, 說明residual connection使得當前Block能更準確地關注應該關注的部分;
  • mask住Encoder的輸出結果, 對entailment的影響更大,由於encoder是對phrase-level 的語義進行建模, encoder的產出更有助於entailment的判斷;

3.4.4 Case study

咱們選了一個具體的case分析多層Block的做用。

這個case中, 兩句話分別是「A green bike is parked next to a door」「The bike is chained to the door」。在第一層Block中,是詞彙/短語級別的對齊, 而「parked next to」和「chained to」之間只有很弱的鏈接,而在第三層Block中, 能夠看到二者已經對齊, 從而模型能夠根據「parked next to」和「chained to」之間的關係,對兩句話總體的語義關係作出判斷。從中也能夠看到,隨着Block的遞增, 每層Block的alignment關注的信息都隨之進行着調整,經過不止一次的alignment, 可讓模型更好地理解兩句話之間的語義關係。

4. 業務結果

在店小蜜中,自定義知識庫是由商家維護,咱們提供知識定位方案;在店小蜜沒法給出準確回覆時, 咱們會推薦相關知識,這裏的文本匹配模型,也主要用在店小蜜的這兩個業務模塊。咱們重點優化了7個大類行業模型(服飾、美妝洗護、鞋、電器、茶酒零食、母嬰、數碼)、一個大盤基礎模型和相關知識推薦模型。在保證覆蓋率的狀況下, 7類主營行業準確率從不到80%提高到89.5%,大盤基礎模型準確率提高到84%,知識推薦有效點擊從14%左右提高到19.5%。

店小蜜自定義知識庫後臺配置:

店小蜜旺旺諮詢示例:

總結展望

咱們在工業場景下,實現了一個簡潔同時具備很強表達能力的模型框架,並在公開數據集和業務數據集上取得很好的結果。

  • 這種「通用」的語義匹配模型,已經對當前的業務帶來很大的提高, 可是,針對店小蜜這樣的業務場景, 是否在不一樣行業不一樣場景下能夠獲得更合適更有特點的解決方案,好比融合進商品知識、活動知識等外部知識作文本匹配。
  • 怎麼進一步完善FaqBot的技術體系,好比在文本分類、Fewshot分類等方向,也是咱們團隊的一個重點工做。
  • 隨着BERT模型的出現,NLP各項任務都達到了新的SOTA。然而BERT過於龐大,對計算資源的需求很高,所以咱們想利用Teacher-Student框架將BERT模型的能力遷移到RE2模型上。


原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索