seq2seq通俗理解----編碼器和解碼器(TensorFlow實現(xiàn))

1. 什么是seq2seq

在?然語?處理的很多應(yīng)?中,輸?和輸出都可以是不定?序列。以機(jī)器翻譯為例,輸?可以是?段不定?的英語?本序列贿堰,輸出可以是?段不定?的法語?本序列,例如:

英語輸?:“They”啡彬、“are”羹与、“watching”、“.”

法語輸出:“Ils”庶灿、“regardent”纵搁、“.”

當(dāng)輸?和輸出都是不定?序列時,我們可以使?編碼器—解碼器(encoder-decoder)或者seq2seq模型往踢。序列到序列模型腾誉,簡稱seq2seq模型。這兩個模型本質(zhì)上都?到了兩個循環(huán)神經(jīng)?絡(luò)峻呕,分別叫做編碼器和解碼器利职。編碼器?來分析輸?序列,解碼器?來?成輸出序列瘦癌。兩 個循環(huán)神經(jīng)網(wǎng)絡(luò)是共同訓(xùn)練的猪贪。

下圖描述了使?編碼器—解碼器將上述英語句?翻譯成法語句?的?種?法。在訓(xùn)練數(shù)據(jù)集中讯私,我們可以在每個句?后附上特殊符號“<eos>”(end of sequence)以表?序列的終?哮伟。編碼器每個時間步的輸?依次為英語句?中的單詞、標(biāo)點和特殊符號“<eos>”妄帘。下圖中使?了編碼器在 最終時間步的隱藏狀態(tài)作為輸?句?的表征或編碼信息楞黄。解碼器在各個時間步中使?輸?句?的 編碼信息和上個時間步的輸出以及隱藏狀態(tài)作為輸?。我們希望解碼器在各個時間步能正確依次 輸出翻譯后的法語單詞抡驼、標(biāo)點和特殊符號“<eos>”鬼廓。需要注意的是,解碼器在最初時間步的輸? ?到了?個表?序列開始的特殊符號“<bos>”(beginning of sequence)致盟。

image

2. 編碼器

編碼器的作?是把?個不定?的輸?序列變換成?個定?的背景變量 c碎税,并在該背景變量中編碼輸?序列信息。常?的編碼器是循環(huán)神經(jīng)?絡(luò)馏锡。

讓我們考慮批量?小為1的時序數(shù)據(jù)樣本雷蹂。假設(shè)輸?序列是 x1, . . . , xT,例如 xi 是輸?句?中的第 i 個詞杯道。在時間步 t匪煌,循環(huán)神經(jīng)?絡(luò)將輸? xt 的特征向量 xt 和上個時間步的隱藏狀態(tài)h_{t-1}變換為當(dāng)前時間步的隱藏狀態(tài)ht。我們可以?函數(shù) f 表達(dá)循環(huán)神經(jīng)?絡(luò)隱藏層的變換:

h_t=f(x_t,h_{t-1})

接下來,編碼器通過?定義函數(shù) q 將各個時間步的隱藏狀態(tài)變換為背景變量:

c=q(h_1,...,h_T)

例如萎庭,當(dāng)選擇 q(h1, . . . , h****T ) = h****T 時霜医,背景變量是輸?序列最終時間步的隱藏狀態(tài)h**T

以上描述的編碼器是?個單向的循環(huán)神經(jīng)?絡(luò)驳规,每個時間步的隱藏狀態(tài)只取決于該時間步及之前的輸??序列肴敛。我們也可以使?雙向循環(huán)神經(jīng)?絡(luò)構(gòu)造編碼器。在這種情況下吗购,編碼器每個時間步的隱藏狀態(tài)同時取決于該時間步之前和之后的?序列(包括當(dāng)前時間步的輸?)医男,并編碼了整個序列的信息。

3. 解碼器

剛剛已經(jīng)介紹捻勉,編碼器輸出的背景變量 c 編碼了整個輸?序列 x1, . . . , xT 的信息昨登。給定訓(xùn)練樣本中的輸出序列 y1, y2, . . . , yT′ ,對每個時間步 t′(符號與輸?序列或編碼器的時間步 t 有區(qū)別)贯底,解碼器輸出 yt′ 的條件概率將基于之前的輸出序列 y_1,...,y_{t^{′}-1} 和背景變量 c丰辣,即:

P(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)

