seq2seq顧名思義就是模型的輸入和輸出均是序列(sequence)徒恋,機(jī)器翻譯模型是seq2seq的一典型例子蚕断。
1、機(jī)器翻譯模型
上圖的機(jī)器翻譯模型由左邊的多對一RNN(many to one)和右邊的一對多RNN(one to many)組成入挣,左邊綠色部分是編碼器(encodeer)基括,右邊紫色部分是解碼器(decodeer)。?某種語言的句子序列通過編碼器生成一個(gè)向量作為其代表财岔,傳遞給解碼器作為解碼器的輸入向量风皿,輸出另一種語言的句子序列河爹。
根據(jù)語言模型可以發(fā)現(xiàn),機(jī)器翻譯模型的解碼器與語言模型幾乎相同桐款,只是語言模型中的預(yù)輸入向量是咸这,而機(jī)器翻譯模型的解碼器的輸入是編碼器輸出的向量,所以機(jī)器翻譯模型又叫條件語言模型(condition language model)魔眨。
語言模型告訴我們的是一個(gè)句子的概率媳维,機(jī)器翻譯解碼器的作用在編碼器傳遞的向量的基礎(chǔ)上,隨機(jī)抽樣得到多種翻譯遏暴,再通過某種算法找出句子概率最大的一個(gè)侄刽,即最合適的翻譯結(jié)果。
每種翻譯結(jié)果的可能性=朋凉,其中是翻譯結(jié)果的第個(gè)詞州丹,是翻譯結(jié)果總詞數(shù),是輸入的需要翻譯的句子序列杂彭,墓毒。
2.1、集束搜索和貪心搜索比較
在尋找最佳翻譯結(jié)果(概率最大的結(jié)果)時(shí)常用的算法是集束搜索(beam search)亲怠。在討論集束搜索之前所计,先對比另外一種算法,貪心搜索(greedy search)团秽,這種對比也體現(xiàn)了集束搜索的最大優(yōu)點(diǎn)主胧。
簡單的來說,貪心算法是先挑出一個(gè)最可能的詞习勤,在此基礎(chǔ)上再挑出第二個(gè)最有可能的詞讥裤,以此類推,使每個(gè)詞的概率最大化姻报。而集束搜索是站在整個(gè)詞序列整體的角度上使其概率最大化。典型的結(jié)果是间螟,通過貪心搜索得到的翻譯結(jié)果可能會(huì)包含一些日常使用中詞頻較高的詞吴旋。
比如較理想的翻譯結(jié)果為“Jane is visiting Africa in September”時(shí),通過貪心搜索得到的結(jié)果可能是“Jane is going to be visiting Africa in September” 厢破,因?yàn)樵谟⒄Z中“is”后加“going to”的頻率要比加“visiting”的頻率高很多荣瑟。致使翻譯結(jié)果中穿插一些高頻詞組,讓翻譯結(jié)果冗長摩泪,不簡潔笆焰,所以不是最佳。
關(guān)于集束搜索得內(nèi)容參見:集束搜索
2.2见坑、集束搜索
法語“Jane visite l’Afrique en septembre”?希望翻譯成英文句子 “Jane is visiting Africa in September”
集束搜索有一個(gè)參數(shù):集束寬(beam width)嚷掠,表示在生成每個(gè)翻譯結(jié)果時(shí)會(huì)考慮集束寬個(gè)候選結(jié)果捏检。本文此后討論時(shí)設(shè)集束寬為3。
在生成每個(gè)結(jié)果時(shí)不皆,通過softmax得到字典中所有詞的概率向量贯城,維度與字典維度相同,從中取概率最高的3個(gè)詞存于內(nèi)存作為候選霹娄。
第一步能犯,生成翻譯結(jié)果的第一個(gè)詞,即完成編碼器與解碼器的連接犬耻。第一個(gè)結(jié)果詞的概率為?踩晶,為輸入的法語句子序列。
第二步枕磁,生成后面的結(jié)果序列渡蜻。第二個(gè)詞在確定第一個(gè)詞的基礎(chǔ)上搜索,以此類推透典。假設(shè)經(jīng)過學(xué)習(xí)后的候選為“Jane”晴楔、“in”、“september”(此處暫不考慮大小寫)峭咒。在第二步中税弃,第一個(gè)和第二個(gè)單詞的聯(lián)合概率是關(guān)心的重點(diǎn),即.
又所以最終可以考慮每個(gè)時(shí)間步輸出概率的乘積则果。
由于此處集束寬為3载矿,所以的3個(gè)候選詞“Jane”秃励、“in”相寇、“september”要重復(fù)上述操作们镜。
由于集束寬為3赦颇,假設(shè)字典中詞數(shù)為1w脯倚,那么考慮第一纲酗、二個(gè)詞會(huì)產(chǎn)生3w個(gè)可能的結(jié)果脚猾,并得到所有組合的聯(lián)合概率抡草。因?yàn)榧鴮挒?,從3w個(gè)結(jié)果中挑選出聯(lián)合概率最高的3個(gè)結(jié)果作為候選存于內(nèi)存蔗坯,同時(shí)保存每個(gè)候選的,以便最終計(jì)算整個(gè)句子的概率宾濒。
第三步腿短,以此類推,得到整個(gè)句子的翻譯結(jié)果。
2.3橘忱、集束搜索的改進(jìn)
集束搜索的目的是最大化下式赴魁,即翻譯結(jié)果句子的概率
1、因?yàn)槭接叶说拿總€(gè)概率值都大于0小于1鹦付,其乘積結(jié)果會(huì)是一個(gè)很小的數(shù)尚粘,造成數(shù)值下溢(numerical underflow)?。了解決這個(gè)問題 敲长,將最大化的乘積式(即輸出結(jié)果序列的聯(lián)合概率)取對數(shù)?郎嫁,由?logM*N=logM+logN?公式得,上述需要最大化的乘積式可以轉(zhuǎn)化為的和祈噪。
2泽铛、還有一個(gè)問題是概率值大于0小于1,結(jié)果越長句子越小辑鲤,而我們尋找的是句子概率最大的結(jié)果盔腔,這就會(huì)造成集束搜索偏向更短的翻譯結(jié)果。解決方法是歸一化月褥。因此將原先的公式除以翻譯后句子序列長度弛随,這樣很明顯的減少了對輸出長的結(jié)果的懲罰。(指數(shù)小于1宁赤,是為了緩和直接除以帶來的影響)?
3舀透、有時(shí)得到的結(jié)果不理想,我們需要知道是機(jī)器翻譯模型(RNN構(gòu)造)出了問題决左,還是集束搜索算法出了問題愕够。
需要翻譯法語句子:?Jane visite l’Afrique en septembre?,驗(yàn)證集中人工翻譯的正確答案為?Jane visits Africa in September將人工翻譯的結(jié)果標(biāo)記為,使用訓(xùn)練完成的機(jī)器翻譯模型翻譯結(jié)果為?Jane visited Africa last September?并將其標(biāo)記為佛猛。
RNN編碼器和解碼器的功能是計(jì)算,所以可以通過比較?和的大小就能判斷問題出現(xiàn)的地方惑芭。
,說明集束搜索算法選擇的并不能使最大,不是最佳继找,所以是算法問題遂跟。
,首先假設(shè)驗(yàn)證集的是更好的結(jié)果婴渡,然而根據(jù)左式得到的是比?更好幻锁,這說明機(jī)器翻譯模型的RNN構(gòu)造出現(xiàn)問題,不能對結(jié)果的做出有效判斷缩搅,它應(yīng)該判斷更好的翻譯結(jié)果有更高的。