Seq2Seq 模型詳解

Seq2Seq 是一種循環(huán)神經(jīng)網(wǎng)絡的變種胯盯,包括編碼器 (Encoder) 和解碼器 (Decoder) 兩部分哥倔。Seq2Seq 是自然語言處理中的一種重要模型侄榴,可以用于機器翻譯共虑、對話系統(tǒng)洞坑、自動文摘之众。

1. RNN 結構及使用

RNN 結構

在之前的文章《循環(huán)神經(jīng)網(wǎng)絡 RNN拙毫、LSTM、GRU》中介紹了 RNN 模型棺禾,RNN 基本的模型如上圖所示缀蹄,每個神經(jīng)元接受的輸入包括:前一個神經(jīng)元的隱藏層狀態(tài) h (用于記憶) 和當前的輸入 x (當前信息)。神經(jīng)元得到輸入之后,會計算出新的隱藏狀態(tài) h 和輸出 y缺前,然后再傳遞到下一個神經(jīng)元蛀醉。因為隱藏狀態(tài) h 的存在,使得 RNN 具有一定的記憶功能衅码。

針對不同任務滞欠,通常要對 RNN 模型結構進行少量的調整,根據(jù)輸入和輸出的數(shù)量肆良,分為三種比較常見的結構:N vs N筛璧、1 vs N、N vs 1惹恃。

1.1 N vs N

N vs N 結構

上圖是RNN 模型的一種 N vs N 結構夭谤,包含 N 個輸入 x1, x2, ..., xN,和 N 個輸出 y1, y2, ..., yN巫糙。N vs N 的結構中朗儒,輸入和輸出序列的長度是相等的,通常適合用于以下任務:

  • 詞性標注
  • 訓練語言模型参淹,使用之前的詞預測下一個詞等

1.2 1 vs N

1 vs N 結構(1)

1 vs N 結構(2)

在 1 vs N 結構中醉锄,我們只有一個輸入 x浙值,和 N 個輸出 y1, y2, ..., yN恳不。可以有兩種方式使用 1 vs N开呐,第一種只將輸入 x 傳入第一個 RNN 神經(jīng)元烟勋,第二種是將輸入 x 傳入所有的 RNN 神經(jīng)元。1 vs N 結構適合用于以下任務:

  • 圖像生成文字筐付,輸入 x 就是一張圖片卵惦,輸出就是一段圖片的描述文字。
  • 根據(jù)音樂類別瓦戚,生成對應的音樂沮尿。
  • 根據(jù)小說類別,生成相應的小說较解。

1.3 N vs 1

N vs 1 結構

在 N vs 1 結構中畜疾,我們有 N 個輸入 x1, x2, ..., xN,和一個輸出 y哨坪。N vs 1 結構適合用于以下任務:

  • 序列分類任務庸疾,一段語音、一段文字的類別当编,句子的情感分析届慈。

2. Seq2Seq 模型

2.1 Seq2Seq 結構

上面的三種結構對于 RNN 的輸入和輸出個數(shù)都有一定的限制徒溪,但實際中很多任務的序列的長度是不固定的,例如機器翻譯中金顿,源語言臊泌、目標語言的句子長度不一樣;對話系統(tǒng)中揍拆,問句和答案的句子長度不一樣渠概。

Seq2Seq 是一種重要的 RNN 模型,也稱為 Encoder-Decoder 模型嫂拴,可以理解為一種 N×M 的模型播揪。模型包含兩個部分:Encoder 用于編碼序列的信息,將任意長度的序列信息編碼到一個向量 c 里筒狠。而 Decoder 是解碼器猪狈,解碼器得到上下文信息向量 c 之后可以將信息解碼,并輸出為序列辩恼。Seq2Seq 模型結構有很多種雇庙,下面是幾種比較常見的:

第一種

第一種 Seq2Seq 結構

第二種

第二種 Seq2Seq 結構

第三種

第三種 Seq2Seq 結構

2.2 編碼器 Encoder

這三種 Seq2Seq 模型的主要區(qū)別在于 Decoder,他們的 Encoder 都是一樣的灶伊。下圖是 Encoder 部分疆前,Encoder 的 RNN 接受輸入 x,最終輸出一個編碼所有信息的上下文向量 c聘萨,中間的神經(jīng)元沒有輸出竹椒。Decoder 主要傳入的是上下文向量 c,然后解碼出需要的信息匈挖。

