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)致盟。
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)變換為當(dāng)前時間步的隱藏狀態(tài)ht。我們可以?函數(shù) f 表達(dá)循環(huán)神經(jīng)?絡(luò)隱藏層的變換:
接下來,編碼器通過?定義函數(shù) q 將各個時間步的隱藏狀態(tài)變換為背景變量:
例如萎庭,當(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′ 的條件概率將基于之前的輸出序列 和背景變量 c丰辣,即:
為此,我們可以使?另?個循環(huán)神經(jīng)?絡(luò)作為解碼器禽捆。在輸出序列的時間步 t′笙什,解碼器將上?時間步的輸出 以及背景變量 c 作為輸?,并將它們與上?時間步的隱藏狀態(tài)
變換為當(dāng)前時間步的隱藏狀態(tài)st′胚想。因此琐凭,我們可以?函數(shù) g 表達(dá)解碼器隱藏層的變換:
有了解碼器的隱藏狀態(tài)后,我們可以使??定義的輸出層和softmax運算來計算浊服,例如统屈,基于當(dāng)前時間步的解碼器隱藏狀態(tài) st′、上?時間步的輸出
以及背景變量 c 來計算當(dāng)前時間步輸出 yt′ 的概率分布牙躺。
4. 訓(xùn)練模型
根據(jù)最?似然估計愁憔,我們可以最?化輸出序列基于輸?序列的條件概率:
并得到該輸出序列的損失:
在模型訓(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′衙傀。所有可能的輸出序列?共有 種抬吟。這些輸出序列中所有特殊符號“<eos>”后?的?序列將被舍棄萨咕。
5.1 貪婪搜索
貪婪搜索(greedy search)。對于輸出序列任?時間步t′火本,我們從|Y|個詞中搜索出條件概率最?的詞:
作為輸出危队。?旦搜索出“<eos>”符號,或者輸出序列?度已經(jīng)達(dá)到了最??度T′钙畔,便完成輸出茫陆。我們在描述解碼器時提到,基于輸?序列?成輸出序列的條件概率是擎析。我們將該條件概率最?的輸出序列稱為最優(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瞬内。
接下來,觀察下面演?的例?限书。與上圖中不同虫蝶,在時間步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)輸出序列倡缠。
5.2 窮舉搜索
如果?標(biāo)是得到最優(yōu)輸出序列,我們可以考慮窮舉搜索(exhaustive search):窮舉所有可能的輸出序列茎活,輸出條件概率最?的序列昙沦。
雖然窮舉搜索可以得到最優(yōu)輸出序列,但它的計算開銷 很容易過?载荔。例如盾饮,當(dāng)|Y| =
10000且T′ = 10時,我們將評估 個序列:這?乎不可能完成懒熙。而貪婪搜索的計
算開銷是 丘损,通常顯著小于窮舉搜索的計算開銷。例如工扎,當(dāng)|Y| = 10000且T′ = 10時徘钥,我
們只需評估 個序列。
5.3 束搜索
束搜索(beam search)是對貪婪搜索的?個改進(jìn)算法肢娘。它有?個束寬(beam size)超參數(shù)呈础。我們將它設(shè)為 k。在時間步 1 時橱健,選取當(dāng)前時間步條件概率最?的 k 個詞而钞,分別組成 k 個候選輸出序列的?詞。在之后的每個時間步畴博,基于上個時間步的 k 個候選輸出序列笨忌,從 k |Y| 個可能的輸出序列中選取條件概率最?的 k 個,作為該時間步的候選輸出序列俱病。最終官疲,我們從各個時間步的候選輸出序列中篩選出包含特殊符號“<eos>”的序列,并將它們中所有特殊符號“<eos>”后?的?序列舍棄亮隙,得到最終候選輸出序列的集合途凫。
束寬為2,輸出序列最??度為3溢吻。候選輸出序列有A维费、C、AB促王、CE犀盟、ABD和CED。我們將根據(jù)這6個序列得出最終候選輸出序列的集合蝇狼。在最終候選輸出序列的集合中阅畴,我們?nèi)∫韵路謹(jǐn)?shù)最?的序列作為輸出序列:
其中 L 為最終候選序列?度,α ?般可選為0.75迅耘。分?上的 Lα 是為了懲罰較?序列在以上分?jǐn)?shù)中較多的對數(shù)相加項贱枣。分析可知监署,束搜索的計算開銷為 。這介于貪婪搜索和窮舉搜索的計算開銷之間纽哥。此外钠乏,貪婪搜索可看作是束寬為 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棠耕,那么:
預(yù)測序列一元詞組:A/B/C/D,都在標(biāo)簽序列里存在柠新,所以P1=4/5窍荧,以此類推,p2 = 3/4, p3 = 1/3, p4 = 0恨憎。設(shè) 分別為標(biāo)簽序列和預(yù)測序列的詞數(shù)蕊退,那么,BLEU的定義為:
其中 k 是我們希望匹配的?序列的最?詞數(shù)憔恳∪坷螅可以看到當(dāng)預(yù)測序列和標(biāo)簽序列完全?致時,
BLEU為1钥组。
因為匹配較??序列?匹配較短?序列更難输硝,BLEU對匹配較??序列的精度賦予了更?權(quán)重。例如者铜,當(dāng) pn 固定在0.5時腔丧,隨著n的增?放椰,。另外愉粤,模型預(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)
8. 參考文獻(xiàn)
作者:@mantchs
GitHub:https://github.com/NLP-LOVE/ML-NLP
歡迎大家加入討論!共同完善此項目腺逛!群號:【541954936】點擊加入