阿里妹導讀:爲何聊天機器人愈來愈普及?聊天機器人不只能夠節省時間,提高效率,還能一天24小時提供服務,更是能夠減小偏差。聊天機器人背後的問題原理是什麼?效率如何提高?就是今天咱們要了解的內容。本篇內容已被收錄於ACL2019,但願對你有所幫助。算法
在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榜單上的模型,有幾個結論:性能
因此咱們在設計的時候, 要求咱們的模型在更少的參數量、更簡潔的模型結構、更少的inference cost, 保證更容易訓練、更適合部署到生產環境, 在這幾個前提下, 咱們也但願能借鑑深層網絡的優點,讓咱們能夠很方便地加深咱們的網絡層次, 讓模型有更強的表達能力。學習
咱們經過對學術界提出的各類模型,諸如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個位置的輸出記做:是個全零的向量。
第一個Block的輸入爲, 也就是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.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三個類別上的準確率變化:
能夠獲得幾個分析結論:
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, 可讓模型更好地理解兩句話之間的語義關係。
在店小蜜中,自定義知識庫是由商家維護,咱們提供知識定位方案;在店小蜜沒法給出準確回覆時, 咱們會推薦相關知識,這裏的文本匹配模型,也主要用在店小蜜的這兩個業務模塊。咱們重點優化了7個大類行業模型(服飾、美妝洗護、鞋、電器、茶酒零食、母嬰、數碼)、一個大盤基礎模型和相關知識推薦模型。在保證覆蓋率的狀況下, 7類主營行業準確率從不到80%提高到89.5%,大盤基礎模型準確率提高到84%,知識推薦有效點擊從14%左右提高到19.5%。
店小蜜自定義知識庫後臺配置:
店小蜜旺旺諮詢示例:
咱們在工業場景下,實現了一個簡潔同時具備很強表達能力的模型框架,並在公開數據集和業務數據集上取得很好的結果。
原文連接 本文爲雲棲社區原創內容,未經容許不得轉載。