Seq2Seq Encoder

從上圖可以看到碾牌,Encoder 與一般的 RNN 區(qū)別不大,只是中間神經(jīng)元沒有輸出儡循。其中的上下文向量 c 可以采用多種方式進行計算。

Encoder 上下文向量 c

從公式可以看到征冷,c 可以直接使用最后一個神經(jīng)元的隱藏狀態(tài) hN 表示择膝;也可以在最后一個神經(jīng)元的隱藏狀態(tài)上進行某種變換 hN 而得到,q 函數(shù)表示某種變換检激;也可以使用所有神經(jīng)元的隱藏狀態(tài) h1, h2, ..., hN 計算得到肴捉。得到上下文向量 c 之后,需要傳遞到 Decoder叔收。

2.3 解碼器 Decoder

Decoder 有多種不同的結構齿穗,這里主要介紹三種。

第一種

第一種 Decoder 結構

第一種 Decoder 結構比較簡單饺律,將上下文向量 c 當成是 RNN 的初始隱藏狀態(tài)窃页,輸入到 RNN 中,后續(xù)只接受上一個神經(jīng)元的隱藏層狀態(tài) h' 而不接收其他的輸入 x。第一種 Decoder 結構的隱藏層及輸出的計算公式:

第一種 Decoder 結構隱藏層及輸出層

第二種

第二種 Decoder 結構

第二種 Decoder 結構有了自己的初始隱藏層狀態(tài) h'0脖卖,不再把上下文向量 c 當成是 RNN 的初始隱藏狀態(tài)乒省,而是當成 RNN 每一個神經(jīng)元的輸入∑枘荆可以看到在 Decoder 的每一個神經(jīng)元都擁有相同的輸入 c袖扛,這種 Decoder 的隱藏層及輸出計算公式:

第二種 Decoder 結構隱藏層及輸出層

第三種

第三種 Decoder 結構

第三種 Decoder 結構和第二種類似,但是在輸入的部分多了上一個神經(jīng)元的輸出 y'十籍。即每一個神經(jīng)元的輸入包括:上一個神經(jīng)元的隱藏層向量 h'蛆封,上一個神經(jīng)元的輸出 y',當前的輸入 c (Encoder 編碼的上下文向量)勾栗。對于第一個神經(jīng)元的輸入 y'0娶吞,通常是句子其實標志位的 embedding 向量。第三種 Decoder 的隱藏層及輸出計算公式:

第三種 Decoder 結構隱藏層及輸出層

3. Seq2Seq模型使用技巧

3.1 Teacher Forcing

Teacher Forcing 用于訓練階段械姻,主要針對上面第三種 Decoder 模型來說的妒蛇,第三種 Decoder 模型神經(jīng)元的輸入包括了上一個神經(jīng)元的輸出 y'。如果上一個神經(jīng)元的輸出是錯誤的楷拳,則下一個神經(jīng)元的輸出也很容易錯誤绣夺,導致錯誤會一直傳遞下去。

而 Teacher Forcing 可以在一定程度上緩解上面的問題欢揖,在訓練 Seq2Seq 模型時陶耍,Decoder 的每一個神經(jīng)元并非一定使用上一個神經(jīng)元的輸出,而是有一定的比例采用正確的序列作為輸入她混。

舉例說明烈钞,在翻譯任務中,給定英文句子翻譯為中文坤按。"I have a cat" 翻譯成 "我有一只貓"毯欣,下圖是不使用 Teacher Forcing 的 Seq2Seq

不使用 Teacher Forcing

如果使用 Teacher Forcing,則神經(jīng)元直接使用正確的輸出作為當前神經(jīng)元的輸入臭脓。

使用 Teacher Forcing

3.2 Attention

在 Seq2Seq 模型酗钞,Encoder 總是將源句子的所有信息編碼到一個固定長度的上下文向量 c 中,然后在 Decoder 解碼的過程中向量 c 都是不變的来累。這存在著不少缺陷:

  • 對于比較長的句子砚作,很難用一個定長的向量 c 完全表示其意義。
  • RNN 存在長序列梯度消失的問題嘹锁,只使用最后一個神經(jīng)元得到的向量 c 效果不理想葫录。
  • 與人類的注意力方式不同,即人類在閱讀文章的時候领猾,會把注意力放在當前的句子上米同。

