對話機器人平臺智能問答技術拆解
筆者對智能問答機器人技術進行了分析,從實際場景切入,闡釋其功能邏輯。
個人計算機的發展史要追溯到上個世紀90年代末,人們用鍵盤和鼠標向購物網站發送請求,購買心儀的商品,隨后的十多年間,互聯網飛速發展,智能手機應運而生,人們開始習慣用觸摸的方式更加靈活地操縱手機、Pad等設備,可與之進行交互的產品也穩步落地在數以百萬計APP中,這些產品都是基于GUI (Graphical User Interface)設計的。
鑒于人類向外界發送指令的方式除了用手做(以鍵盤鼠標、觸摸為代表),還可以用嘴說,因此語音控制設備進行人機交互也開始進入人類探索的領域。
然而,讓機器聽懂人類的語言是一件十分困難的事,近幾年隨著深度學習的崛起,語音識別和自然語言理解的快速發展,為這一交互模式的流行創造了可能,相信不久的將來,人類會逐步邁入CUI (Conversational User Interface)時代。
智能問答簡介
在我們的生活中,智能對話被廣泛應用在客服、營銷等重復性對話頻繁發生的場景,或者作為GUI的補充,為用戶提供高效、個性化的體驗,甚至是直接集成到智能音箱、智能家居、智能導航等硬件設備中,獨立承載人機交互的重擔。
按照對話的智能程度,我們可以把智能問答分為5個階段:單輪問答、多輪會話、意圖推理、個性化以及情感互動。
而從問答的種類來講,我們又可以將其分為Community QA、KBQA、TableQA、PassageQA、VQA這5大類。
圖1 智能問答領域分類[Duan 2017]
- KBQA:基于知識圖譜的問答,所有的知識被組織成三元組的形式,比如<姚明、妻子、葉莉>這個三元組是知識圖譜里的一條知識,當用戶詢問“姚明的妻子是誰”的時候,問答模型會將答案定位到“葉莉”;
- TableQA:知識是用表格的形式組織的,商家的產品信息用表格的形式存儲,當用戶詢問關于某個產品的具體屬性時,問答模型可以把用戶的自然語言轉化成SQL查詢語句,直接從數據庫里定位答案;
- PassageQA:閱讀理解,它是基于文檔的問答,我們的問答模型會基于用戶的問題,將答案定位在文檔的某個段落、某句話甚至是某個短語;
- VQA:基于圖像或視頻的問答,以上圖為例,用戶問“這個女孩兒的臉被什么擋住了”,問答模型會告訴我們答案是“香蕉”;
- Community QA:從命名上來看,它是基于社區知識的問答,比如一個讀書論壇,底下有人在交流值得一讀的人工智能書籍,在母嬰論壇有人在討論寶寶發燒了怎么辦?需要吃藥嗎?那么這些對話內容都可以沉淀為知識,我們定義的Community QA就來源于這些場景,在不同的領域,我們通過挖掘、或者收集、標注的方式沉淀了一批知識,用問答對的形式把它們組織起來,在這批知識集合下,用戶提問一個領域相關的問題,問答模型會告訴我們答案到底是什么。
智能問答工程實踐
面對智能問答的廣泛應用,本篇文章以如何搭建一套智能問答系統為切入點,深入淺出介紹一下在Community QA上所做的嘗試。
1. 業務簡介
我們再基于幾個實際的例子看一下問答的使用場景:
- 第一類是常見的客服場景,詢問產品、詢問業務、詢問經驗,這類場景比較泛,他會衍生在生活中的各個方面,客服機器人相比傳統的客服,他永不打烊,回答永遠標準,而且面對各種刁鉆甚至不友好的問題,都會永遠積極正面地給出響應。
- 同時,該類問答機器人進一步深化拓寬到領域,會孵化出某些領域通用的機器人,比如HR領域,相信不同公司的HR,很大程度上面臨的問題集合都是固定的,也就是說,垂直領域的問答機器人是可以有效滲透并橫向復制給不同企業使用的。
- 在英語學習相關產品上,我們想給小孩報名英文課,但是不清楚課程內容和價格,那我們會問相關的問題。對于商家來講,我們不僅是提問的人,還是潛在的商機,可能我們僅僅只想問一個問題,但是商家卻希望能獲得我們更多的信息,電話、小孩年紀、上課意向等,進而讓我們留存下來最后能成功消費,類似的場景還有很多,我們把這一類應用場景叫營銷機器人,它是商務團隊的好幫手,能在多個平臺自由切換,回答問題標準且及時,最終往往能通過更小的人力投入,獲取更多的有效線索。
2. 問答建模
基于前面的例子,我們對問答場景有了更具體的畫像,需要做什么已經很清晰了,那么怎么做呢,我們開始嘗試對該問題進行建模。
首先是對知識的結構化表示:
- 用戶問題我們用q表示;
- 一個問答對表示一條領域知識,我們把它叫做一個知識點ki;
- 答案我們定義為ai;
- 由于一個語義的問題可能有多種不同的表述方式,因此一個知識點的問題由多個不同的表述組成,這些表述都叫相似問pij;
- 一個領域的知識庫,由多個知識點構成。
圖2 知識庫表示
我們為什么要用這種方式來管理知識,不用圖表、也不用表格?
實際上,知識的管理方式是來源于實際業務場景的,這種方式非常易于維護,多個同義問題用一個知識點管理,也能減輕維護答案工作量,同一知識點下的問題也將會是很好的訓練數據。
現在有了領域內知識庫,用戶提問后,我們還需要一個問答模型,這個模型能找到和用戶query最匹配的問題,進而給出對應的答案,這里我們采用檢索+匹配+排序的架構。
圖3 問答建模流程
下圖是基于知識庫和問答模型在母嬰場景的應用舉例:
圖4 QA應用舉例
3.數據儲備
圖5 數據類型分布
在正式開始問答模型構建之前,我們需要思考目前有哪些數據可被我們使用,以及我們需要什么數據來支撐后續的工作。
通用領域的貼吧、豆瓣、微博、知道等問答數據,可被用來訓練詞向量,或是統計共現、互信息詞典;人工標注的q/p對,可被用來訓練有監督的分類模型;垂直領域的知識庫可被用來訓練領域相關的分類模型,也可用作詞向量的fine-tune,當然也是有效的評估數據。
4. 模型迭代
圖6 QA架構圖
整體的QA架構圖如圖6所示,下面我們簡單介紹一下歷次迭代的思路。
1. BoW+LR
第一次迭代我們只引入了詞袋(Bag of Words)模型,5維代表特征。
- Jaccard:q和p詞交集個數與詞并集個數的比值;
- Coverity:最長公共子串特征,q和p最長公共子串在p中的占比;
- Edit-Distance:最小編輯距離,q和p的最小編輯距離除以q、p長度的平均值;
- TM:共現特征,基于bigram/trigram詞典,計算q、p共現詞平均score、共現詞最高score的平均值、共現詞去除相同詞后最高score的平均值共3維特征;
- MI:互信息特征,基于互信息詞典,計算q、p兩兩詞的互信息平均值。
上述特征集合,均由大數據文本的統計特征衍生而來,對句子的語義表示能力較弱。
2.?BoW+WE+LR
第二次迭代我們給模型引入了一定的語義表示能力,對于了解深度學習、自然語言處理的同學來講,word2vec在很多任務上都有著非常杰出的貢獻,這一模型從不同角度刻畫了周圍詞和當前詞的關系。經過訓練后,我們能得到一份詞匯的向量表示。
圖7 word2vec的2個模型
基于訓練得到的詞向量,我們采用IDF對詞向量進行加權平均,以此得到q、p詞粒度的句向量表示,并最終通過余弦相似度來度量兩者的語義相關性。
圖8 基于句子表示的w2v特征
通過余弦相似度給出的相似,本質上描述的還是兩個詞的相對一致,而且word2vec不考慮詞序,余弦相似度大表示兩個詞搭配出現、或者和同一批詞搭配出現的可能性較大,這一特征所顯示出來的弊端就是往往相似度高的2個詞具有可替換性但卻語義不完全相同。
比如q=“寶寶感冒怎么辦”,p=”寶寶發燒怎么辦”,”感冒”和”發燒”互相替換,句子依然具有合理性,而且由于他們經常在同一批詞匯中搭配出現,具有比較相似的分布特征,相關性比較高,然而他們語義并不同。
接下來我們引入另一種語義度量方法:WMD (the Word Mover’s Distance),它刻畫了如何用最小的代價將q中的每個詞以不同權重匹配到p中每個詞上,這是一種基于句子間的交互來表示語義的方法。
圖9 基于句子交互的WMD特征
在利用WMD計算q/p的相關性時,我們會對句子進行切詞、去停,對于q中的每個詞,找到p中的另一個詞,進行語義轉移,轉移的代價我們用兩個詞匯間的word2vec余弦相似度來度量。
當2個詞語義較相近時,我們可以多轉移一點,如果語義相差很大,我們可以選擇少轉移或者不轉移,最后使得所有轉移的加權和最小,這里加權采用詞頻作為特征,具體示例如圖10所示。
圖10 the Word Mover’s Distance (WMD)
由于WMD也高度依賴word2vec詞向量,因此上文提到的word2vec cosine特征所有的不足,WMD特征依舊存在,既沒有考慮語序信息,同時對OOV (Out of Vocabulary)情況也很不友好,語義泛化能力弱,相似意圖區分能力差。
3.?BoW+WE+SE+fine-tune
前兩次迭代都沒有考慮知識庫內的數據,比較適用于無語料或者語料較少的知識庫,當知識庫具有一定的規模后,正如前面提到的,同一個知識點下的相似問,將是很好的訓練數據。
我們采用了fastText模型,充分利用知識點中的問題語義相同/相近這個事實作為監督信號,訓練一個分類模型,直接用一個問題的詞去預測問題所屬的知識點。
FastText是Tomas Makolov為了彌補word2vec的某些不足而提出的改進方案,和word2vec中CBOW不同的是,它的輸入不再是上下文,而是一整個句子,同時它接收子詞和ngram特征,能捕捉到更多的信息。
比如單詞的前后綴,以及詞的語序特征等。相比其它深度學習模型,fastText結構簡單,本質上是一個線性模型,不太適合處理較長或者線性不可分的樣本,而對于偏線性的短文本分類任務卻比較合適,能在較少訓練集合的基礎上,非常快速地得到不錯的效果。
圖11 fastText模型結構
同時fastText在訓練過程中也會產生一份詞向量,經實驗驗證,基于知識庫訓練fastText的詞向量對基于大數據訓練的word2vec詞向量進行fine-tune,能一定程度上提升該領域的問答效果。
4. BoW+WE+SE+DM+fine-tune
前面我們利用一個知識庫的相似問語義相近作為監督信號,從中抽取出了一個知識點的語義信息,但我們最終的目標是判斷用戶輸入和相似問之間的相關性,這里我們使用一個深度學習的模型ESIM (Enhanced LSTM for Natural Language Inference),利用要比較的兩句話的監督信號來訓練模型,觀察句對的交互對模型的影響。
圖12 ESIM模型架構(左側)
上圖是ESIM的網絡結構,它在眾多短文本分類任務中都有不錯的表現,主要在于輸入2句話分別接embedding+BiLSTM, 利用BiLSTM學習一句話中的word和它上下文的關系后,在進行inference之前,會利用attention操作計算2個句子word之間的相似度來更新embedding,也就是說比較的兩句話在模型訓練中產生了交互,相比其它的類似網絡只在最后一層求距離來講,這種交互的影響能學到更全局的信息。
5. BERT+MTL+fine-tune
當然,學術界是在不斷變化的,對于效果較好的模型,我們也需要進行嘗試,尋找適合在工業界落地的條件和場景。
圖13 BERT+多任務學習MTL框架圖
在BERT橫掃了11項NLP測評任務的效果后,我們把它應用在知識點分類任務上,期望利用BERT本身的優勢,來提升分類任務的效果。同時我們還基于知識庫數據,在BERT的基礎上,通過MTL進行fine-tune,再以BERT-MTL為基礎,通過單個任務分別進行fine-tune。
圖14 BERT+MTL的fine-tune過程
5. 評估
圖15 評估數據舉例
效果變好了,有多好?肉眼可見顯然不能作為一個反饋的指標,所以我們需要去科學地評估這些改進,評估這一環節我們選了6個不同領域,每個領域50個知識點,每個知識點12個相似問作訓練,3個作評估測試,示例數據見圖15,在此數據集基礎上去評估準召和F1。具體結果見圖16,大家可以看到在不卡閾值的情況下,準確率從0.8提升到了0.968。
圖16 歷次迭代評估數據表
迭代是一個循序漸進的過程,可能有人會有疑惑,我怎么知道要用什么特征、選哪個模型,從多次迭代的經驗來講,Badcase分析很重要,特征的設計一方面來源于你對問題的直觀感知。
比如我們需要從多方面(統計層面、詞匯表示、句子表示、句子間交互等)來設計方法對句子進行語義表示,另一方面來源于對模型現有Badcase的彌補,通過分析case表現出來的規律或者傾向來設計有針對性的特征。
同時學術界也在不斷更新新的模型,3年前時興的技術,到現在被完全替代的可能性是非常大的,因此我們需要與時俱進。
結語
整個智能問答系統升級的過程,主要圍繞四個步驟進行,首先面對任務要理解問題的本質,對問題進行合理的建模,然后評估選擇合適的語言工具去實現它,再由淺入深穩步迭代,形成數據、模型、反饋的閉環,最后就是要持續性學習,擁抱變化,擁抱技術。
參考文獻:
[1] Nan Duan. Building Informational Bot (InfoBot) with Question Answering & Generation. In Association for Computational Linguistics (ACL). 2017.
[2]Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean. 2013b. Distributed representations of words and phrases and their compositionality. In NIPS, pages 3111–3119.
[3] Qian Chen,?Xiaodan Zhu,?Zhenhua Ling,?Si Wei,?Hui Jiang,?Diana Inkpen. “Enhanced LSTM for Natural Language Inference”. In Association for Computational Linguistics (ACL). 2017.
[4] Le, Quoc, and Tomas Mikolov. “Distributed representations of sentences and documents.” International Conference on Machine Learning. 2014.
[5] Devlin, J., Chang, M.-W., Lee, K., and Toutanova, K. Bert: Pretraining of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805, 2018.
[6] Xiaodong Liu, Pengcheng He, Weizhu Chen, and Jianfeng Gao. 2019a. Improving multi-task deep neural networks via knowledge distillation for natural language understanding. arXiv preprint arXiv:1904.09482.
[7] Xiaodong Liu, Pengcheng He, Weizhu Chen, and Jianfeng Gao. 2019b. Multi-task deep neural networks for natural language understanding. arXiv preprint arXiv:1901.11504.
本文由 @吾來 原創發布于人人都是產品經理,未經許可,禁止轉載
題圖來自 Unsplash,基于 CC0 協議
檢索匹配排序那塊能詳細說說不
大大大大叔大嬸打算大所多群無大所大所大所大
打死