对话系统聊天机器人的设计艺术(上)
前言
關于本文的閱讀方式:
這不是一篇學術綜述,也不是單純的科普文,而是試圖從目標出發來漸進式的思考對話系統的設計,順便科普。因此本文不適合跳讀,也不適合5分鐘式瀏覽,而是適合在夜深人靜的時候一個人...
我知道你們夜深人靜的時候肯定不會看這個的( ̄? ̄)
?
言歸正傳,其實本文最主要的目的還是試圖理清楚對話系統的若干概念,對話是一個很大的概念,有非常非常多的子問題,剛入坑的小伙伴很可能迷失在對話的一小塊區域里無法自拔,本文就是為解決這一類問題的。希望讀者在看完本文后,可以理清楚對話的一些基本概念為什么而存在,以及它在整個對話王國中的位置。
?
對話系統可以說是如今NLP領域熱度上升最快的topic了。熱的太快就容易出現泡沫,比如市場上出現的一些基于人工的智能對話機器人真是讓小夕無力吐槽╮( ̄▽ ̄"")╭本文不涉及這類機器人的講解,請放心食用。
?
一種偷懶的介紹方法是說對話任務分為任務完成型和閑聊型,分別對應限定域對話和開放域對話。其實這樣是不準確的,屬于過度簡化了。在用戶實際的對話需求中,除了閑聊和完成特定任務,還有一大類知識獲取(即問答)的需求。而這一類問答型對話又可以分為基于知識圖譜的對話(KG driven Dialogue)和檢索式多輪問答等更細化的方向。除此之外,閑聊、任務完成與問答三者之間也不是完全割裂的,還有一些類似于“任務完成型閑聊”的奇怪場景,使得閑聊也帶有一定的目的性(比如撩妹)。因此可以用一張圖總結一下這三類對話需求,如圖所示。
閑聊型和任務完成型對話本文接下來會展開講,問答型對話可以參考CoQA[22] benchmark上的近期工作以及一些KG?Dialogue的工作[27,28],限于篇幅以后再講╮( ̄▽ ̄"")╭
同樣的道理,它們與限定域和開放域的關系也不是絕對一一對應的,任務完成為導向的對話也不一定就是限定域的(比如已經登上全球第二寶座的萬能助手小度[2]),閑聊也不一定是開放域的(比如給定一個topic或文章而展開的場景化閑聊[1])
不過我們還是回到主要問題上來。對于右上角這類典型的閑聊任務,主流方法分為兩類,基于檢索的方法與基于生成的方法。顯然兵分兩路的話就代表各自都有各自的優缺點,當然也有一些工作試圖將兩者進行結合,比如融合檢索知識的生成式對話[3,4]以及工程視角下的簡單結合[5]。
生成式對話
對于生成式對話,可以說一言難盡。雖然看似可以將對話看作是seq2seq問題,然而我們知道在機器翻譯問題上成功的seq2seq范式很大程度上是因為翻譯的source和target有相對確定的token-level的對應關系,例如中英翻譯任務上,輸入為"I love Xiaoxi",那么對應的輸出空間其實非常有限
source: 我愛小夕 target:I love Xiaoxi
然而在對話任務上,輸入為"I love Xiaoxi"時對應的輸出空間非常大
source: 我愛小夕 target1: 小夕是誰?target2: 她也愛你鴨 target3: 誒?你不是有女朋友嘛!target4: 哦 ….
顯然,如果同樣建模成生成問題,機器翻譯任務相當于每個輸入問題都有一個差不多的標準答案,即屬于“客觀題”;而對話生成任務則相當于一個“主觀題”,只要不偏題就行,沒有標準回答,好壞全看個人文采。然而主觀題的閱卷難度顯然要比客觀題的難度大得多啊(想象一下給作文打分的難度和給文言文翻譯打分的難度差異),因此對生成式對話系統(開放域)的評估一直是一個很讓人頭疼的問題,需要高度依賴人工評定,當然啦也有一些對話自動評估相關的工作如ADEM[29],RUBER[30]等,感興趣的小伙伴可以自行了解一下。
更加糟糕的是,將一句文言文翻譯成白話文基本上不需要關心語境問題(一句文言文或一句英文的意思很少會因為語境變了而發生非常大的改變),然而,對話回復則是跟語境高度耦合的。這里的“語境”包括顯式的聊天歷史以及隱式的說話人的屬性、性格以及聊天發生時的場合和受眾等。
想象一下,如果在之前顯式的聊天歷史中你已經說過了“今天生病了不想出門”,然后對于一個query,“你接下來想去干啥”,如果忽略語境的話,“我想去爬山”這個回復完全沒毛病,但是考慮到語境的話,爬山這一類回復就完全不應該在輸出空間中存在了。
同樣的道理,說話人的性別、年齡以及聊天對象的身份、地位等隱式的“語境”也會對輸出空間作出極大的限制。因此可以說,對話生成問題是一個條件非常非常多的條件生成問題(conditional generation)。由此,決定回復內容的“條件”到底有哪些?應該怎么建模?這些條件給出來后,怎么讓這些條件有效的控制生成器的生成內容?這類問題是對話生成相比機器翻譯任務來說困難的多的另一大原因。貼幾篇對話生成的控制相關的paper[23,24,25,26],感興趣的小伙伴自行去刷,后面小夕也會盡量放出生成式對話相關的文章,小伙伴們耐心等推啦~~~
那么在對話問題上,有沒有辦法規避或者緩解生成式對話帶來的上面這個評估以及控制這兩大問題呢?這就是工業界偏愛檢索式對話系統的原因了。
檢索式對話
檢索式對話系統的一般框架如圖所示。
如果不限定對話的范圍(比如開放域閑聊),那么存放query-response pairs(上圖中的message-response pairs)的語料庫必須要是非常大非常豐富的,否則難以應對用戶千奇百怪的問題和回復,這時候語料庫往往要從一些開放的社交網站上爬取,如Twitter、微博、貼吧等。
顯然我們不可能讓一個深度神經網絡在每次尋找回復時遍歷整個語料庫(可能9102年的計算機可以做到),因此在用神經網絡深度匹配合適的回復之前,一般要先經過一個“粗篩”的模塊召回若干相關的回復,減少q-r匹配的工作量。這個模塊一般將用戶當前輪的query與語料庫里query進行快速匹配(當然你也可以加更多feature提高合適回復的召回率),得到幾十上百個候選回復,完成第一輪的匹配。
顯然這就要求q-q粗召模塊非常輕量級且匹配的相關度可接受,因此一些常用的信息檢索模型如BM25以及一些輕量級文本特征表示模型如bow就派上用場了。小夕這里推薦一個專業的開源文本匹配工具AnyQ[6],不僅將上面的常用模型集成進來,方便“一鍵調用”,而且部署階段做了非常多的優化,所以想自己搭檢索式對話/問答系統的小伙伴就不用在該模塊上重復造輪子啦。
有了若干相關的候選回復后,我們假設其中一定至少存在一個合適的回復,那么就需要一個非常精良的q-r精排模塊來將這個合適的回復挑出來。這部分也是學術界研究主要focus的點。在多輪對話匹配這一方面百度的對話團隊做了大量的工作,屬于長期霸榜的狀態,比如Multi-view[7]、DAM[8]以及DGU[9]。
從UDC數據集來看這一領域的進展,基本可以看到這就是百度對話團隊與MSRA的游戲了╮( ̄▽ ̄"")╭不過最新戰績應該就是今年年初的百度對話團隊release的DGU已經把UDC上的R1@10刷到了85.67,超過去年的DAM模型9個點,從小夕的case study來看,感覺這個數據集快被玩到頭了。。
對DGU之前的多輪對話匹配模型感興趣的同學可以看我一年前寫的這篇《小哥哥,檢索式chatbot了解一下》,詳解了Multi-view、SMN、DUA以及當時最好的DAM模型。
如果說生成式對話是在茫茫實數語義空間中尋找那幾個合適的回復,那么檢索式對話就是給你有限數量的選項,讓你選出里面最合適作為回復的選項(有沒有聯想到word2vec與語言模型的關系)。顯然做選擇題要比大海撈針容易多了。而且生成式系統中,合適的回復是位于一個抽象、不可解釋的實數語義空間,我們當然很難直接干預撈針范圍,而在檢索式系統中,合適的回復是在一堆干擾回復中,我們要濾掉那些干擾回復或者縮小搜索范圍非常容易——給q-q粗召模塊添油加醋甚至直接對語料庫開刀就好啦╮(╯▽╰)╭
總之,將一個大海撈針問題轉變成了一個在有限選項中做選擇的問題。因此任務簡單了,模型容易設計和訓練,也很容易進行評估了。
然而,很多時候我們的對話是帶有目的性的。雖然檢索式對話與生成式對話系統可以為每個query找到合適的回復,但是這些模型是在純文本語料上訓練的,無力建模對話過程中的意圖或者發出一個結構化的動作,比如
“小夕你幫我看看現在幾點啦” 小夕:“好呀好呀”
然后沒了。。。顯然用戶期待的并不是“好呀好呀”就結束了,而是當前時刻具體的時間!而要想知道當前的時間,就必須要調用一些服務/API(不然你覺得對話語料庫中會寫著當前時刻么)去查詢一下,顯然這些隱式的操作不可能出現在檢索式對話或生成式對話模型的訓練集中。
更不用說,如果對話開始之前你的目的就很明確——比如找到一家適合今晚約約約的餐廳并預定上座位,那么整個對話的過程一定都是全程高能的(需要頻繁的查詢數據庫,記錄和更新前面對話的關鍵信息),任何一個檢索式和生成式對話系統都會崩潰的。
路人:小夕,幫我推薦一家餐廳吧~ 小夕:好呀好呀,幾個人呢~ 路人:2個人哦 (小夕趕緊拿出本本記下) 小夕:好的哦,今天中午嗎?路人:不是呢,今天晚上~差不多6點左右到 (小夕趕緊記下) 小夕:好滴,想吃中餐還是西餐呢?路人:想吃牛排!算了算了都快200斤了,而且單位附近貌似沒有,那就。。吃椰子雞吧!(小夕努力理解了一下,然后打開百度地圖APP開始尋找附近的椰子雞) 小夕:找到一家!距離我們2.4km!
怎么解決這類問題呢?顯然這類對話問題已經遠遠超出了文本匹配和文本生成問題的范疇,于是就有了“任務完成型對話”這個重要分支。
任務完成型對話
顯然要使用數據驅動的方式建模任務完成型對話的話,不僅要有文本,而且還要給每一輪對話標記好對話進行到此時的狀態(對,就是小夕的小本本)以及可能需要發出的動作(比如小夕打開百度地圖app去找椰子雞),顯然任務完成型對話的數據集要難做很多。對做數據集這方面有興趣的同學可以看小夕前不久寫的這篇《如何打造高質量的數據集》。
下面來更精細的說一說任務完成型對話該怎么建模。
顯然對于任務完成型對話來說,直接目的是完成任務。而要完成任務,在對話的過程中就很容易遇到需要查詢甚至更新數據庫等超出文本理解和生成范疇的操作,而這些“融會貫通”的操作在互聯網上是很難自然產生的,自然也沒地方可爬取。這也是為什么任務型對話的數據集大多是人工生成的(注意不僅僅是人工標注,而是樣本本身都要比較刻意的人工撰寫)。當然了,為了降低造數據集的成本,也出現了一些人與機器協同造數據集[10],甚至讓機器與機器對話[11,12],不過考慮到本文的長度,這里就不展開寫了。
假如我們不用考慮數據集怎么造的問題,那么我們就可以考慮一下系統本身怎么設計了。很多文章開篇就會告訴你一個任務型對話系統包括NLU、DST、DP、NLG等模塊。而實際上,這里面的任何一個模塊都可以隱式存在。
首先來考慮一下前面提到的尋找餐廳并預定餐位的例子。
顯然這里作為系統的小夕尋找椰子雞、拿小本本記下等操作并不是自然語言,我們將這一類操作稱為“對話動作(dialogue action)“,由于這里的小夕是機器人,因此更細化的說法是系統動作system action。同樣,如果用戶通過按鈕或自然語言的方式發出了類似的指令,比如”小夕,幫我找下附近的椰子雞“,那么用戶發出的這個蘊含在自然語言中的命令就稱為用戶動作user action。當用戶動作用自然語言描述時,我們也將這個用戶動作稱為是意圖intent,而從自然語言中解析出具體用戶動作的過程就稱為意圖識別。
顯然,如果我們能事先把所有的用戶動作都做成按鈕,讓用戶戳戳戳,那這個“對話系統”就不需要NLP了╮( ̄▽ ̄"")╭不過這當然是不可能的,我們可以通過幾個按鈕預定義幾個高頻用戶動作,節省用戶口舌,不過大部分的用戶動作還是需要從用戶的自然語言輸入中解析出來的。所以從下一篇文章開始,就跟小夕一起看看如何理解用戶的自然語言輸入,進而完成整個對話任務吧~
參考文獻
ps:列表里的本文沒提到的文章會在下一篇講哦
[1] Yan, Zhao, Nan Duan, Junwei Bao, Peng Chen, Ming Zhou, Zhoujun Li, and Jianshe Zhou. "Docchat: An information retrieval approach for chatbot engines using unstructured documents." In?Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pp. 516-525. 2016.
[2] https://dueros.baidu.com/html/dueros/index.html
[3] Song, Yiping, Rui Yan, Cheng-Te Li, Jian-Yun Nie, Ming Zhang, and Dongyan Zhao. "An Ensemble of Retrieval-Based and Generation-Based Human-Computer Conversation Systems." (2018).
[4] Pandey, Gaurav, Danish Contractor, Vineet Kumar, and Sachindra Joshi. "Exemplar encoder-decoder for neural conversation generation." In?Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pp. 1329-1338. 2018.
[5] Qiu M, Li F L, Wang S, et al. Alime chat: A sequence to sequence and rerank based chatbot engine[C]//Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers). 2017: 498-503.
[6] https://github.com/baidu/AnyQ
[7] Zhou, Xiangyang, Daxiang Dong, Hua Wu, Shiqi Zhao, Dianhai Yu, Hao Tian, Xuan Liu, and Rui Yan. "Multi-view response selection for human-computer conversation." In?Proceedings of the 2016 Conference on Empirical Methods in Natural Language Processing, pp. 372-381. 2016.
[8] Zhou, Xiangyang, Lu Li, Daxiang Dong, Yi Liu, Ying Chen, Wayne Xin Zhao, Dianhai Yu, and Hua Wu. "Multi-turn response selection for chatbots with deep attention matching network." In?Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), pp. 1118-1127. 2018.
[9]?https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding#%E5%8F%82%E8%80%83%E8%AE%BA%E6%96%87
[10] Jason Williams, Antoine Raux, Deepak Ramachandran, and Alan Black. 2013. The dialog state tracking challenge. In Proceedings of the SIGDIAL 2013 Conference, pages 404–413.
[11] Bordes, Antoine, Y-Lan Boureau, and Jason Weston. "Learning end-to-end goal-oriented dialog."?arXiv preprint arXiv:1605.07683?(2016).
[12] Shah, Pararth, Dilek Hakkani-Tür, Gokhan Tür, Abhinav Rastogi, Ankur Bapna, Neha Nayak, and Larry Heck. "Building a conversational agent overnight with dialogue self-play."?arXiv preprint arXiv:1801.04871?(2018).
[13]https://coffee.pmcaff.com/article/971158746030208/pmcaff?utm_source=forum&from=related&pmc_param%5Bentry_id%5D=950709304427648
[14] Xu, Puyang, and Ruhi Sarikaya. "Convolutional neural network based triangular crf for joint intent detection and slot filling." In?2013 IEEE Workshop on Automatic Speech Recognition and Understanding, pp. 78-83. IEEE, 2013.
[15] Wang, Yu, Yilin Shen, and Hongxia Jin. "A bi-model based rnn semantic frame parsing model for intent detection and slot filling."?arXiv preprint arXiv:1812.10235?(2018).
[16] M. Henderson, B. Thomson, and J. Williams. 2014a.The second dialog state tracking challenge. In Proceedings of SIGdial.
[17] Matthew Henderson, Blaise Thomson, and Jason D Williams. 2014c. The third dialog state tracking challenge. In Spoken Language Technology Workshop (SLT), 2014 IEEE, pages 324–329. IEEE.
[18] Tsung-Hsien Wen, David Vandyke, Nikola Mrksic, Milica Gaˇsi′c, Lina M Rojas-Barahona, Pei-Hao Su, Stefan Ultes, and Steve Young. 2017. A networkbased end-to-end trainable task-oriented dialogue system. EACL.
[19] Budzianowski, Pawe?, Tsung-Hsien Wen, Bo-Hsiang Tseng, Inigo Casanueva, Stefan Ultes, Osman Ramadan, and Milica Ga?i?. "Multiwoz-a large-scale multi-domain wizard-of-oz dataset for task-oriented dialogue modelling."?arXiv preprint arXiv:1810.00278?(2018).
[20]https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/dialogue_model_toolkit/dialogue_general_understanding#%E5%8F%82%E8%80%83%E8%AE%BA%E6%96%87
[21] Williams, Jason D., and Steve Young. "Partially observable Markov decision processes for spoken dialog systems."?Computer Speech & Language?21, no. 2 (2007): 393-422.
[22] Reddy, Siva, Danqi Chen, and Christopher D. Manning. "Coqa: A conversational question answering challenge."?Transactions of the Association for Computational Linguistics7 (2019): 249-266.
[23] Zhao, Tiancheng, Ran Zhao, and Maxine Eskenazi. "Learning discourse-level diversity for neural dialog models using conditional variational autoencoders."?arXiv preprint arXiv:1703.10960?(2017).
[24] Zhou, Xianda, and William Yang Wang. "Mojitalk: Generating emotional responses at scale."?arXiv preprint arXiv:1711.04090?(2017).
[25] Qian, Qiao, Minlie Huang, Haizhou Zhao, Jingfang Xu, and Xiaoyan Zhu. "Assigning personality/identity to a chatting machine for coherent conversation generation."?arXiv preprint arXiv:1706.02861?(2017).
[26] Zhang, Saizheng, Emily Dinan, Jack Urbanek, Arthur Szlam, Douwe Kiela, and Jason Weston. "Personalizing Dialogue Agents: I have a dog, do you have pets too?."?arXiv preprint arXiv:1801.07243?(2018).
[27] Zhou, Hao, Tom Young, Minlie Huang, Haizhou Zhao, Jingfang Xu, and Xiaoyan Zhu. "Commonsense Knowledge Aware Conversation Generation with Graph Attention." In?IJCAI, pp. 4623-4629. 2018.
[28] Wu, Chien-Sheng, Richard Socher, and Caiming Xiong. "Global-to-local Memory Pointer Networks for Task-Oriented Dialogue."?arXiv preprint arXiv:1901.04713?(2019).
[29]?Lowe R, Noseworthy M, Serban I V, et al. Towards an automatic turing test: Learning to evaluate dialogue responses[J]. arXiv preprint arXiv:1708.07149, 2017.
[30]?Tao C, Mou L, Zhao D, et al. Ruber: An unsupervised method for automatic evaluation of open-domain dialog systems[C]//Thirty-Second AAAI Conference on Artificial Intelligence. 2018.
總結
以上是生活随笔為你收集整理的对话系统聊天机器人的设计艺术(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 排得更好VS估得更准VS搜的更全「推荐、
- 下一篇: 11月AI大事件回顾:GPT3开放使用/