基於背景知識的對話模型

PaperWeekly發表於2017-07-18

本期論文


A Knowledge-Grounded Neural Conversation Model 


本文研究的問題是用完全資料驅動的模型生成帶有知識的對話內容,在原有 seq2seq 模型的基礎上增加了一個 fact encoder 來生成對話。解決方案很實用,也很有啟發性,建議研讀。 

本文工作來自 Information Sciences Institute 和微軟研究院。

 

論文連結: 

https://arxiv.org/pdf/1702.01932.pdf

閱讀筆記精選


LeoZhao


Motivation & Insight 

目前的純資料驅動的系統缺乏真實世界的知識,這些回覆雖然流暢,很少包含實際的知識;而傳統的對話則相反,可以很簡單的使用slot filling插入這些事實,這樣也使得系統很難擴充到新的領域和任務。

這篇文章提出了一種純資料驅動的,基於知識的神經對話模型。本文提出的這個框架能夠透過多工學習來很自然的把對話和非對話資料聯合起來。 這是第一個大規模、純資料驅動的,並且能夠訪問外部知識庫的對話模型,並且其生成的回答不是像傳統的 slot filling 的形式,是使用 Seq2Seq 直接生成。


Architecture

這篇論文提出的框架如 Figure3 所示,其中的 World Facts 是一個集合,收集一些經過權威認證過的句子或者不準確的句子,作為知識庫。當個定一個輸入 S 和歷史,需要在 Fact 集合裡面檢索相關的 facts,這裡採用的 IR 引擎進行檢索,然後經過 Fact Encoder 進行 fact injection。新增 World Facts 集合裡面的元素是不需要重新訓練整個系統的。訓練採用多工學習 Minh-Thang Luong, Quoc V Le, Ilya Sutskever, Oriol Vinyals, and Lukasz Kaiser. 2015. Multi-task sequence to sequence learning. arXiv preprint arXiv:1511.06114. 

Encoder-Decoder 模型 

本文采用的 Cell 是 GRU 而不是 LSTM,實際中採用的層數是 2 層-GRU 網路,並且 encoder 和 decoder 不共享引數,也不共享詞向量。

Facts Encoder模型(Insight) 

與 Memory Network 相似,具體可參考 Sainbayar Sukhbaatar, Jason Weston, Rob Fergus, et al. 2015. End-to-end memory networks. In Advances in neural information processing systems. pages 2440–2448. 

Memory Network 廣泛應用在 QA 中,可參考 Tsung-Hsien Wen, Milica Gasic, Nikola Mrksˇic ́, Pei- Hao Su, David Vandyke, and Steve Young. 2015. Semantically conditioned LSTM-based natural lan- guage generation for spoken dialogue systems. In Proc. of EMNLP. Association for Computational Linguistics, Lisbon, Portugal, pages 1711–1721. 

實際採用的過程中,把原始 memory network 的輸入替換成 sequence 經過 encoder 的輸出 u,把原始 memory network 的輸出再作為 decoder 的輸入進行句子生成。整個過程 memory network 採用的是單層網路。

Conclusion 

從 Human-Evaluation 的結果來看,採用兩個指標 appropriateness 和 informativeness,讓該模型 Vs Baseline(Seq2Seq)進行比較,最後得到的結果是在第一個指標上差不多,但是在 informativeness 上明顯比較好,能夠提供更多有用的資訊。

wy19881022


論文提出了一種將 seq2seq 模型與事實相結合的方法,先使用 seq2seq 中的 encoder 計算出問句以及對話歷史 S(沒有使用 LSTM,而是使用了 GNU,好像業內都喜歡用 GNU),然後將事實透過關鍵詞檢索或者命令詞提取技術,獲取出相關的事實 f1,f2......最後透過計算 S 和 f1 的結合機率,輸入 decoder 中,輸出對應回答,理論上可以計算出跟機率最大事實相關的回應。 論文進行了兩種模型的訓練,一種不帶事實的模型訓練,一種帶有事實模型的訓練;奇妙的是,確定最終模型以後,可以透過修改事實庫,以達到動態擴充套件模型的作用。想法比較新穎,但是回應的準確率相比於 seq2seq 並沒有顯著的提升,事實相關性有所提升。