為此,我們可以使?另?個循環(huán)神經(jīng)?絡(luò)作為解碼器禽捆。在輸出序列的時間步 t′笙什,解碼器將上?時間步的輸出 y_{t^{′}-1} 以及背景變量 c 作為輸?,并將它們與上?時間步的隱藏狀態(tài) s_{t^{′}-1} 變換為當(dāng)前時間步的隱藏狀態(tài)st′胚想。因此琐凭,我們可以?函數(shù) g 表達(dá)解碼器隱藏層的變換:

s_{t^{′}}=g(y_{t^{′}-1},c,s_{t^{′}-1})

有了解碼器的隱藏狀態(tài)后,我們可以使??定義的輸出層和softmax運算來計算P(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)浊服,例如统屈,基于當(dāng)前時間步的解碼器隱藏狀態(tài) st′、上?時間步的輸出s_{t^{′}-1}以及背景變量 c 來計算當(dāng)前時間步輸出 yt′ 的概率分布牙躺。

4. 訓(xùn)練模型

根據(jù)最?似然估計愁憔,我們可以最?化輸出序列基于輸?序列的條件概率:

P(y_1,...,y_{t^{′}-1}|x_1,...,x_T)=\prod_{t^{′}=1}^{T^{′}}P(y_{t^{′}}|y_1,...,y_{t^{′}-1},x_1,...,x_T)

=\prod_{t^{′}=1}^{T^{′}}P(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)

并得到該輸出序列的損失:

-logP(y_1,...,y_{t^{′}-1}|x_1,...,x_T)=-\sum_{t^{′}=1}^{T^{′}}logP(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)

在模型訓(xùn)練中,所有輸出序列損失的均值通常作為需要最小化的損失函數(shù)孽拷。在上圖所描述的模型預(yù)測中吨掌,我們需要將解碼器在上?個時間步的輸出作為當(dāng)前時間步的輸?。與此不同脓恕,在訓(xùn)練中我們也可以將標(biāo)簽序列(訓(xùn)練集的真實輸出序列)在上?個時間步的標(biāo)簽作為解碼器在當(dāng)前時間步的輸?膜宋。這叫作強(qiáng)制教學(xué)(teacher forcing)。

5. seq2seq模型預(yù)測

以上介紹了如何訓(xùn)練輸?和輸出均為不定?序列的編碼器—解碼器炼幔。本節(jié)我們介紹如何使?編碼器—解碼器來預(yù)測不定?的序列秋茫。

在準(zhǔn)備訓(xùn)練數(shù)據(jù)集時,我們通常會在樣本的輸?序列和輸出序列后面分別附上?個特殊符號“<eos>”表?序列的終?乃秀。我們在接下來的討論中也將沿?上?節(jié)的全部數(shù)學(xué)符號肛著。為了便于討論圆兵,假設(shè)解碼器的輸出是?段?本序列。設(shè)輸出?本詞典Y(包含特殊符號“<eos>”)的?小為|Y|策泣,輸出序列的最??度為T′衙傀。所有可能的輸出序列?共有 O(|y|^{T^{′}}) 種抬吟。這些輸出序列中所有特殊符號“<eos>”后?的?序列將被舍棄萨咕。

5.1 貪婪搜索

貪婪搜索(greedy search)。對于輸出序列任?時間步t′火本,我們從|Y|個詞中搜索出條件概率最?的詞:

y_{t^{′}}=argmax_{y\in_{}Y}P(y|y_1,...,y_{t^{′}-1},c)

作為輸出危队。?旦搜索出“<eos>”符號,或者輸出序列?度已經(jīng)達(dá)到了最??度T′钙畔,便完成輸出茫陆。我們在描述解碼器時提到,基于輸?序列?成輸出序列的條件概率是\prod_{t^{′}=1}^{T^{′}}P(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)擎析。我們將該條件概率最?的輸出序列稱為最優(yōu)輸出序列簿盅。而貪婪搜索的主要問題是不能保證得到最優(yōu)輸出序列。

下?來看?個例?揍魂。假設(shè)輸出詞典??有“A”“B”“C”和“<eos>”這4個詞桨醋。下圖中每個時間步
下的4個數(shù)字分別代表了該時間步?成“A”“B”“C”和“<eos>”這4個詞的條件概率。在每個時間步现斋,貪婪搜索選取條件概率最?的詞喜最。因此,圖10.9中將?成輸出序列“A”“B”“C”“<eos>”庄蹋。該輸出序列的條件概率是0.5 × 0.4 × 0.4 × 0.6 = 0.048瞬内。

