記憶網(wǎng)絡(luò)-End to end Memory Network

基礎(chǔ)Memory-network

傳統(tǒng)的RNN/LSTM等模型的隱藏狀態(tài)或者Attention機(jī)制的記憶存儲(chǔ)能力太弱,無(wú)法存儲(chǔ)太多的信息,很容易丟失一部分語(yǔ)義信息,所以記憶網(wǎng)絡(luò)通過(guò)引入外部存儲(chǔ)來(lái)記憶信息.記憶網(wǎng)絡(luò)的一般框架如下圖所示:

記憶網(wǎng)絡(luò)

它包括四個(gè)模塊:I(Input),G(Generalization),O(Output),R(Response),另外還包括一些記憶單元用于存儲(chǔ)記憶.
Input:輸入模塊,用于將文本資源(文檔或這KB)和問(wèn)題(question)等文本內(nèi)容編碼成向量.然后文本資源向量會(huì)作為Generalization模塊的輸入寫(xiě)入記憶單元中,而問(wèn)題向量會(huì)作為Output模塊的輸入.
Generalization:泛化模塊,用于對(duì)記憶單元的讀寫(xiě),也就是更新記憶的作用.
Output:輸出模塊,Output模塊會(huì)根據(jù)Question(也會(huì)進(jìn)過(guò)Input模塊進(jìn)行編碼)對(duì)memory的內(nèi)容進(jìn)行權(quán)重處理,將記憶按照與Question的相關(guān)程度進(jìn)行組合得到輸出向量.
Response:響應(yīng)模塊,將Output輸出的向量轉(zhuǎn)為用于回復(fù)的自然語(yǔ)言答案.

End-To-End Memory Networks

由于Memory-network的自身缺陷,不太容易使用反向傳播進(jìn)行訓(xùn)練,無(wú)法進(jìn)行end-to-end的訓(xùn)練,所以在基礎(chǔ)的模型之上進(jìn)行了擴(kuò)展,形成了可以end-to-end的模型.論文中提出了單層和多層兩種架構(gòu),多層其實(shí)就是將單層網(wǎng)絡(luò)進(jìn)行stack。我們先來(lái)看一下單層模型的架構(gòu)

單層 Memory Networks

單層Memory-network

輸入模塊:將文本資源sentence進(jìn)行embedding得到文本向量保存到Output和Input兩個(gè)記憶單元中,論文里介紹了兩種方法BoW和位置編.BOW就是直接將一個(gè)句子中所有單詞的詞向量求和表示成一個(gè)向量的形式,這種方法的缺點(diǎn)就是將丟失一句話中的詞序關(guān)系,進(jìn)而丟失語(yǔ)義信息;而位置編碼的方法,不同位置的單詞的權(quán)重是不一樣的,然后對(duì)各個(gè)單詞的詞向量按照不同位置權(quán)重進(jìn)行加權(quán)求和得到句子表示。位置編碼公式如下:lj就是位置信息向量

位置編碼

此外,為了編碼時(shí)序信息,比如Sam is in the bedroom after he is in the kitchen。我們需要在上面得到mi的基礎(chǔ)上再加上個(gè)矩陣對(duì)應(yīng)每句話出現(xiàn)的順序,不過(guò)這里是按反序進(jìn)行索引,所以最終每句話對(duì)應(yīng)的記憶mi的表達(dá)式如下所示:

最終記憶向量

這里給的符號(hào)A是Input中的A矩陣,同理,Output中的記憶向量也是這種方法求得,只不過(guò)矩陣符號(hào)換成B,結(jié)果不是mi是ci.注這里參數(shù)矩陣A和B不是共享的,都需要參與訓(xùn)練.

思考:是否可以使用RNN/CNN對(duì)文本表示進(jìn)行建模呢?

輸出模塊:上面的輸入模塊產(chǎn)生的兩個(gè)記憶模塊Output和Input.一個(gè)(Input)用于與問(wèn)題計(jì)算,得出問(wèn)題與各個(gè)memory slot的相關(guān)度,另一個(gè)(Output)用于與Input產(chǎn)生的相關(guān)度計(jì)算,得出答案輸出.
首先看第一部分,將Question經(jīng)過(guò)輸入模塊編碼成一個(gè)向量u,與mi維度相同,然后將其與每個(gè)mi點(diǎn)積得到兩個(gè)向量的相似度(也可以用其他方法計(jì)算相似度),在通過(guò)一個(gè)softmax函數(shù)進(jìn)行歸一化(得到Question與各個(gè)memory slot的相關(guān)度評(píng)分或者說(shuō)權(quán)重):

相關(guān)度權(quán)重

pi就是q與mi的相關(guān)性指標(biāo)。然后對(duì)Output中各個(gè)記憶ci按照pi進(jìn)行加權(quán)求和即可得到模型的輸出向量o,也可以理解為是memory中跟question相關(guān)信息的匯總.

輸出向量

Response模塊:輸出模塊根據(jù)Question產(chǎn)生了各個(gè)memory slot的加權(quán)求和,也就是記憶中有關(guān)Question的相關(guān)知識(shí),Response模塊主要是根據(jù)這些信息產(chǎn)生最終的答案。其結(jié)合o和q兩個(gè)向量的和與W相乘在經(jīng)過(guò)一個(gè)softmax函數(shù)產(chǎn)生各個(gè)單詞是答案的概率,值最高的單詞就是答案。并且使用交叉熵?fù)p失函數(shù)最為目標(biāo)函數(shù)進(jìn)行訓(xùn)練。

多層模型

多層Memory-network

首先來(lái)講,上面幾層的輸入就是下層o和u的和。至于各層的參數(shù)選擇,論文中提出了兩種方法(主要是為了減少參數(shù)量,如果每層參數(shù)都不同的話會(huì)導(dǎo)致參數(shù)很多難以訓(xùn)練)。

1. Adjacent:這種方法讓相鄰層之間的A=C。也就是說(shuō)Ak+1=Ck,此外W等于頂層的C,B等于底層的A,這樣就減少了一半的參數(shù)量。

2. Layer-wise(RNN-like):與RNN相似,采用完全共享參數(shù)的方法,即各層之間參數(shù)均相等。Ak=...=A2=A1,Ck=...=C2=C1。由于這樣會(huì)大大的減少參數(shù)量導(dǎo)致模型效果變差,所以提出一種改進(jìn)方法,即令uk+1=Huk+ok,也就是在每一層之間加一個(gè)線性映射矩陣H。

總結(jié):

Memory-Network可以用于MRC,KB-QA,多輪對(duì)話系統(tǒng)和語(yǔ)言模型建模.根據(jù)本人的理解,就是用于處理有歷史信息(閱讀理解中的文檔,多輪對(duì)話的歷史對(duì)話,以及語(yǔ)言建模中的前面的單詞或字)的問(wèn)題.本篇文章算是本人在學(xué)習(xí)memory-network時(shí)的筆記,所以有些地方寫(xiě)的不明白的可以參考大佬文章
知乎:嗚嗚哈?https://zhuanlan.zhihu.com/p/29679742.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容