Seq2Seq 是一種循環(huán)神經(jīng)網(wǎng)絡的變種胯盯,包括編碼器 (Encoder) 和解碼器 (Decoder) 兩部分哥倔。Seq2Seq 是自然語言處理中的一種重要模型侄榴,可以用于機器翻譯共虑、對話系統(tǒng)洞坑、自動文摘之众。
1. 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
上圖是RNN 模型的一種 N vs N 結構夭谤,包含 N 個輸入 x1, x2, ..., xN,和 N 個輸出 y1, y2, ..., yN巫糙。N vs N 的結構中朗儒,輸入和輸出序列的長度是相等的,通常適合用于以下任務:
- 詞性標注
- 訓練語言模型参淹,使用之前的詞預測下一個詞等
1.2 1 vs N
在 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 個輸入 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 模型結構有很多種雇庙,下面是幾種比較常見的:
第一種
第二種
第三種
2.2 編碼器 Encoder
這三種 Seq2Seq 模型的主要區(qū)別在于 Decoder,他們的 Encoder 都是一樣的灶伊。下圖是 Encoder 部分疆前,Encoder 的 RNN 接受輸入 x,最終輸出一個編碼所有信息的上下文向量 c聘萨,中間的神經(jīng)元沒有輸出竹椒。Decoder 主要傳入的是上下文向量 c,然后解碼出需要的信息匈挖。
從上圖可以看到碾牌,Encoder 與一般的 RNN 區(qū)別不大,只是中間神經(jīng)元沒有輸出儡循。其中的上下文向量 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 結構比較簡單饺律,將上下文向量 c 當成是 RNN 的初始隱藏狀態(tài)窃页,輸入到 RNN 中,后續(xù)只接受上一個神經(jīng)元的隱藏層狀態(tài) h' 而不接收其他的輸入 x。第一種 Decoder 結構的隱藏層及輸出的計算公式:
第二種
第二種 Decoder 結構有了自己的初始隱藏層狀態(tài) h'0脖卖,不再把上下文向量 c 當成是 RNN 的初始隱藏狀態(tài)乒省,而是當成 RNN 每一個神經(jīng)元的輸入∑枘荆可以看到在 Decoder 的每一個神經(jīng)元都擁有相同的輸入 c袖扛,這種 Decoder 的隱藏層及輸出計算公式:
第三種
第三種 Decoder 結構和第二種類似,但是在輸入的部分多了上一個神經(jīng)元的輸出 y'十籍。即每一個神經(jīng)元的輸入包括:上一個神經(jīng)元的隱藏層向量 h'蛆封,上一個神經(jīng)元的輸出 y',當前的輸入 c (Encoder 編碼的上下文向量)勾栗。對于第一個神經(jīng)元的輸入 y'0娶吞,通常是句子其實標志位的 embedding 向量。第三種 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,則神經(jīng)元直接使用正確的輸出作為當前神經(jīng)元的輸入臭脓。
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 需要保留 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 有很多種:
上面得到相關性向量 et 后,需要進行歸一化答憔,使用 softmax 歸一化味赃。然后用歸一化后的系數(shù)融合 Encoder 的多個隱藏層向量得到 Decoder 當前神經(jīng)元的上下文向量 ct:
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