[End-to-End Memory 中文博客參考link]
[Key-Value Memory 中文博客參考link1鸵赫、link2]
主要參考15、16年的兩篇NLP論文:
發(fā)表年月 | 論文鏈接 |
---|---|
1503.08895 | End-To-End Memory |
1606.03126 | Key-Value Memory |
-1- Memory Network
-1.1- Memory Network模型結(jié)構(gòu)
上次提到的Attention模型吹泡,在EncoderDecoder的基礎(chǔ)上引入Attention Model(通常為一個(gè)前饋多層神經(jīng)網(wǎng)絡(luò))計(jì)算更多數(shù)量的Context Vector來(lái)降低對(duì)Input Sentence壓縮時(shí)產(chǎn)生的信息損失氏捞,但是即便如此舷蟀,仍然無(wú)法存儲(chǔ)太多的信息,還是會(huì)丟失部分語(yǔ)義信息败明。
Memory Network記憶網(wǎng)絡(luò)
通過(guò)引入外部存儲(chǔ)來(lái)記憶信息隘马。記憶網(wǎng)絡(luò)由I(Input)、G(Generalization)妻顶、O(Output)酸员、R(Response)四個(gè)模塊和一些記憶單元構(gòu)成蜒车,其中:
I(Input)
:
輸入模塊,用于將文本資源(文檔或這KB)和問(wèn)題(question)等文本內(nèi)容編碼成向量幔嗦。
然后文本資源向量會(huì)作為Generalization模塊的輸入寫(xiě)入記憶單元中酿愧,而問(wèn)題向量會(huì)作為Output模塊的輸入。
G(Generalization)
:
泛化模塊邀泉,用于對(duì)記憶單元的讀寫(xiě)嬉挡,也就是更新記憶的作用。
O(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)行組合得到輸出向量。
R(Response)
:
響應(yīng)模塊屁置,將Output輸出的向量轉(zhuǎn)為用于回復(fù)的自然語(yǔ)言答案焊夸。
但是基礎(chǔ)的Memory-network結(jié)構(gòu)設(shè)計(jì)由缺陷,不太容易使用反向傳播進(jìn)行訓(xùn)練蓝角,也就是說(shuō)無(wú)法進(jìn)行end-to-end的訓(xùn)練。
-2- End-to-End Memory Network
-2.1- End-to-End Memory模型結(jié)構(gòu)
前面說(shuō)了基礎(chǔ)的Memory-network饭冬,但是由于其結(jié)構(gòu)設(shè)計(jì)缺陷使鹅,不太容易使用反向傳播進(jìn)行訓(xùn)練,也就是說(shuō)無(wú)法進(jìn)行end-to-end的訓(xùn)練昌抠。
End-to-End Memory Network端到端記憶網(wǎng)絡(luò)
在上述的Memory Network模型的基礎(chǔ)之上進(jìn)行了擴(kuò)展患朱,形成了可以end-to-end訓(xùn)練的模型。論文中提出了單層和多層兩種架構(gòu)(多層其實(shí)就是將單層網(wǎng)絡(luò)進(jìn)行stack)炊苫,下圖中左邊半圖是單層的End-to-End Memory
模型架構(gòu)裁厅,右邊半圖是多層的End-to-End Memory
模型架構(gòu):
左邊是單層的End-to-End Memory
模型架構(gòu),單層Memory Network模型由I(Input)侨艾、O(Output)执虹、R(Response)三個(gè)模塊和一些記憶單元構(gòu)成。右邊是多層的End-to-End Memory
模型架構(gòu)唠梨,多層的End-to-End Memory其實(shí)就是將單層網(wǎng)絡(luò)進(jìn)行stack袋励。
詳細(xì)解讀單層的End-to-End Memory
模型架構(gòu)中各組件:
輸入模塊
:
將文本資源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)求和得到句子表示磺芭。
輸出模塊
:
上面的輸入模塊產(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)重)
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)練逗抑。
再來(lái)說(shuō)說(shuō)多層的End-to-End Memory
模型架構(gòu):
上面幾層的輸入就是下層o和u的和。
至于各層的參數(shù)選擇寒亥,論文中提出了兩種方法:
Adjacent
:
這種方法讓相鄰層之間的A=C邮府。也就是說(shuō)Ak+1=Ck,此外W等于頂層的C溉奕,B等于底層的A褂傀,這樣就減少了一半的參數(shù)量。
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粟焊。
-2.2- End-to-End Memory模型中待訓(xùn)練的參數(shù)矩陣
-3- Key-Value Memory Network
-3.1- Key-Value Memory模型結(jié)構(gòu)
前面說(shuō)了Memory-network的基礎(chǔ)模型以及可以End-to-End的擴(kuò)展形式。但是其模型還是有很多缺陷孙蒙,比如:只能處理簡(jiǎn)單的文本數(shù)據(jù)项棠、無(wú)法適用于目前主流的一些QA文本資源,比如知識(shí)庫(kù)和wiki文章挎峦。
Key-Value Memory Network
就是解決這個(gè)問(wèn)題的模型香追,模型架構(gòu)主要由Key Hashing
、Key Addressing
浑测、Value Reading
翅阵、Controller
、Answering
五個(gè)模塊組成迁央。
-3.2- Key-Value Memory模型中待訓(xùn)練的參數(shù)矩陣
Feature Map
掷匠、
、
岖圈、
:
將question_x映射到一個(gè)d*1維的向量question_embedding :
將key映射到一個(gè)d*1維的向量key_embedding
將value映射到一個(gè)d*1維的向量value_embedding
將召回答案y映射到一個(gè)d*1維的向量answer_embedding
矩陣A
:
是一個(gè)d*D維的矩陣讹语。是用于計(jì)算query、
的參數(shù)矩陣蜂科。
矩陣
:
是一個(gè)d*d維的矩陣顽决。是Controller用來(lái)更新query短条,繼而更新
的參數(shù)矩陣。設(shè)定要更新H個(gè)hop才菠,所以共有H個(gè)
矩陣茸时。
矩陣B
:
是一個(gè)d*D維的矩陣。是用于計(jì)算answer的參數(shù)矩陣赋访。
-3.3- Key-Value Memory模型的前向傳播:
Step-1 : Key Hashing
:
已有M個(gè)memory:
對(duì)于question x
, 在M個(gè)memory中選擇包含N個(gè)元素的子集可都,它們的key至少與x有一個(gè)單詞相同,得到memory subset:
Step-2 : Key Addressing
:
*
先計(jì)算question_embedding
蚓耽,記作query:
其中:A是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣渠牲,
是D維的feature maps,類(lèi)似于bag-of-word映射步悠,
是question x签杈,map后的
是一個(gè)D*1維的向量。
計(jì)算得到的question_embedding是一個(gè)d*1維的向量鼎兽。
*
然后是key_embedding
:
其中:A是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣答姥,
是D維的feature maps,類(lèi)似于bag-of-word映射谚咬,
是對(duì)于當(dāng)前question_x篩選出來(lái)的第
個(gè)key踢涌,map后的
是一個(gè)D*1維的向量。
計(jì)算得到的key_embedding是一個(gè)d*1維的向量序宦。
*
然后就可以根據(jù)question_embedding和key_embedding計(jì)算key_addressing
,記作:
計(jì)算得到的是一個(gè)prob數(shù)值背苦。
最終會(huì)得到互捌、
,... 行剂,
共計(jì)N個(gè)prob值的key_addressing秕噪。
個(gè)人理解這一步計(jì)算的是question_x和備選的N個(gè)memory_key的匹配程度。
Step-3 : Value Reading
:
*
現(xiàn)在是value_embedding
:
其中:A是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣厚宰,
是D維的feature maps腌巾,類(lèi)似于bag-of-word映射,
是對(duì)于當(dāng)前question_x篩選出來(lái)的第
個(gè)key對(duì)應(yīng)的v铲觉,map后的
是一個(gè)D*1維的向量澈蝙。
計(jì)算得到的value_embedding是一個(gè)d*1維的向量。
*
然后就可以根據(jù)key_addressing和value_embedding計(jì)算value_reading
撵幽,記作:
其中:A是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣灯荧,是D維的feature maps,類(lèi)似于bag-of-word映射盐杂,
是對(duì)于當(dāng)前question_x篩選出來(lái)的第
個(gè)key對(duì)應(yīng)的v逗载,map后的
是一個(gè)D*1維的向量哆窿,
是一個(gè)d*1維的向量,
是一個(gè)乘上prob_i后的d*1維的向量厉斟。
計(jì)算得到的value_readingo
是N個(gè)向量按照各自prob加權(quán)求和后的d*1維的向量挚躯。
Step-4 : Iterate
:
由上可知,根據(jù)question_x和參數(shù)矩陣A擦秽、map矩陣码荔,可以得到question_embedding的表示query
q
(d*1維):
經(jīng)過(guò)key_embedding、key_addressing兩步計(jì)算得到,
, ... ,
号涯,再經(jīng)過(guò)value_embedding目胡、value_reading兩步計(jì)算,可以得到輸出
o
(d*1維):
這個(gè)時(shí)候链快,待訓(xùn)練的參數(shù)矩陣(d*d維)就上場(chǎng)啦~參數(shù)矩陣
用于更新query向量(d*1維)誉己,并重新計(jì)算query向量和N個(gè)key_embedding向量
的匹配度
,
, ... ,
。該步會(huì)進(jìn)行H個(gè)hop域蜗,每一個(gè)hop會(huì)使用不同的參數(shù)矩陣
巨双。
query的更新
(d*1維):
key_addressing的更新
(N個(gè)標(biāo)量):
Step-5 : Answering
:
其中:B是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣,是D維的feature maps霉祸,類(lèi)似于bag-of-word映射筑累,
是對(duì)于當(dāng)前召回的第
個(gè)備用的答案y(召回池一共有C個(gè)答案),map后的
是一個(gè)D*1維的向量丝蹭,
是一個(gè)d*1維的向量慢宗,
是兩個(gè)d維向量相乘得到的標(biāo)量。
計(jì)算得到的answer是1,2,...,C中的一個(gè)值奔穿。