是時候給你的產品配一個AI問答助手了!
本文由雲+社區發表
| 導語 問答系統是信息檢索的一種高級形式,能夠更加準確地理解用戶用自然語言提出的問題,並通過檢索語料庫、知識圖譜或問答知識庫返回簡潔、準確的匹配答案。相較於搜索引擎,問答系統能更好地理解用戶提問的真實意圖, 進一步能更有效地滿足用戶的信息需求。問答系統是目前人工智能和自然語言處理領域中一個倍受關註並具有廣泛發展前景的研究方向。
一、引言
? 問答系統處理的對象主要包括用戶的問題以及答案。根據問題所屬的知識領域,問答系統可分為面向限定域的問答系統、面向開放域的問答系統、以及面向常用問題集(Frequently Asked Questions, FAQ)的問答系統。依據答案來源,問答系統可分為基於結構化數據的問答系統如KBQA、基於文本的問答系統如機器閱讀理解、以及基於問答對的問答系統如FAQ問答。此外,按照答案的反饋機制劃分,問答系統還可以分為基於檢索式的問答系統和基於生成式的問答系統。
? 本文主要闡述FAQBot檢索型問答系統的相關研究和處理框架,以及深度學習在其中的應用。FAQ檢索型問答是根據用戶的新Query去FAQ知識庫找到最合適的答案並反饋給用戶。如圖所示:
其中,Qi是知識庫裏的標準問,Ai是標準問對應的答案。
具體處理流程為:
- 候選集離線建好索引。采用Lucene引擎,為數萬個相似問集合建立字級別倒排索引。Lucene引擎的性能能夠將召回時間控制在毫秒級別,大大減輕後續模塊的計算壓力;
- 線上收到用戶 query 後,初步召回一批候選集作為粗排結果傳入下一模塊進行進一步精確排序;
- 利用matching模型計算用戶query和FAQ知識庫中問題或答案的匹配程度;
- 利用ranking 模型對候選集做 rerank 並返回 topk個候選答案。
? 可以看出,FAQ問答系統的核心任務可以抽象為文本匹配任務。傳統文本匹配方法如信息檢索中的BM25,向量空間模型VSM等方法,主要解決字面相似度問題。然而由於中文含義的豐富性,通常很難直接根據關鍵字匹配或者基於機器學習的淺層模型來確定兩個句子之間的語義相似度。近幾年,利用神經網絡,尤其是深度學習模型學習文本中深層的語義特征,對文本做語義表示後進行語義匹配的方法開始被提出並應用於檢索式問答系統。基於深度學習的模型一方面能夠節省人工提取特征的大量人力物力。此外,相比於傳統方法,深度文本匹配模型能夠從大量的樣本中自動提取出詞語之間的關系,並能結合短語匹配中的結構信息和文本匹配的層次化特性,發掘傳統模型很難發掘的隱含在大量數據中含義不明顯的特征,更精細地描述文本匹配問題。
二、深度學習文本匹配
? FAQ問答系統一般有兩種解決思路,一種是相似問題匹配,即對比用戶問題與現有FAQ知識庫中問題的相似度,返回用戶問題對應的最準確的答案,這種思路類似於text paraphrase;另一種是問題答案對匹配,即對比用戶問題與FAQ知識庫中答案的匹配度,返回用戶問題對應的最準確的答案,這種思路為答案選擇,即QA匹配。這兩個類型相通的地方在於都可以看作文本語義匹配,很多模型能同時在兩個任務上都得到很好的效果,區別在於QA匹配存在問題與答案不同質的問題。
? 下面總結一些基於深度學習的文本匹配工作,希望能夠拋磚引玉,如有遺漏或錯誤,歡迎補充或指出。
2.1 模型框架
? 概括來講,深度語義匹配模型可以分為兩大類,分別是representation-based method 和 interaction-based method。
1) Represention-based Method
框架圖如下:
這類算法首先將待匹配的兩個對象通過深度學習模型進行表示,之後計算這兩個表示之間的相似度便可輸出兩個對象的匹配度。這種方式下,更加側重對表示層的構建,使其盡可能充分地將待匹配的兩個對象都轉換成等長的語義表示向量。然後在兩個對象對應的兩個語義表示向量基礎上,進行匹配度的計算。針對匹配度函數f(x,y)的計算,通常有兩種方法,如下圖所示:一種是通過相似度度量函數進行計算,實際使用過程中最常用的就是 cosine 函數,這種方式簡單高效,並且得分區間可控意義明確;另一種方法是將兩個向量再接一個多層感知器網絡(MLP),通過數據去訓練擬合出一個匹配度得分,更加靈活擬合能力更強,但對訓練的要求也更高。
Represention-based Extended
上述的representation-based method存在的問題是直接基於句子的表示太粗糙,無法準確進行文本匹配任務。受信息檢索領域的啟發,結合主題級別和單詞級別的匹配信息通常可以獲得更好的表現。於是進一步對句子表示進行擴展,加入細粒度匹配信息。框架圖如下:
2) Interaction-based Method
框架圖如下:
基於交互的方法是通過Interaction來對文本相似性建模。該方式更強調待匹配的兩個句子得到更充分的交互,以及交互後的匹配。在表示層不會將句子轉換成一個整體表示向量,一般情況下會保留和詞位置相對應的一組表示向量。首先基於表示層采用DNN或直接由word embedding得到的句子表示,和詞位置對應的每個向量體現了以本詞語為核心的一定的全局信息;然後對兩個句子按詞對應交互,由此構建兩段文本之間的 matching pattern,這裏面包括了更細致更局部的文本交互信息;基於該匹配矩陣,可以進一步使用DNN等來提取更高層次的匹配特征,最後計算得到最終匹配得分。Interaction-based 方法匹配建模更加細致、充分,一般來說效果更好,但計算成本增加,更加適合一些效果精度要求高但對計算性能要求不高的場景。
? 下面總結了不同類型的深度學習文本匹配模型。可以看出,深度文本匹配現有工作很多,本文將對近幾年的部分工作進行詳細介紹,其他可參考對應文獻進行深入閱讀。
- representation-based:DSSM[1]; CDSSM[2]; ARC I[3]; CNTN[4]; LSTM-RNN[5]
- representation-based extension:MultiGranCNN[6]; MV-LSTM[7]
- interaction-based:ARC II[8]; MatchPyramid[9]; Match-SRNN[10]; DeepMatch[11]; ABCNN[12]; QA-LSTM/CNN-attention[13,14]; AP[15]; AICNN[16]; MVFNN[17]; BiMPM[18]; DQI[22]; DIIN[23]
2.2 模型介紹
2.2.1 ABCNN[12]
首先介紹BCNN,它是ABCNN模型的基礎,即未添加Attention的模型。模型結構如圖所示:
輸入層:將輸入句子進行padding後轉化成詞向量即可; 卷積層:對句子表示進行卷積,使用wide conv的方式; pooling層:論文中使用了兩種pooling方式,一種是最後一個pooling層為all-ap,還有一種是中間pooling層為w-ap。區別就是池化時的窗口大小不同; 輸出層:接logistic 回歸層做2分類。
ABCNN是在BCNN的基礎上加了兩種attention機制。模型結果如下圖:
(1)在輸入層加入attention
其原理為將輸入拓展成雙通道。新添加的通道是attention feature map,即上圖中的藍色部分。首先計算attention matrix A,其每個元素Aij代表句子1中第i個單詞對句子二中第j個單詞的match_score,這裏使用了Euclidean距離計算。然後再分別計算兩個句子的attention feature map。使用兩個矩陣W0,W1分別和A還有 A的轉置相乘,得到與原本feature尺寸相同的feature map。W0和W1都是模型參數,可以使用相同的W,即共享兩個矩陣。這樣我們就將原始的輸入拓展成了兩個通道。
(2)在pooling層加入attention
Attention matrix A的計算方法與上述相同,得到A後需要為兩個句子分別計算attention權重向量,如上圖中的兩個虛線部分col-wise sum和row-wise sum。這兩個向量中的每個元素分別代表了相應單詞在做Average Pooling時的權重。相當於pooling不再是簡單的Average Pooling,而是根據計算出的Attention權重向量得到的pooling。
2.2.2LSTM/CNN,attention[13,14]
給定一個(q,a)pair,q是問題,a是候選答案。首先得到它們的詞向量,再使用biLSTM進行encoder,生成問題和答案的分布式表示,然後利用余弦相似度來衡量它們的距離。訓練目標是hinge loss。
在biLSTM表示輸出的基礎上進一步使用CNN,CNN可以獲取biLSTM輸出的向量之間的局部信息。從而給出問題和答案的更多復合表示。
當biLSTM模型在問題和答案上長距離傳播依賴關系時,隱藏向量的固定寬度成為瓶頸。通過動態調整問題答案的更多信息部分,可以使用註意力機制來緩解這種弱點。在max/mean pooling前,每個biLSTM輸出向量將乘以softmax權重,該權重由biLSTM的問題嵌入得到。
2.2.3 Attentive Pooling Networks[15]
? QA_LSTM with attention中attention的設計是通過問題對答案的影響進行特征加權,但是它忽略了答案對問題的影響。Attentive pooling networks同時將attention應用到問題和答案,提高算法的準確率。通過同時學習兩種輸入的表示以及它們之間的相似性測量,其創新點在於將Q和A這兩個輸入通過參數矩陣U投射到一個共同的表示空間,用Q和A的representation構造了一個矩陣G,分別對G的row和column做max pooling, 這樣就能分別能得到Q和A的attention vector。AP_BILSTM模型框架圖如下:
AP_BILSTM模型的設計首先將問題和答案經過BILSTM抽取特征,然後通過兩者的特征計算soft alignment,得到的G矩陣表示了問題和答案相互作用的結果。對該矩陣的列取最大,即為答案對問題的重要性得分,同理對該矩陣行取最大即為問題對答案的重要性得分。這兩個向量再作為attention向量分別和問題和答案表示相乘後得到問題和答案新的表示,最後再做匹配。
2.2.4 AICNN[16]
之前關於答案選擇的研究通常忽略了數據中普遍存在的冗余和噪聲問題。 在本文中,設計一種新穎的註意力交互式神經網絡(AI-NN),以專註於那些有助於回答選擇的文本片段。 問題答案的表示首先通過卷積神經網絡(CNN)或其他神經網絡架構來學習。然後AI-NN學習兩個文本的每個配對片段的相互作用。 之後使用逐行和逐列池化來收集交互信息。之後采用註意機制來衡量每個細分的重要性,並結合相互作用來獲得問答的固定長度表示。 模型框架圖如下:
2.2.5 MVFNN[17]
? 上述基於神經網絡的方法通過計算註意力來考慮信息的幾個不同方面。 這些不同類型的註意力總是簡單地總結並且可以被視為“單一視圖”,不能從多個方面來審視問題和候選答案,導致嚴重的信息丟失。 要克服這個問題,此模型提出了一種多視圖融合神經網絡,其中每個關註組件生成QA對的不同“視圖”,並且融合QA本身的特征表示以形成更整體的表示。模型框架圖如下:
對於一個問題,可能會有一堆視圖來模擬其相應的答案。 在此模型中,根據直覺構建了四個視圖。 這四個視圖被命名為查詢類型視圖,查詢主動詞視圖,查詢語義視圖和co-attention視圖。最後使用fusion RNN模型來對這些視圖進行融合。通過不同視圖的融合,能對兩個對象進行更準確的建模。
2.2.6 BiMPM[18]
針對基於交互這一類方法,一般是先對兩個句子的單元相互匹配,之後再聚集為一個向量後做匹配。這種方式可以捕捉到兩個句子之間的交互特征,但是之前的方式只是基於詞級別的匹配但是忽略了其他層級的信息。此外,匹配只是基於一個方向忽略了相反的方向。一種雙向的多角度匹配模型bilateral multi-perspective matching(BiMPM)解決了這方面的不足。模型框架如下圖:
模型自下而上一共包含五層,分別為單詞表示層、上下文表示層、匹配層、聚合層和預測層,其中匹配層為模型的核心,共提出了四種匹配策略,這裏的匹配可以看成是attention機制。
單詞表示層:使用GloVe模型訓練向量,對字符embedding進行隨機初始化,單詞中的字符組成單詞的向量表示作為LSTM網絡的輸入。
上下文表示層:使用BiLSTM對p和q進行表示。
匹配層:模型的核心層,包含四種匹配策略,分別是:Full-Matching、Maxpooling-Matching、Attentive-Matching和 Max-Attentive-Matching。四種匹配策略如下圖:
聚合層:利用BiLSTM對匹配層的輸出向量進行處理,取得p、q前向和後向最後一個time step的輸出進行連接後輸入到預測層。
預測層:softmax層,softmax函數分類。
? 上述是對近幾年部分深度文本匹配模型的總結,接下來則介紹基於深度模型的FAQBot。
三、基於深度學習的FAQBot實現
3.1 模型化流程
3.2 數據獲取及構造
3.2.1 數據獲取
? 對於有大量問答記錄的場景例如智能客服,這些記錄裏面有很多高頻的知識點(知識點包括問題和答案)。這些高頻的知識點對應的問法通常並不唯一。即知識庫的結構為一個問題集合對應同一個答案。針對FAQ數據有以下三種數據類型:
- 標準問q:FAQ中問題的標準用戶query
- 答案A: FAQ中標準問對應的的標準回答
- 相似問q1,q2...: 跟標準問語義相似可用同一答案回答的query
其中,標準問q、對應答案A以及該標準問q對應的所有相似問q1,q2,...,一起組成一個知識點。一個知識點的樣例見下圖:
3.2.2 數據構造
數據構造包含了兩個方面:
(1)訓練集測試集構造
測試集:將相似問中的第一條相似問q1作為query,從FAQ知識庫的所有知識點中通過Lucene召回30個知識點作為候選集
訓練集:包含兩部分,一部分是正例的構造,另一部分是負例的構造,這兩部分數據的構造方式將直接影響到最終的效果。在正例的構造中,因為每個知識點的第一個相似問是作為測試集中出現的,所以在構造訓練集的時候排除掉所有知識點中的第一條相似問q1。這樣的話,有多於2個相似問的知識點還有多於的其他相似問可以用來構造訓練集。將這些識點中的標準問和從相似問的第二條開始(即[q2,q3,...,qn])可以按照不同方式構造出正例和負例。
訓練集正例的構造:去除所有知識點中的第一條相似問q1,其他相似問及標準問兩兩組合成正例pair對;對於相似問多的知識點進行剪切。
訓練集負例的構造的方式包括:
- 按Jaccard距離召回;
- 按Lucene召回;
- 從其他知識點中隨機選擇;
- 按照正例中各問題出現的比例從其他知識點中采樣選擇;
- 每個句子和句子中的名詞/動詞構成pair對;
- 針對知識點分布不均衡的問題,對相似問很多的知識點進行相似問剪切。
(2)數據增強策略
由於深度學習需要較多的數據,為了增強數據,我們采用了以下策略:
- 交換兩個句子之間的順序;
- 對句子進行分詞,重新組合生成新的句子;
- 打亂句子的順序,隨機抽取句子。
3.3 模型建立
3.3.1 模型框架
? 基本框架一般都是將待匹配的兩個句子分別使用兩個encoder來獲取對應context信息,然後將二者的context信息進行匹配,得到匹配後的特征信息。也可以在匹配之後的特征後面加上一些其他的傳統文本特征,將所有這些特征進行concat。最後接上softmax層,做最終的分類。模型的框架如下圖所示:
3.3.2 模型建立及叠代優化
Embedding層:使用word2vec和fasttext訓練詞向量和字符向量。
Encoder層:卷積具有局部特征提取的功能, 所以可用 CNN 來提取句子中類似 n-gram 的關鍵信息,考慮文本的上下文信息。於是我們采用textCNN[19]來對句子進行編碼表示,encoder過程見下圖:
Matching層:在得到兩個句子的表示後,要針對兩個句子的表示進行matching操作。可以根據需要構造出很多種類型的matching方式如下圖[20],我們采用相對比較簡單的element-wise相加和相乘的方式來進行matching。
join層:在matching層之後得到的兩個句子的共同表示之後,進一步引入額外的傳統特征進行join操作,類似於下圖[21]。
引入interaction:上述步驟對兩個句子encoder時沒有考慮兩個句子之間的關聯。於是進一步引入更細致更局部的句子交互信息,從而能捕捉到兩個句子之間的交互特征,根據交互得到的矩陣獲取兩個句子新的表示。如圖:
引入attention機制:采用註意機制使用權重向量來衡量句子不同部分重要性的不同。attention的計算主要思想沿用了AICNN和ABCNN中的幾種attention,分別是feature的attention,interaction後新的表示和句子原表示之間的attention。
四、總結與展望
4.1 數據層面
- 建立更加合理的知識庫:每個知識點只包含一個意圖,且知識點之間沒有交叉,歧義,冗余等容易造成混淆的因素
- 標註:為每個FAQ積累一定數量的有代表性的相似問
- 後期的持續維護:包括新FAQ發現,原FAQ的合並、拆分、糾正等
4.2 模型層面
- 進一步捕捉syntactic level和semantic level的知識如語義角色標註(SRL, semantic role labelling)和詞性標註(POS, part of speech tagging)等,引入到文本的表示之中,提高文本語義匹配的效果
- 目前大部分檢索行問答的工作做的是問題和問題匹配,或是問題和答案匹配。後續可以同時引入問題和答案的信息進行建模,如圖:
參考文獻
[1] Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]// ACM International Conference on Conference on Information & Knowledge Management. ACM, 2013:2333-2338.
[2] Shen Y, He X, Gao J, et al. A Latent Semantic Model with Convolutional-Pooling Structure for Information Retrieval[C]// Acm International Conference on Conference on Information & Knowledge Management. ACM, 2014:101-110.
[3] Hu B, Lu Z, Li H, et al. Convolutional Neural Network Architectures for Matching Natural Language Sentences[J]. Advances in Neural Information Processing Systems, 2015, 3:2042-2050.
[4] Qiu X, Huang X. Convolutional neural tensor network architecture for community-based question answering[C]// International Conference on Artificial Intelligence. AAAI Press, 2015:1305-1311.
[5] Palangi H, Deng L, Shen Y, et al. Deep Sentence Embedding Using Long Short-Term Memory Networks: Analysis and Application to Information Retrieval[J]. IEEE/ACM Transactions on Audio Speech & Language Processing, 2016, 24(4):694-707.
[6] Yin W, Schütze H. MultiGranCNN: An Architecture for General Matching of Text Chunks on Multiple Levels of Granularity[C]// Meeting of the Association for Computational Linguistics and the, International Joint Conference on Natural Language Processing. 2015:63-73.
[7] Wan S, Lan Y, Guo J, et al. A Deep Architecture for Semantic Matching with Multiple Positional Sentence Representations[J]. 2015:2835-2841.
[8] Hu B, Lu Z, Li H, et al. Convolutional Neural Network Architectures for Matching Natural Language Sentences[J]. Advances in Neural Information Processing Systems, 2015, 3:2042-2050.
[9] Pang L, Lan Y, Guo J, et al. Text Matching as Image Recognition[J]. 2016.
[10] Wan S, Lan Y, Xu J, et al. Match-SRNN: Modeling the Recursive Matching Structure with Spatial RNN[J]. Computers & Graphics, 2016, 28(5):731-745.
[11] Lu Z, Li H. A deep architecture for matching short texts[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2013:1367-1375.
[12] Yin W, Schütze H, Xiang B, et al. ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs[J]. Computer Science, 2015.
[13] Tan M, Santos C D, Xiang B, et al. LSTM-based Deep Learning Models for Non-factoid Answer Selection[J]. Computer Science, 2015.
[14] Tan M, Santos C D, Xiang B, et al. Improved Representation Learning for Question Answer Matching[C]// Meeting of the Association for Computational Linguistics. 2016:464-473.
[15] Santos C D, Tan M, Xiang B, et al. Attentive Pooling Networks[J]. 2016.
[16] X Zhang , S Li , L Sha , H Wang. Attentive Interactive Neural Networks for Answer Selection in Community Question Answering[C]// International Conference on Artificial Intelligence.
[17] L Sha , X Zhang , F Qian , B Chang , Z Sui. A Multi-View Fusion Neural Network for Answer Selection[C]// International Conference on Artificial Intelligence.
[18] Wang Z, Hamza W, Florian R. Bilateral Multi-Perspective Matching for Natural Language Sentences[C]// Twenty-Sixth International Joint Conference on Artificial Intelligence. 2017:4144-4150.
[19] Kim Y. Convolutional Neural Networks for Sentence Classification[J]. Eprint Arxiv, 2014.
[20] Wang S, Jiang J. A Compare-Aggregate Model for Matching Text Sequences[J]. 2016.
[21] Severyn A, Moschitti A. Learning to Rank Short Text Pairs with Convolutional Deep Neural Networks[C]// The International ACM SIGIR Conference. ACM, 2015:373-382.
[22] Xiaodong Zhang, Xu Sun, Houfeng Wang. Duplicate Question Identification by Integrating FrameNet with Neural Networks[C]//In the Thirty-Second AAAI Conference on Artificial Intelligence (AAAI-18)
[23] Gong Y, Luo H, Zhang J. Natural Language Inference over Interaction Space[J]. 2018.
此文已由作者授權騰訊雲+社區在各渠道發布
獲取更多新鮮技術幹貨,可以關註我們騰訊雲技術社區-雲加社區官方號及知乎機構號
是時候給你的產品配一個AI問答助手了!