Attention 即注意力機制骇扇,是一種將模型的注意力放在當前翻譯單詞上的一種機制。例如翻譯 "I have a cat"窍霞,翻譯到 "我" 時匠题,要將注意力放在源句子的 "I" 上,翻譯到 "貓" 時要將注意力放在源句子的 "cat" 上但金。

使用了 Attention 后韭山,Decoder 的輸入就不是固定的上下文向量 c 了,而是會根據(jù)當前翻譯的信息冷溃,計算當前的 c钱磅。

Attention

Attention 需要保留 Encoder 每一個神經(jīng)元的隱藏層向量 h,然后 Decoder 的第 t 個神經(jīng)元要根據(jù)上一個神經(jīng)元的隱藏層向量 h't-1 計算出當前狀態(tài)與 Encoder 每一個神經(jīng)元的相關性 et似枕。et 是一個 N 維的向量 (Encoder 神經(jīng)元個數(shù)為 N)盖淡,若 et 的第 i 維越大,則說明當前節(jié)點與 Encoder 第 i 個神經(jīng)元的相關性越大凿歼。et 的計算方法有很多種褪迟,即相關性系數(shù)的計算函數(shù) a 有很多種:

Attention 相關性

上面得到相關性向量 et 后,需要進行歸一化答憔,使用 softmax 歸一化味赃。然后用歸一化后的系數(shù)融合 Encoder 的多個隱藏層向量得到 Decoder 當前神經(jīng)元的上下文向量 ct:

使用 Attention 計算上下文向量 c

3.3 beam search

beam search 方法不用于訓練的過程,而是用在測試的虐拓。在每一個神經(jīng)元中心俗,我們都選取當前輸出概率值最大的 top k 個輸出傳遞到下一個神經(jīng)元。下一個神經(jīng)元分別用這 k 個輸出蓉驹,計算出 L 個單詞的概率 (L 為詞匯表大小)城榛,然后在 kL 個結果中得到 top k 個最大的輸出,重復這一步驟态兴。

4. Seq2Seq 總結

Seq2Seq 模型允許我們使用長度不同的輸入和輸出序列狠持,適用范圍相當廣,可用于機器翻譯诗茎,對話系統(tǒng)工坊,閱讀理解等場景。

Seq2Seq 模型使用時可以利用 Teacher Forceing敢订,Attention,beam search 等方法優(yōu)化罢吃。

參考文獻

RNN神經(jīng)網(wǎng)絡模型的不同結構
Tensorflow中的Seq2Seq全家桶
Attention機制詳解(一)——Seq2Seq中的Attention

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楚午,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尿招,更是在濱河造成了極大的恐慌矾柜,老刑警劉巖阱驾,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怪蔑,居然都是意外死亡里覆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門缆瓣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喧枷,“玉大人,你說我怎么就攤上這事弓坞∷砩酰” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵渡冻,是天一觀的道長戚扳。 經(jīng)常有香客問我,道長族吻,這世上最難降的妖魔是什么帽借? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮超歌,結果婚禮上砍艾,老公的妹妹穿的比我還像新娘。我一直安慰自己握础,他們只是感情好辐董,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著禀综,像睡著了一般简烘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上定枷,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天孤澎,我揣著相機與錄音,去河邊找鬼欠窒。 笑死覆旭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的岖妄。 我是一名探鬼主播型将,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼棘钞,長吁一口氣:“原來是場噩夢啊……” “哼乔夯!你這毒婦竟也來了亚享?” 一聲冷哼從身側響起砚哗,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤柴罐,失蹤者是張志新(化名)和其女友劉穎脯倒,沒想到半個月后办悟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躬厌,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年狠裹,在試婚紗的時候發(fā)現(xiàn)自己被綠了虽界。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡涛菠,死狀恐怖莉御,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碗暗,我是刑警寧澤颈将,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站言疗,受9級特大地震影響晴圾,放射性物質發(fā)生泄漏。R本人自食惡果不足惜噪奄,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一死姚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勤篮,春花似錦都毒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至金抡,卻和暖如春瀑焦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背梗肝。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工榛瓮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巫击。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓禀晓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坝锰。 傳聞我的和親對象是個殘疾皇子粹懒,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

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