
阿裡妹導讀:為什麼聊天機器人越來越普及?聊天機器人不僅可以節省時間,提升效率,還能一天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的問答是個很基礎的部分,我們在這個領域,在文本分類和文本比對上進行了各方面的研究和實踐, 在本篇中重點對文本比對的基礎模型進行介紹。
「文本比對」是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, 可以在各類公開資料集、和我們自己的業務資料上都能得到最優的結果,如下圖所示。
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.試驗
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模型上。
最後, 我們是達摩院-智能服務-小蜜FAQ算法團隊, 如果想了解更多最新進展,歡迎郵件聯系 [email protected] ,也歡迎業界優秀青年加入我們,用AI重塑服務~
原文釋出時間為:2019-08-19
作者:空崖
本文來自雲栖社群合作夥伴“
阿裡技術”,了解相關資訊可以關注“
”。