xwzhong


paper 提出使用 data-driven 和 knowledge-grounded 方式(23M general dialogue dataset+1M grounded dialogue dataset+1.1M tips),使 seq2seq 生成更加 contentful 的 response。

大致思路如下: 1. 對 post 資訊進行 encode,得到 vector u;2. 使用 post 文字資訊檢索與之相關的 tips(根據 tf-idf 計算相似度得到),並用式 2 得到 vector c;3. 使用 u 計算各個 c 的權重,並進行加權求和(式 4),最終相加得到 seq2seq 中 decoder 部分的隱層輸入(式 5)。 4. paper 提出了使用 post“相關的其它資訊”使生成的回覆更具實質內容,這個出發點不錯,引入其它資訊從某個角度講是降低了 post 的“熵”; 5. 模型在 deploy 某個 post 的其它 information 時,用了類似 attention 的機制,每條 tip 資訊輸出權重由 post 得到的 vector u 衡量,這一 trick 在多篇 paper 都有體現,而且效果還不錯。

MH233


Contribution:使用 conversation dataset 去訓練 Seq2Seq model or encoder-decoder model 並用於 chitchat 是很自然的想法(模型特質),但由於難以加入 external knowledge 無法產生與輸入文字更貼近的 response。本文提出的將 facts 也 encode 到模型中去也是比較自然的。就 end-to-end model 加入 external knowledge 做 task-oriented、personality、diversity dialogue 的文章也挺多的,但應該還有些研究點沒有覆蓋到。

mev


本文的 insight 比較獨特,也比較自然,使用非結構化的 knowledge 來使得 conversation 更加 informative。 做法其實也比較簡單,整個 MultiTask Model 主要分為兩個任務,1)普通的 seq2seq,學習句子生成的語法知識;2)帶外部資訊的 seq2seq,其實就是個 Memory Network,首先根據 query 中的 entity 在非結構化的知識庫中用 tf-idf 抽取相關的句子 F{f1,...,fn},然後用 RNN 給 query 編碼得到 u,用 bag of words 編碼 fi 得到 ri,用 attention 的方法得到 o,基於背景知識的對話模型,o 就是最終的 encode 的結果,使用普通的 decoder 得到 response。從最終的結果來看確實是提升了 informative,但感覺這個思路應該還有挺大的進步空間。

YinongLong


看了前面同學的筆記,我有不同的想法。首先,我認為這篇文章不是為了解決對話生成模型生成的 response 太 general 的問題,從文章的第二部分開始看,作者強調的是資料集對 world's knowledge 的覆蓋不全,所以生成回覆的時候也不能期待 generator 可以生成相關的回覆;其次,作者在自己的工作中也強調了自己的工作與傳統的填槽式的生成回覆的區別,也側面反映了自己的工作類似於填槽,但是作者強調了自己是 data-driven。 

然後,總覽這個模型,可以分成兩個部分,一是類似 Seq2Seq 的框架,用來學習 general conversational patterns;二是借用 End-to-End Memory Networks 來對 source embedding 和 relevant facts 進行操作,來生成 decoder 的 initial state。細節部分就是,開始的時候需要對 source sequence 進行 entity 識別(文中提到關鍵詞匹配和實體識別兩種型別的方法),根據識別的 entity,然後對 facts 進行檢索(文中提到使用簡單的關鍵字檢索方法),然後使用 encoder 對 source sequence 進行 embedding,使用 embedding 的結果作為 End-to-End Memory Networks 的輸入,而使用檢索出來的 facts 的 BOW 表示作為 Memory 部分,最後生成輸出 O,與前面的 source embedding 進行 summation 操作,作為 decoder 的 initial state 進行 response 的生成。 

整個模型根據上面來看不是很複雜,最後採用 multi-task learning 的方式進行學習,作者認為這麼做有幾點好處,一是可以對 encoder 和 decoder 進行 pre-train,二是給了我們一定的靈活性來更好的處理兩種型別的對話資料(我不是很確定)。最後,簡單說,這篇文章使用 Seq2Seq 的框架學習 general conversational patterns(即可以用來填的槽),而是用 End-to-End Memory Networks 學習槽內容,最後結合生成回覆。


相關文章