论文浅尝 | 基于常识知识图谱感知和图注意力机制的对话生成
OpenKG 祝各位讀者中秋快樂!
鏈接:http://coai.cs.tsinghua.edu.cn/hml/media/files/2018_commonsense_ZhouHao_3_TYVQ7Iq.pdf
動機
在以前的工作中,對話生成的信息源是文本與對話記錄。但是這樣一來,如果遇到 OOV 的詞,模型往往難以生成合適的、有信息量的回復,而會產生一些低質的、模棱兩可的回復。
為了解決這個問題,有一些利用常識知識圖譜生成對話的模型被陸續提出。當使用常識性知識圖譜時,由于具備背景知識,模型更加可能理解用戶的輸入,這樣就能生成更加合適的回復。但是,這些結合了文本、對話記錄、常識知識圖譜的方法,往往只使用了單一三元組,而忽略了一個子圖的整體語義,會導致得到的信息不夠豐富。
為了解決這些問題,文章提出了一種基于常識知識圖譜的對話模型(commonsense knowledge aware conversational model,CCM)來理解對話,并且產生信息豐富且合適的回復。本文提出的方法,利用了大規模的常識性知識圖譜。首先是理解用戶請求,找到可能相關的知識圖譜子圖;再利用靜態圖注意力(static graph attention)機制,結合子圖來理解用戶請求;最后使用動態圖注意力(dynamic graph attention)機制來讀取子圖,并產生合適的回復。通過這樣的方法,本文提出的模型可以生成合適的、有豐富信息的對話,提高對話系統的質量。
貢獻
文章的貢獻有:
(1)首次嘗試使用大規模常識性知識圖譜來處理對話生成問題;
(2)對知識圖譜子圖,提出了靜態/動態圖注意力機制來吸收常識知識,利于理解用戶請求與生成對話;
方法
⒈Encoder-Decoder 模型
經典的Encoder-Decoder模型是基于sequence-to-sequence(seq2seq)的。encoder模型將用戶輸入(user post)X 用隱狀態 H 來表示,而decoder模型使用另一個GRU來循環生成每一個階段的隱狀態
其中 c_t 是上下文向量,通過注意力機制按步生成。最終,decoder模型根據概率分布生成了輸出狀態,并產生每一步的輸出token。
?
⒉模型框架:如下圖1所示為本文提出的CCM模型框架。
圖1 CCM模型框架
如圖1所示,基于n個詞輸入,會輸出n個詞作為回復,模型的目的就是預估這么一個概率分布:
,即將圖信息 G 加入到概率分布的計算中。在信息讀取時,根據每個輸入的詞 x,找到常識知識圖譜中對應的子圖(若沒有對應的子圖,則會生成一個特殊的圖Not_A_Fact),每個子圖又包含若干三元組。在信息讀取時,詞向量與這個詞對應的子圖向量拼接,而子圖向量是由采用靜態圖注意力機制生成的。當生成回復時,采用動態圖注意力機制來引用圖信息,即讀取每個字對應的子圖和子圖中的實體,并且在生成當前回復時,通過概率計算應該是生成通用詞還是這個子圖中的相關實體。
⒊知識編譯模塊:如圖2所示,為如何利用圖信息編譯post的示意圖。
圖2 知識編譯模塊
如圖所示,當編譯到“rays”時,會把這個詞在知識圖譜中相關的子圖得到(圖2最上的黃色高兩部分),并生成子圖的向量。每一個子圖都包含了key entity(即這里的rays),以及這個“rays”的鄰居實體和相連關系。對于詞“of”,由于無法找到對應的子圖,所以就采用特殊子圖Not_A_Fact來編譯。之后,采用基于靜態注意力機制,CCM會將子圖映射為向量 g_i,然后把詞向量w(x_t)和 g_i 拼接為e(x_t)=[w(x_t); g_i],并將這個 e(x_t) 替換傳統encoder-decoder中的 e(x_t) 進行GRU計算。
對于靜態圖注意力機制,CCM是將子圖中所有的三元組都考慮進來,而不是只計算一個三元組,這也是該模型的一個創新點。當得到子圖時,且這個子圖由三元組K表示, K(g_i)={k_1,k_2,…,k_(N_G)}。在計算時,就是將當前三元組的頭實體與尾實體向量通過矩陣變換后相加,再經過正切激活函數后,與經過矩陣變換的關系進行點積,得到一個值。而將這個詞向量與所有三元組進行計算后,再經過softmax,就得到了一個權重。把子圖中所有頭實體、尾實體按對相加,再基于權重計算加權和,就得到了圖向量 g_i。
?
⒋知識生成模塊
如下圖3所示,為如何利用圖信息生成回復的示意圖。
圖3 知識生成模塊
在生成時,不同于靜態圖注意力機制,模型會讀取所有相關的子圖,而不是當前詞對應的子圖,而在讀取時,讀取注意力最大的就是圖中粉色高亮的部分。生成時,會根據計算結果,來選擇是生成通用字(generic word)還是子圖中的實體。
在進行decoder時,公式改為
,而
是指,將生成的詞向量,以及這個詞來自的三元組向量進行拼接(如果生成的是一個通用詞,那么三元組就是Not_A_Fact)。在這里,可以看到GRU的輸入多了兩個向量 c_t^g(來自于表示圖信息的向量)和 c_t^k(表示三元組信息的向量)。
對于動態圖注意力機制,是一種層次型的計算,即CCM先根據post相關的所有知識圖譜子圖來計算一個向量 c_t^g,再根據子圖中的三元組再計算一個向量 c_t^k。對于上個階段的隱狀態輸出 s_t,最終的 c_t^g 是圖向量 g_i 的加權和。
然后,對于每個子圖中的三元組 k_j,CCM又計算了一次注意力,最終的 c_t^k 是 k_j 的加權和,權重為對應圖 g_i 的注意力權重與三元組 k_j 的注意力權重之積。
最終,每一個step的輸出,是根據 s_t 來選擇一個通用詞或者子圖中的實體。
?
⒌損失函數
損失函數為預期輸出與實際輸出的交叉熵,除此之外,為了監控選擇通用詞還是實體的概率,又增加了一個交叉熵。公式如下:
其中就是選擇的概率,而就是一個Boolean值,表示在實際輸出Y中是選擇了通用詞還是實體。
實驗
⑴. 實驗相關細節
常識性知識圖譜選用了ConceptNet,對話數據集選用了reddit的一千萬條數據集,如果一個post-response不能以一個三元組表示(一個實體出現于post,另一個出現于response),就將這個數據去除。然后對剩下的對話數據,根據post的詞的出現頻數,分為四類。
而基線系統選擇了如下三個:只從對話數據中生成response的seq2seq模型、存儲了以TransE形式表示知識圖譜的MemNet模型、從三元組中copy一個詞或生成通用詞的CopyNet。
而選用metric的時候,采用了刻畫回復內容是否語法正確且貼近主題的perplexity,以及有多少個知識圖譜實體被生成的entity score。
?
⑵. 實驗結果
如下圖4所示,為根據perplexity和entity score進行的性能比較,可見CCM的perplexity最低,且選取entity的數量最多。并且,在低頻詞時,選用的entity更多。這表示在訓練時比較罕見的詞(實體)會需要更多的背景知識來生成答復。
圖4 CCM與基線系統對比結果
另外,作者還采用眾包的方式,來人為審核response的質量,并采用了兩種度量值appropriateness(內容是否語法正確,是否與主題相關,是否有邏輯)與informativeness(內容是否提供了post之外的新信息)。如下圖5所示,為基于眾包的性能比較結果。
圖5 CCM與基線系統基于眾包的對比結果
從圖5中可見,CCM對于三個基線系統來說,都有將近60%的回復是更優的。并且,在OOV的數據集上,CCM比seq2seq高出很多,這是由于CCM對于這些低頻詞或未登錄詞,可以用知識圖譜去補全,而seq2seq沒有這樣的知識來源。
而在case study中,當在post中遇到未登錄詞“breakable”時,seq2seq和MemNet都只能輸出一些通用的、模棱兩可的、毫無信息量的回復。CopyNet能夠利用知識圖譜輸出一些東西,但是并不合適。而CCM卻可以輸出一個合理的回復。
總結
本文提出了一種結合知識圖譜信息的encoder-decoder方法,引入靜態/動態圖注意力機制有效地改善了對話系統中response的質量。通過自動的和基于眾包的形式進行性能對比,CCM模型都是優于基線系統的。
?
論文筆記整理:花云程,東南大學博士,研究方向為知識圖譜問答、自然語言處理。
OpenKG.CN
中文開放知識圖譜(簡稱OpenKG.CN)旨在促進中文知識圖譜數據的開放與互聯,促進知識圖譜和語義技術的普及和廣泛應用。
點擊閱讀原文,進入 OpenKG 博客。
總結
以上是生活随笔為你收集整理的论文浅尝 | 基于常识知识图谱感知和图注意力机制的对话生成的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于python中带下划线的变量和函数
- 下一篇: 王仲远 | 基于概念知识图谱的短文本理解