一渊胸、Seq2Seq 模型
1. 簡介
Sequence-to-sequence (seq2seq) 模型旬盯,顧名思義,其輸入是一個(gè)序列蹬刷,輸出也是一個(gè)序列瓢捉,例如輸入是英文句子,輸出則是翻譯的中文办成。seq2seq 可以用在很多方面:機(jī)器翻譯泡态、QA 系統(tǒng)、文檔摘要生成迂卢、Image Captioning (圖片描述生成器)某弦。
2. 基本框架
第一種結(jié)構(gòu)
[參考1]論文中提出的 seq2seq 模型可簡單理解為由三部分組成:Encoder、Decoder 和連接兩者的 State Vector (中間狀態(tài)向量) C 而克。
上圖中 Encoder 和 Decoder 可以是一個(gè) RNN 靶壮,但通常是其變種 LSTM 或者 GRU 。Encoder 和 Decoder 具體介紹請(qǐng)見第三部分员萍。
第二種結(jié)構(gòu)
該結(jié)構(gòu)是最簡單的結(jié)構(gòu)腾降,和第一種結(jié)構(gòu)相似,只是 Decoder 的第一個(gè)時(shí)刻只用到了 Encoder 最后輸出的中間狀態(tài)變量 :
應(yīng)用:
-
在英文翻譯中碎绎,將英文輸入到 Encoder 中螃壤,Decoder 輸出中文抗果。
-
在圖像標(biāo)注中,將圖像特征輸入到 Encoder 中奸晴,Decoder 輸出一段文字對(duì)圖像的描述冤馏。
參考2:-原創(chuàng)翻譯- 圖像標(biāo)注生成器 (Show and Tell: A Neural Image Caption Generator)
在 QA 系統(tǒng)中,將提出的問題輸入 Encoder 中寄啼,Decoder 輸出對(duì)于問題的回答逮光。
……
注:確保你對(duì)所有模型都有所了解后再閱讀應(yīng)用后面的參考鏈接。
二墩划、RNN 結(jié)構(gòu)
1. 為什么在這里提及 RNN 及 RNN 變種涕刚?
接下來要介紹的 Encoder-Decoder 模型中,Encoder 和 Decoder 兩部分的輸入輸出可以是文字走诞、圖像副女、語音等等,所以 Encoder 和 Decoder 一般采用 CNN 蚣旱、RNN 碑幅、LSTM 、GRU 等等塞绿。這里沟涨,我們只介紹經(jīng)典 RNN 的結(jié)構(gòu)。
如果對(duì) LSTM 感興趣的話异吻,請(qǐng)參考 -原創(chuàng)翻譯- 詳解 LSTM(Understanding LSTM Networks)
2. 圖解 RNN 結(jié)構(gòu)
RNN 大都用來處理像一串句子裹赴、一段語音這種的序列化數(shù)據(jù)。展開的 RNN 結(jié)構(gòu)圖如下:
由圖可見诀浪,其當(dāng)前時(shí)間 t 的輸出依賴兩部分:前一時(shí)刻的隱層 和當(dāng)前的輸入 棋返。
下面主要介紹經(jīng)典的三種 RNN 結(jié)構(gòu):
(1) n VS 1
注:圓圈代表給定的輸入,箭頭代表運(yùn)算雷猪,矩形代表隱層睛竣,也就是箭頭運(yùn)算后的結(jié)果。其中參數(shù) 都是一樣的。在自然語言處理問題与境。 可以看做是第一個(gè)單詞验夯, 可以看做是第二個(gè)單詞…
這種結(jié)構(gòu)可應(yīng)用于情感分析、文本分類等等摔刁。
(2) 1 VS n
下圖是把輸入當(dāng)作每個(gè)時(shí)刻的輸入:
這種結(jié)構(gòu)可應(yīng)用于應(yīng)用于 Image Caption 挥转,輸入是圖像的特征矩陣,輸出是一段對(duì)圖像的描述。
(3) n VS n
這種結(jié)構(gòu)可應(yīng)用于機(jī)器翻譯等绑谣。如果感興趣准潭,可以參考下面的 文章。作者使用 RNN 實(shí)現(xiàn)了根據(jù)一個(gè)字母推測下一個(gè)字母的概率域仇。
參考3:-原創(chuàng)翻譯- RNNs的“神奇功效”(The Unreasonable Effectiveness of Recurrent Neural Networks)
(4) n VS m
在機(jī)器翻譯中,源語言和目標(biāo)語言的句子序列都是不等長的寺擂,而原始的 n VS n 結(jié)構(gòu)都是要求序列等長的暇务。為此,我們有了 n VS m 結(jié)構(gòu)怔软,這種結(jié)構(gòu)又被稱為 Encoder-Decoder模型 垦细。具體請(qǐng)見下一部分。
三挡逼、Encoder-Decoder 模型
1. 簡介
在第二節(jié)的第四部分括改,我們提出了 RNN 的 n VS m 結(jié)構(gòu):Encoder-Decoder 模型,Encoder-Decoder 模型是深度學(xué)習(xí)中常見的一種模型家坎。在本文中嘱能,我們只簡單介紹其在文本-文本的應(yīng)用,比如將英語翻譯成漢語虱疏,所以該模型也可以稱為 Seq2Seq 模型 惹骂。下圖為 Encoder-Decoder 模型的抽象圖:
2. 分析
1) Encoder
給定句子對(duì) <X,Y> ,我們的目標(biāo)是給定輸入句子 X 做瞪,通過Encoder-Decoder 模型來翻譯成目標(biāo)句子 Y 对粪。而 X和 Y 分別由各自的單詞序列構(gòu)成:
首先,Encoder 對(duì)輸入語句 X 進(jìn)行編碼装蓬,經(jīng)過函數(shù)變換為中間語義向量 C (可以通過多種方式得到) :
2) Decoder
得到中間語義向量 C 后著拭,使用 Decoder 進(jìn)行解碼。Decoder根據(jù)中間狀態(tài)向量 C 和已經(jīng)生成的歷史信息 y1牍帚,y2…yi-1 去生成 t 時(shí)刻的單詞 yi :
<center style="color: rgb(85, 85, 85); font-family: Lato, "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"></center>
如果直接將 c 輸入到 Decoder 中儡遮,則是 Seq2Seq 模型的第二種模型:
如果將 c 當(dāng)作 Decoder 的每一時(shí)刻輸入,則是 Seq2Seq 模型的第一種模型:
中英翻譯中履羞, <X,Y> 是不同語言的句子峦萎,X 是英文句子,Y 是中文句子忆首。
QA 系統(tǒng)中爱榔,X 是問題,Y 是回答糙及。
-
……
Encoder-Decoder 模型是使用非常廣泛的深度學(xué)習(xí)模型框架详幽,與其說 Encoder-Decoder 是一種模型,不如稱其為一種通用框架。因?yàn)?Encoder 和 Decoder 具體使用什么模型是根據(jù)任務(wù)而定義的唇聘。在自然語言處理研究中通常使用 LSTM 或者是 GRU 版姑。
四、Attention 模型
1. Encoder-Decoder 模型的局限性
(1) 從第三節(jié)的第一部分的 Encoder-Decoder 模型的抽象圖中可以看出 Encoder 和 Decoder 的唯一聯(lián)系只有語義編碼 C 迟郎,即將整個(gè)輸入序列的信息編碼成一個(gè)固定大小的狀態(tài)向量再解碼剥险,相當(dāng)于將信息”有損壓縮”。很明顯這樣做有兩個(gè)缺點(diǎn):
- 中間語義向量無法完全表達(dá)整個(gè)輸入序列的信息宪肖。
- 隨著輸入信息長度的增加表制,由于向量長度固定,先前編碼好的信息會(huì)被后來的信息覆蓋控乾,丟失很多信息么介。
(2)大家看第三節(jié)的第二部分的第二個(gè) Decoder 過程,其輸出的產(chǎn)生如下:
明顯可以發(fā)現(xiàn)在生成 時(shí),語義編碼 C 對(duì)它們所產(chǎn)生的貢獻(xiàn)都是一樣的慨仿。例如翻譯:Cat chase mouse 久脯,Encoder-Decoder 模型逐字生成:“貓”、“捉”镶骗、“老鼠”桶现。在翻譯 mouse 單詞時(shí),每一個(gè)英語單詞對(duì)“老鼠”的貢獻(xiàn)都是相同的鼎姊。如果引入了Attention 模型骡和,那么 mouse 對(duì)于它的影響應(yīng)該是最大的。
2. 圖解 Attention
為了解決上面兩個(gè)問題相寇,于是引入了 Attention 模型慰于。Attention 模型的特點(diǎn)是 Decoder 不再將整個(gè)輸入序列編碼為固定長度的中間語義向量 C ,而是根據(jù)當(dāng)前生成的新單詞計(jì)算新的 唤衫,使得每個(gè)時(shí)刻輸入不同的 C婆赠,這樣就解決了單詞信息丟失的問題。引入了 Attention 的 Encoder-Decoder 模型如下圖:
對(duì)于剛才提到的那個(gè)“貓捉老鼠”的翻譯過程變成了如下:
整個(gè)翻譯流程如下:
圖中輸入是 Cat chase mouse 佳励,Encoder 中隱層 h1休里、h2、h3 可看作經(jīng)過計(jì)算 Cat赃承、chase妙黍、mouse 這些詞的信息。
使用 表示 Encoder 中第 j 階段的 和解碼時(shí)第 i 階段的相關(guān)性瞧剖,計(jì)算出解碼需要的中間語義向量 拭嫁。 和 “貓” 關(guān)系最近可免,相對(duì)應(yīng)的 要比 、 大做粤;而 和 “捉” 關(guān)系最近浇借,相對(duì)應(yīng)的 要比 、 大怕品;同理 和 “老鼠” 關(guān)系最近妇垢,相對(duì)應(yīng)的 要比 、 大肉康。
那么參數(shù) 是如何得到呢修己?
Encoder 中第 j 個(gè)隱層單元 和 Decoder 第 i-1 個(gè)隱層單元 經(jīng)過運(yùn)算得到 。
例如 的計(jì)算過程:
的計(jì)算過程: