序列建模(五):Key-Value Memory

[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網(wǎng)絡(luò).png

但是基礎(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模型結(jié)構(gòu).png

左邊是單層的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 HashingKey Addressing浑测、Value Reading翅阵、ControllerAnswering五個(gè)模塊組成迁央。

用于處理QA問(wèn)題的Key-Value Memory模型結(jié)構(gòu).png
-3.2- Key-Value Memory模型中待訓(xùn)練的參數(shù)矩陣

Feature Map\Phi_X()掷匠、\Phi_K()\Phi_V()岖圈、\Phi_Y()
\Phi_X(x)將question_x映射到一個(gè)d*1維的向量question_embedding :\vec{query\_q}
\Phi_K(k_{h_i})將key映射到一個(gè)d*1維的向量key_embedding
\Phi_V(v_{h_i})將value映射到一個(gè)d*1維的向量value_embedding
\Phi_Y(y_{i})將召回答案y映射到一個(gè)d*1維的向量answer_embedding

矩陣A
A是一個(gè)d*D維的矩陣讹语。是用于計(jì)算query、p_{h_i}的參數(shù)矩陣蜂科。

矩陣R_j\ (j=1,2,...,H)
R_j是一個(gè)d*d維的矩陣顽决。是Controller用來(lái)更新query短条,繼而更新p_{h_i}的參數(shù)矩陣。設(shè)定要更新H個(gè)hop才菠,所以共有H個(gè)R矩陣茸时。

矩陣B
B是一個(gè)d*D維的矩陣。是用于計(jì)算answer的參數(shù)矩陣赋访。

-3.3- Key-Value Memory模型的前向傳播:

Step-1 : Key Hashing
已有M個(gè)memory:
(k_1, v_1), (k_2, v_2), ... , (k_M, v_M)
對(duì)于question x, 在M個(gè)memory中選擇包含N個(gè)元素的子集可都,它們的key至少與x有一個(gè)單詞相同,得到memory subset:
(k_{h_1}, v_{h_1}), (k_{h_2}, v_{h_2}), ... , (k_{h_N}, v_{h_N})
Step-2 : Key Addressing
*先計(jì)算question_embedding蚓耽,記作queryq
\overrightarrow q=A \Phi_X(x)其中:A是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣渠牲,\Phi_X()是D維的feature maps,類(lèi)似于bag-of-word映射步悠,x是question x签杈,map后的\Phi_X(x)是一個(gè)D*1維的向量。
計(jì)算得到的question_embedding是一個(gè)d*1維的向量鼎兽。

*然后是key_embedding
A \Phi_K(k_{h_i})其中:A是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣答姥,\Phi_K()是D維的feature maps,類(lèi)似于bag-of-word映射谚咬,k_{h_i}是對(duì)于當(dāng)前question_x篩選出來(lái)的第i個(gè)key踢涌,map后的\Phi_K(k_{h_i})是一個(gè)D*1維的向量。
計(jì)算得到的key_embedding是一個(gè)d*1維的向量序宦。

*然后就可以根據(jù)question_embedding和key_embedding計(jì)算key_addressing,記作p_{h_i}
\begin{equation}\begin{split} p_{h_i} &=Softmax(question\_embedding·key\_embedding)\\ &=Softmax(\overrightarrow{query}·A \Phi_K(k_{h_i})) \\ &=Softmax(\overrightarrow{q}·A \Phi_K(k_{h_i})) \\ &=Softmax(A \Phi_X(x)·A \Phi_K(k_{h_i})) \end{split}\end{equation}
計(jì)算得到的p_{h_i}是一個(gè)prob數(shù)值背苦。
最終會(huì)得到p_{h_1}互捌、p_{h_2},... 行剂, p_{h_N}共計(jì)N個(gè)prob值的key_addressing秕噪。
個(gè)人理解這一步計(jì)算的是question_x和備選的N個(gè)memory_key的匹配程度。

Step-3 : Value Reading
*現(xiàn)在是value_embedding
A \Phi_V(v_{h_i})其中:A是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣厚宰,\Phi_V()是D維的feature maps腌巾,類(lèi)似于bag-of-word映射,v_{h_i}是對(duì)于當(dāng)前question_x篩選出來(lái)的第i個(gè)key對(duì)應(yīng)的v铲觉,map后的\Phi_V(v_{h_i})是一個(gè)D*1維的向量澈蝙。
計(jì)算得到的value_embedding是一個(gè)d*1維的向量。

*然后就可以根據(jù)key_addressing和value_embedding計(jì)算value_reading撵幽,記作o
\begin{equation}\begin{split} \overrightarrow o &={\sum_{i=1}^N} (p_{h_i} * A · value\_embedding) \\ &={\sum_{i=1}^N} (p_{h_i} * A · \Phi_V(v_{h_i})) \end{split}\end{equation}
其中:A是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣灯荧,\Phi_V()是D維的feature maps,類(lèi)似于bag-of-word映射盐杂,v_{h_i}是對(duì)于當(dāng)前question_x篩選出來(lái)的第i個(gè)key對(duì)應(yīng)的v逗载,map后的\Phi_V(v_{h_i})是一個(gè)D*1維的向量哆窿,A · \Phi_V(v_{h_i})是一個(gè)d*1維的向量,p_{h_i} * A · \Phi_V(v_{h_i})是一個(gè)乘上prob_i后的d*1維的向量厉斟。
計(jì)算得到的value_readingo是N個(gè)向量按照各自prob加權(quán)求和后的d*1維的向量挚躯。

Step-4 : Iterate
由上可知,根據(jù)question_x和參數(shù)矩陣A擦秽、map矩陣\Phi_X()码荔,可以得到question_embedding的表示queryq(d*1維):
\overrightarrow{q}=A \Phi_X(x)
經(jīng)過(guò)key_embedding、key_addressing兩步計(jì)算得到p_{h_1}, p_{h_2}, ... , p_{h_N}号涯,再經(jīng)過(guò)value_embedding目胡、value_reading兩步計(jì)算,可以得到輸出o(d*1維):
\overrightarrow{o}={\sum_{i=1}^N} (p_{h_i} * A · \Phi_V(v_{h_i}))
這個(gè)時(shí)候链快,待訓(xùn)練的參數(shù)矩陣R(d*d維)就上場(chǎng)啦~參數(shù)矩陣R用于更新query向量(d*1維)誉己,并重新計(jì)算query向量和N個(gè)key_embedding向量k_{h_i}的匹配度p_{h_1}, p_{h_2}, ... , p_{h_N}。該步會(huì)進(jìn)行H個(gè)hop域蜗,每一個(gè)hop會(huì)使用不同的參數(shù)矩陣R_j\ (j=1,2, ... , H)巨双。
query的更新(d*1維):
q_{j+1}=R_j(q_j+o)
key_addressing的更新(N個(gè)標(biāo)量):
p_{h_i\_j}=Softmax( q_{j+1}{\top}·A·\Phi_K(k_{h_i}) )

Step-5 : Answering
\hat{a}= \mathop {argmax}_{i=1,2,...,C} Softmax( q_{H+1}{\top}·B·\Phi_Y(y_{i}) )
其中:B是一個(gè)d*D維的待訓(xùn)練參數(shù)矩陣,\Phi_Y()是D維的feature maps霉祸,類(lèi)似于bag-of-word映射筑累,y_{i}是對(duì)于當(dāng)前召回的第i個(gè)備用的答案y(召回池一共有C個(gè)答案),map后的\Phi_Y(y_i)是一個(gè)D*1維的向量丝蹭,B · \Phi_Y(y_i)是一個(gè)d*1維的向量慢宗,q_{H+1}{\top}·B·\Phi_Y(y_{i})是兩個(gè)d維向量相乘得到的標(biāo)量。
計(jì)算得到的answer\hat{a}是1,2,...,C中的一個(gè)值奔穿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镜沽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贱田,更是在濱河造成了極大的恐慌缅茉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件男摧,死亡現(xiàn)場(chǎng)離奇詭異蔬墩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)耗拓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)拇颅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人帆离,你說(shuō)我怎么就攤上這事蔬蕊。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵岸夯,是天一觀的道長(zhǎng)麻献。 經(jīng)常有香客問(wèn)我,道長(zhǎng)猜扮,這世上最難降的妖魔是什么勉吻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮旅赢,結(jié)果婚禮上齿桃,老公的妹妹穿的比我還像新娘。我一直安慰自己煮盼,他們只是感情好短纵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著僵控,像睡著了一般香到。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上报破,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天悠就,我揣著相機(jī)與錄音,去河邊找鬼充易。 笑死梗脾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盹靴。 我是一名探鬼主播炸茧,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼稿静!你這毒婦竟也來(lái)了宇立?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤自赔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后柳琢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绍妨,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年柬脸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了他去。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倒堕,死狀恐怖灾测,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垦巴,我是刑警寧澤媳搪,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布铭段,位于F島的核電站,受9級(jí)特大地震影響秦爆,放射性物質(zhì)發(fā)生泄漏序愚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一等限、第九天 我趴在偏房一處隱蔽的房頂上張望爸吮。 院中可真熱鬧,春花似錦望门、人聲如沸形娇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桐早。三九已至,卻和暖如春纫事,著一層夾襖步出監(jiān)牢的瞬間勘畔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工丽惶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炫七,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓钾唬,卻偏偏與公主長(zhǎng)得像万哪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抡秆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容