image

接下來,觀察下面演?的例?限书。與上圖中不同虫蝶,在時間步2中選取了條件概率第??的詞“C”
。由于時間步3所基于的時間步1和2的輸出?序列由上圖中的“A”“B”變?yōu)榱讼聢D中的“A”“C”倦西,下圖中時間步3?成各個詞的條件概率發(fā)?了變化秉扑。我們選取條件概率最?的詞“B”。此時時間步4所基于的前3個時間步的輸出?序列為“A”“C”“B”调限,與上圖中的“A”“B”“C”不同舟陆。因此,下圖中時間步4?成各個詞的條件概率也與上圖中的不同耻矮。我們發(fā)現(xiàn)秦躯,此時的輸出序列“A”“C”“B”“<eos>”的條件概率是0.5 × 0.3 × 0.6 × 0.6 = 0.054,?于貪婪搜索得到的輸出序列的條件概率裆装。因此踱承,貪婪搜索得到的輸出序列“A”“B”“C”“<eos>”并?最優(yōu)輸出序列倡缠。

image

5.2 窮舉搜索

如果?標(biāo)是得到最優(yōu)輸出序列,我們可以考慮窮舉搜索(exhaustive search):窮舉所有可能的輸出序列茎活,輸出條件概率最?的序列昙沦。

雖然窮舉搜索可以得到最優(yōu)輸出序列,但它的計算開銷 O(|y|^{T^{′}}) 很容易過?载荔。例如盾饮,當(dāng)|Y| =
10000且T′ = 10時,我們將評估 10000^{10}=10^{40} 個序列:這?乎不可能完成懒熙。而貪婪搜索的計
算開銷是 O(|y|^{T^{′}})丘损,通常顯著小于窮舉搜索的計算開銷。例如工扎,當(dāng)|Y| = 10000且T′ = 10時徘钥,我
們只需評估 10000*10=10^5 個序列。

5.3 束搜索

束搜索(beam search)是對貪婪搜索的?個改進(jìn)算法肢娘。它有?個束寬(beam size)超參數(shù)呈础。我們將它設(shè)為 k。在時間步 1 時橱健,選取當(dāng)前時間步條件概率最?的 k 個詞而钞,分別組成 k 個候選輸出序列的?詞。在之后的每個時間步畴博,基于上個時間步的 k 個候選輸出序列笨忌,從 k |Y| 個可能的輸出序列中選取條件概率最?的 k 個,作為該時間步的候選輸出序列俱病。最終官疲,我們從各個時間步的候選輸出序列中篩選出包含特殊符號“<eos>”的序列,并將它們中所有特殊符號“<eos>”后?的?序列舍棄亮隙,得到最終候選輸出序列的集合途凫。

image

束寬為2,輸出序列最??度為3溢吻。候選輸出序列有A维费、C、AB促王、CE犀盟、ABD和CED。我們將根據(jù)這6個序列得出最終候選輸出序列的集合蝇狼。在最終候選輸出序列的集合中阅畴,我們?nèi)∫韵路謹(jǐn)?shù)最?的序列作為輸出序列:

\frac{1}{L^{\alpha}}logP(y_1,...,y_L)=\frac{1}{L^{\alpha}}\sum_{t^{′}=1}^{T^{′}}logP(y_{t^{′}}|y_1,...,y_{t^{′}-1},c)

其中 L 為最終候選序列?度,α ?般可選為0.75迅耘。分?上的 Lα 是為了懲罰較?序列在以上分?jǐn)?shù)中較多的對數(shù)相加項贱枣。分析可知监署,束搜索的計算開銷為 O(k|y|^{T^{′}})。這介于貪婪搜索和窮舉搜索的計算開銷之間纽哥。此外钠乏,貪婪搜索可看作是束寬為 1 的束搜索。束搜索通過靈活的束寬 k 來權(quán)衡計算開銷和搜索質(zhì)量春塌。

6. Bleu得分

評價機(jī)器翻譯結(jié)果通常使?BLEU(Bilingual Evaluation Understudy)(雙語評估替補(bǔ))晓避。對于模型預(yù)測序列中任意的?序列,BLEU考察這個?序列是否出現(xiàn)在標(biāo)簽序列中摔笤。

