首先,基本的Memorry Network中是使用sentence(passage)來構造memory,然後計算和query的匹配程度,再根據匹配程度計算輸出,用於下游任務。而Key-Value Memory Network則是使用(K,V)對來構造memory,這種構造方式是爲了解決文檔閱讀QA任務裏面對外部知識(或者稱先驗知識)的應用。Key-Value Memory的哈希,尋址,讀取等步驟是論文的核心,也是閃光點。
Prerequisite
Deep Memory Network 深度記憶網絡
Deep Memory Network在Aspect Based Sentiment方向上的應用(optional)
Key-Value Memory Networks for Directly Reading Documents
Key-Value Memory Network由facebook在2016年的一篇論文提出,它主要是爲了解決QA應用知識庫時,知識庫可能過於受限,其儲存知識的模式(schema)可能不支持某些類型的回答,而且知識庫可能過於稀疏等問題。論文提出的模型不僅適用於基於KB的QA,而且適用於基於WIKI文章的QA和基於信息抽取的QA。
作者在論文中也提出了一個新的數據集Movie QA,它包含了覆蓋電影領域的十萬+QA,而且能進行KB,wiki文檔以及IE三種知識來源爲背景的QA。
KV-MemNNs的模型結構如下:
由模型圖可以看出,Key-Value Memory來源於Question和Knowledge Source,其中Key對應Question,Value則對應Knowledge Source。
Key-Value Memory
KV-MemNNs中,memory slots定義爲二元組向量。Memory的尋址和讀取分爲以下三個步驟:
- Key Hashing
- Key Addressing
- Value Reading
Key Hashing
使用一個大小爲N的逆索引來尋找一個Memory的子集,其中的key以頻率小於1000的程度共享至少一個word (我認爲這是爲了哈希時防止碰撞,共享word則是爲了保證子集的整體有效性,作者給出了這種實現思路的來源)。
Key Addressing
在尋址過程中,每一個候選memory都會使用softmax函數來分配一個相關概率:
其中是一個維度爲的特徵映射,A是的矩陣,特徵應誰會在稍後詳細說明。是輸入的sentence。
Value Reading
最後一步使用尋址得到的概率對Memories做加權求和,得到向量。
記憶讀取過程由控制器網絡來執行,它使用作爲query。多跳情況下,會以的形式生成下一跳query,是的矩陣。多跳情況下會使用不同的矩陣重複進行以上過程,但Key Hasing只做一次。上面提到的Key Addressing方程現在轉化到了。
這樣做的目的是不斷將新的證據組合進查詢中,以聚焦於新證據並抽取更恰當的內容。
在跳之後,使用argmax來計算出一個可能輸出的最終預測:
其中是可能的輸出候選,比如KB裏面的所有實體。矩陣可以限制爲與矩陣相同。整個網絡以端到端的形式訓練,以最小化交叉熵的形式迭代存取以輸出想要地。
注意:如果把key和value設置成對所有的memory都相同,模型就退化到了標準的端到端Memory Network。標準的端到端Memory Network也不會使用哈希,但是memory size非常的大時候使用哈希能降低計算複雜度,證明見這裏。
Feature Map
作者在論文中列舉了5種feature map的實現方式,這也算是5種Key-Value Memory的實現方式。這些實現方式對於模型的整體效果還是有重大影響的。因爲編碼先驗知識的能力是KV-MemNNs的重要組成部分。
(query)和(answer)簡單定義爲bag-of-words表示。和有以下五種定義方式:
-
KB Triple
在知識庫的結構化三元組(subject, relation, object)中,將subject和relation作爲key,object作爲value。作者也將三元組中的subject和object取反,這樣得到了兩倍大小的知識庫。 -
Sentence Level
將整個文檔拆分成句子,每一個memory slot編碼一個句子,key和value都以bag-of-words的形式編碼整個句子。因爲key和value相同,所以這與標準的MemNN相同。 -
Window Level
將整個文檔拆分成大小爲個word的窗口,對每個窗口使用bag-of-words表示。這種表示在MemNN表現良好。但是在這裏,作者將key定義爲整個窗口,而value僅僅是窗口的中心詞。作者認爲整個窗口和問題(key)更爲匹配,而中心詞和答案(value)更爲匹配。 -
Window + Center Encoding
和上面不同,該種方式混合了中心詞的表示。將整個字典大小翻倍,用第二個字典編碼窗口的中心詞和value。這種方式將可以幫助模型分辨更與中心詞(answer)相關還是更與其他詞(question)相關。 -
Window + Title
一個文檔的title通常和其包含文本中的一個問題相關。基於這個理由,作者設計了這種表示。Word Window和之前一樣,但value定義爲文本的title。作者也保留了windows-level的(window,center)key-value對錶示
。注意,這樣的話memory slot的大小就加倍了。爲了分辨不同values來源的keys,作者在key前面加上了額外特徵"_window_“和”_title_"。
五種表示的實驗區別如下:
擴展
Key Value Memory Network並沒有得到廣泛應用,我認爲可能是整體模型的計算複雜度還是太高了。爲了應用外部知識而將整個KB或者WIKI文檔庫放到memory中,即使採用哈希來降低計算複雜度但代價仍然很高,在實際中可能不是很好的實現方法。如果能解決這個問題,我想也是一個非常大改進。
DBLP上一共可以搜到12篇與Key-Value Memory Network相關的內容。它的另外一個主要應用方向是Knowledge tracing。
在主要應用方向上,NAACL-HLT (1) 2019有一篇題爲Enhancing Key-Value Memory Neural Networks for Knowledge Based Question Answering的論文(騰訊與清華聯合)。該論文將KV-MemNNs由基於知識庫的淺層推理推廣到針對複雜問題的可打斷推理,即KBQA。論文提出了mask和一種Stop機制來避免重複閱讀memory引入錯誤的標記信號,以實現多跳推理。作者在實驗中證明了這些機制可以使得傳統的KV-MemNNs在複雜問題上獲得更好的推理能力,並能夠達到stat-of-the-art。
Enhancing Key-Value Memory Neural Networks for Knowledge Based Question Answering
模型的基本架構和前面的介紹相同,但計算步驟有些區別,下面會詳細介紹不同的地方。作者在論文裏給出一個較爲簡潔的模型圖描述KV-MemNNs:
作者在論文中提出的模型如下:
Stop機制
Stop機制非常簡單,就是在key加入一個特殊的符號表示全零向量。Stop key被設計用於告訴模型已經積累了足夠的事實來回答問題,不需要再增加跳數去memory中尋找更多事實了。
Query 更新
使用以下方式更新query:
其中表示concatenate,在第t跳的參數矩陣,參數矩陣被應用於學習一個合適的方式組合公式中的三項。
Mask機制
論文提出的訓練模型的loss爲:
其中表示目標分佈,表示a跳之後的分佈,即cross entropy + 正則項。loss函數能鼓勵模型生成更短地到達answers的路徑,並且鼓勵query更新方法mask掉先前跳數已經尋址到的信息。這樣設計的loss函數在加上stop key和query update的方式,實現了作者所稱的STOP策略。