論文淺嘗 | 基於常識知識圖譜感知和圖注意力機制的對話生成
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
圖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 部落格。