具體來說够滑,設(shè)詞數(shù)為 n 的?序列的精度為 pn垦写。它是預(yù)測序列與標(biāo)簽序列匹配詞數(shù)為 n 的?序列的數(shù)量與預(yù)測序列中詞數(shù)為 n 的?序列的數(shù)量之?吕世。舉個例?,假設(shè)標(biāo)簽序列為A梯投、B命辖、C、D分蓖、E尔艇、F,預(yù)測序列為A么鹤、B终娃、B、C蒸甜、D棠耕,那么:

P1= \frac{預(yù)測序列中的 1 元詞組在標(biāo)簽序列是否存在的個數(shù)}{預(yù)測序列 1 元詞組的個數(shù)之和}

預(yù)測序列一元詞組:A/B/C/D,都在標(biāo)簽序列里存在柠新,所以P1=4/5窍荧,以此類推,p2 = 3/4, p3 = 1/3, p4 = 0恨憎。設(shè) len_{label}和len_{pred} 分別為標(biāo)簽序列和預(yù)測序列的詞數(shù)蕊退,那么,BLEU的定義為:

exp(min(0,1-\frac{len_{label}}{len_{pred}}))\prod_{n=1}^{k}p_n^{\frac{1}{2^n}}

其中 k 是我們希望匹配的?序列的最?詞數(shù)憔恳∪坷螅可以看到當(dāng)預(yù)測序列和標(biāo)簽序列完全?致時,
BLEU為1钥组。

因為匹配較??序列?匹配較短?序列更難输硝,BLEU對匹配較??序列的精度賦予了更?權(quán)重。例如者铜,當(dāng) pn 固定在0.5時腔丧,隨著n的增?放椰,0.5^{\frac{1}{2}}\approx0.7,0.5^{\frac{1}{4}}\approx0.84,0.5^{\frac{1}{8}}\approx0.92,0.5^{\frac{1}{16}}\approx0.96。另外愉粤,模型預(yù)測較短序列往往會得到較?pn 值砾医。因此,上式中連乘項前?的系數(shù)是為了懲罰較短的輸出而設(shè)的衣厘。舉個例?如蚜,當(dāng)k = 2時,假設(shè)標(biāo)簽序列為A影暴、B错邦、C、D型宙、E撬呢、F,而預(yù)測序列為A妆兑、 B魂拦。雖然p1 = p2 = 1,但懲罰系數(shù)exp(1-6/2) ≈ 0.14搁嗓,因此BLEU也接近0.14芯勘。

7. 代碼實現(xiàn)

TensorFlow seq2seq的基本實現(xiàn)

機(jī)器學(xué)習(xí)通俗易懂系列文章

3.png

8. 參考文獻(xiàn)

動手學(xué)深度學(xué)習(xí)


作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎大家加入討論!共同完善此項目腺逛!群號:【541954936】點擊加入

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末荷愕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棍矛,更是在濱河造成了極大的恐慌安疗,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茄靠,死亡現(xiàn)場離奇詭異茂契,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)慨绳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門掉冶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脐雪,你說我怎么就攤上這事厌小。” “怎么了战秋?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵璧亚,是天一觀的道長。 經(jīng)常有香客問我脂信,道長癣蟋,這世上最難降的妖魔是什么透硝? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮疯搅,結(jié)果婚禮上濒生,老公的妹妹穿的比我還像新娘。我一直安慰自己幔欧,他們只是感情好罪治,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著礁蔗,像睡著了一般觉义。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浴井,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天晒骇,我揣著相機(jī)與錄音,去河邊找鬼滋饲。 笑死厉碟,一個胖子當(dāng)著我的面吹牛喊巍,可吹牛的內(nèi)容都是我干的屠缭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼崭参,長吁一口氣:“原來是場噩夢啊……” “哼呵曹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起何暮,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奄喂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后海洼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跨新,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年坏逢,在試婚紗的時候發(fā)現(xiàn)自己被綠了域帐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡是整,死狀恐怖肖揣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浮入,我是刑警寧澤龙优,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站事秀,受9級特大地震影響彤断,放射性物質(zhì)發(fā)生泄漏野舶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一宰衙、第九天 我趴在偏房一處隱蔽的房頂上張望筒愚。 院中可真熱鬧,春花似錦菩浙、人聲如沸巢掺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陆淀。三九已至,卻和暖如春先嬉,著一層夾襖步出監(jiān)牢的瞬間轧苫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工疫蔓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留含懊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓衅胀,卻偏偏與公主長得像岔乔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子滚躯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

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