Key-Value Memory Network

首先,基本的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定義爲二元組向量(k1,v1,...,kM,vM)(k_1,v_1,...,k_M,v_M)。Memory的尋址和讀取分爲以下三個步驟:

  • Key Hashing
  • Key Addressing
  • Value Reading
Key Hashing

使用一個大小爲N的逆索引來尋找一個Memory的子集(kh1,vh1),...,(khN,vhN)(k_{h_1},v_{h_1}),...,(k_{h_N},v_{h_N}),其中的key以頻率小於1000的程度共享至少一個word (我認爲這是爲了哈希時防止碰撞,共享word則是爲了保證子集的整體有效性,作者給出了這種實現思路的來源)。

Key Addressing

在尋址過程中,每一個候選memory都會使用softmax函數來分配一個相關概率:
phi=Softmax(AΦX(x)AΦK(khi))p_{h_i}=Softmax(A\Phi_X(x)\cdot A\Phi_K(k_{h_i}))

其中Φ\Phi是一個維度爲DD的特徵映射,A是d×Dd\times D的矩陣,特徵應誰會在稍後詳細說明。xx是輸入的sentence。

Value Reading

最後一步使用尋址得到的概率對Memories做加權求和,得到向量oo
o=iphiAΦV(vhi)o=\sum_ip_h{_i}A\Phi_V(v_{h_i})

記憶讀取過程由控制器網絡來執行,它使用q=AΦX(x)q=A\Phi_X(x)作爲query。多跳情況下,會以q2=R1(q+o)q_2=R_1(q+o)的形式生成下一跳query,RRd×dd\times d的矩陣。多跳情況下會使用不同的矩陣RjR_j重複進行以上過程,但Key Hasing只做一次。上面提到的Key Addressing方程現在轉化到了phi=Softmax(qj+1AΦK(khi))p_{h_i}=Softmax(q_{j+1}^\top A\Phi_K(k_{h_i}))

這樣做的目的是不斷將新的證據組合進查詢中,以聚焦於新證據並抽取更恰當的內容。

HH跳之後,使用argmax來計算出一個可能輸出的最終預測:
a^=argmaxi=1,...,CSoftmax(qH+1BΦY(yi))\hat{a}=argmax_{i=1,...,C}Softmax(q_{H+1}^\top B\Phi_Y(y_i))
其中yiy_i是可能的輸出候選,比如KB裏面的所有實體。矩陣BB可以限制爲與矩陣AA相同。整個網絡以端到端的形式訓練,以最小化交叉熵的形式迭代存取以輸出想要地aa

注意:如果把key和value設置成對所有的memory都相同,模型就退化到了標準的端到端Memory Network。標準的端到端Memory Network也不會使用哈希,但是memory size非常的大時候使用哈希能降低計算複雜度,證明見這裏

Feature Map

作者在論文中列舉了5種feature map的實現方式,這也算是5種Key-Value Memory的實現方式。這些實現方式對於模型的整體效果還是有重大影響的。因爲編碼先驗知識的能力是KV-MemNNs的重要組成部分。

ΦX\Phi_X(query)和ΦY\Phi_Y(answer)簡單定義爲bag-of-words表示。ΦK\Phi_KΦV\Phi_V有以下五種定義方式:

  • 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
    將整個文檔拆分成大小爲WW個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:
在這裏插入圖片描述
其中\oplus表示concatenate,MtM_t在第t跳的參數矩陣,參數矩陣被應用於學習一個合適的方式組合公式中的三項。

Mask機制

論文提出的訓練模型的loss爲:
L(θ)=xh=1Htxlogaxh+λθ2L(\theta)=\sum_x\sum_{h=1}^Ht_xloga_x^h+\lambda \| \theta \|^2

其中txt_x表示目標分佈,axha_x^h表示a跳之後的分佈,即cross entropy + 正則項。loss函數能鼓勵模型生成更短地到達answers的路徑,並且鼓勵query更新方法mask掉先前跳數已經尋址到的信息。這樣設計的loss函數在加上stop key和query update的方式,實現了作者所稱的STOP策略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章