記憶網路之在對話系統中的應用
記憶網路之在對話系統中的應用
前面幾天看了下Jason Weston等人在對話系統方面的工作,可以看成是對Memory Networks的擴展吧,應用到了對話領域中,主要看了下面三篇論文,基本上是按照發表時間順序來的,接下來我們逐篇來介紹一下其主要工作內容:
- evaluating prerequisite qualities for learning end-to-end dialog system
- Dialog-based Language Learning
- learning end-to-end goal-oriented dialog
evaluating prerequisite qualities for learning end-to-end dialog system
這篇文章是15年發表的,主要貢獻是提出一個評估端到端對話系統性能的指標以及相關的數據集。目前對話系統可以分成三個類別:
1,傳統的對話系統中常常使用對話狀態跟蹤組件+對話相應生成組件來完成對話,這樣就需要結合預先定義好的狀態結構、用戶話語、上一輪對話以及一些別的外部信息,而且每一輪對話都需要標記其內部狀態並精準的分析用戶意圖,這就導致其很難推廣到大規模應用。
2,基於神經網路的端到端對話系統,其不需要狀態跟蹤組件,直接根據對話的上下文和用戶當前輸入生成回復,並且可實現端到端的反向傳播訓練。但是這就導致了其沒有辦法使用之前的數據集進行訓練和測試(都針對狀態跟蹤設計)。所以目前一般使用人工評分(很難擴展)或者BLEU得分來評價模型的效果,但是往往不能夠達到評價的標準。
3,本文提出的數據集和模型,第二種方法的缺點主要在於BLEU在帶有目的性的對話中不能夠起到很好的效果,比如特定的領域,電影推薦、餐廳助手等。
本文作者認為一個對話系統應該具有下面的四種能力才可以很方便的推廣到其他領域中。作者以電影推薦助手為切入點,使用OMDb、MovieLens、Reddit構建了四個數據集,分別解決四個問題。如下:
- QA:用於測試對話系統能否回答客觀問題,類似於一個給予KB知識庫的問答系統,給予SimpleQuestions數據集進行修改以適應本文的要求。其中每個問題會有一個答案列表,模型只需要生成一個答案列表即可,而不需要生成自然語言對話。最終使用@1作為評價指標。
- 推薦:用於測試系統對用戶個性化推薦的能力,而不是像上面的通用回答一樣。基於MovieLens數據集,構建user*item矩陣記錄用戶給電影打分,然後在生成模擬對話,對每個用戶選擇其打5分的電影,然後推薦一個相似的電影。其實就是講用戶喜歡的電影作為上下文,然後需要給出用戶潛在喜歡的電影,如上圖所示,與QA任務相同,本數據集也是生成一個答案列表即可,不過區別在於這裡以@100作為評估指標而不是@1,因為推薦矩陣十分稀疏@1準確率會很低。
- QA+推薦混合能力:上面兩個任務都只涉及一輪對話,也就是一個問題對應一個回答,這個任務主要關注於多輪對話。每條數據會有3輪對話,第一輪是Recommendation,第二輪是QA,第三輪也是類似於Recommendation的相似電影推薦任務。每一輪的對話都需要對之前對話的理解和上下文信息的使用。而且會對三輪對話的回答都進行評估,,並且使用@10作為評價指標。
- chit-chat,閑聊能力:這個數據集是為了評測對話系統的chit-chat閑聊能力。使用Reddit的電影評價回復(兩個用戶之間)數據構建,76%是單輪迴復,17%是兩輪,7%是三輪及以上。為了跟前面的幾個任務匹配,這裡講對話生成轉化為目標選擇。即選擇10000個沒有在數據集中出現過的評論作為負樣本,每次的目標是從10001(10000個負樣本加1個正確答案)候選答案中選擇正確答案。
- Joint task:將上面的4個任務進行聯合訓練,這樣我們的模型將具有chit-chat(任務4)能力和目的性回答(任務1-3)。
最終作者分別使用了Memory Networks、Supervised Embedding models、LSTMs、QA、SVD、IR等方法對上述五個任務進行了測試,發現MemNN和Supervised Embedding效果比較好,而相比之下,MemNN效果是最好的。結果如下圖所示:
本文還提出了一個比較好的想法就是將記憶分為Long-Term Memory和Short-Term Memory,其中Long指的是KB等知識庫的記憶,用於回答一些客觀的問題,使用三元組存儲,而Short指的是當前對話的對話歷史,更切合每條數據本身的記憶,可以得到一些對用戶主觀的了解和回答。這樣綜合使用Long和Short可以有比較好的回答效果,而且可以很方便地將4個任務joint起來進行訓練。
Dialog-based Language Learning
從論文題目可以看出,本文提出基於對話的語言學習,與此同時訓練得到一個對話系統。主要貢獻在於其提出了10個基於對話的監督任務數據集,如下所示:
- Imitating an Expert Student:模仿專家進行對話,需要直接回答正確答案。可以看做剩餘任務的baseline。
- Positive and Negative Feedback:帶有反饋的對話,回答問題會收到對或者錯的提示,而且對於正確的回答會有額外的reward信號作為獎勵(數據集中使用+表示)。
- Answers Supplied by Teacher:當回答錯誤時,會被告知正確答案。難度介於任務1和2之間;
- Hints Supplied by Teacher:回答錯誤時,會被給關於正確答案的提示,難度介於任務2和3之間;
- Supporting Facts Supplied by Teacher:回答錯誤時,會被給關於正確答案的support facts;
- Missing Feedback:有一部分正確答案的reward會丟失(50%),與任務2相對應;
- No Feedback:完全沒有reward;
- Imitation and Feedback Mixture:任務1和2的結合,檢驗模型是否可以同時學習兩種監督任務;
- Asking for Corrections:當回答錯誤的時候,會主動請求幫助「Can you help me」,對應任務3;
- Asking for Supporting facts:當回答錯誤的時候,會主動請求幫助「Can you help me」,對應任務5;
這10個監督數據及是基於bAbI和movieQA兩個數據集構建的,在此之上,作者又提出了下面四種使用數據進行訓練的策略:
- Imitation Learning
- Reward-based Imitation
- Forward Prediction
- Reward-based Imitation + Forward Prediction
論文仍然使用MemNN作為模型進行訓練,如下圖所示:
Learning End-To-End Goal-Oriented Dialog
這篇文章Memory Network實現了end-to-end的任務型對話系統,旨在對於Goal-Oriented的對話系統構建一個比較完善的數據集和訓練方法。因為端到端的深度學習的模型在chit-chat領域已經取得了比較好的效果,但是在Goal-Oriented領域與傳統模型還存在一定的Gap,本文提出了一個給予餐廳預定領域的數據集。
首先該數據集中有一個全局的知識庫,主要用於保存餐廳信息(菜種類、位置、價格、評分、地址、電話、桌子大小等),該KB可以通過API調用的方式進行訪問(類似於SQL查詢),然後對話數據可以分為四個任務:Issuing API calls,Updating API calls,Displaying options,Providing extra information,分別對應著根據用戶需求調用API(用戶需要輸入餐廳信息,包括上面提到的存在KB中的餐廳的幾個屬性),用戶更改需求夠重新調用API,展示滿足條件的結果,最終用戶確定某個餐廳後將其位置、電話等信息顯示出來的四個任務。以及最中將四個任務連接在一起進行訓練。數據集如下圖所示:
最終每個任務的數據集除了正常構建的測試集之外還會額外構建一個OOV的測試集,以測試模型是否可以應對不在辭彙表中的對話這種情況,而且為了驗證模型在其他數據上的效果,作者還將DSTC2(真實的人機對話)的數據集改造成本文所需要的形式,並測試模型在該數據集上的效果。最終作者也嘗試了Rule-based System、IR model、Supervised Embedding Model、Memory Networks等幾個模型在本任務上面的效果,結果如下圖所示:
本文基於TensorFlow的實現方案可以參考下面的鏈接:
Memory Network實現方案
Supervised Embedding Model實現方案
上面兩個實現方案均達到了論文中的效果,大概看了下代碼,其實跟End-To-End MemNN基本上沒有任何區別,原因就是這裡所謂的對話系統並不涉及到對話生成這一塊,其所回復的答案仍然是模板,也就是從候選答案池中選擇一個作為答案進行回復,這跟用MemNN做QA沒有本質的區別,所以模型也基本不需要改變。甚至他們的數據集構建的方法都是那麼的相似==
總結
但是這幾篇論文怎麼說呢,一方面是自己之前還沒怎麼接觸過對話系統這個領域,看這幾篇論文相當於是在入門,另外一方面可能相關的論文也好、數據集也好、模型也好都還不是怎麼了解,所以整體看下來感覺這幾篇論文寫的有些不符合我對對話系統的認知==#然後一個就是感覺都把主要精力放在了數據集的構建上,貌似模型的創新和改動都比較少,基本上都是直接把MemNN拿過來用,答案也是模板生成,直接從候選答案中選擇即可。所以整體給人的感覺就是創新性不是很大,更多的是在構建不同的數據集以尋找一種更好的對話系統的任務、模板等。
推薦閱讀:
※Neural Responding Machine for Short-Text Conversation
※再談bot
※斯坦福CS224N深度學習自然語言處理(三)
※記憶網路之Gated End-to-End Memory Networks
※聊聊文本的分散式表示: Distributional Representation和Distributed Representation的區別
TAG:深度学习DeepLearning | 自然语言处理 |