譯文:統(tǒng)計(jì)機(jī)器翻譯教程——正文一

原文 A Statistical MT Tutorial Workbook 由 Kevin Knight 于1999年完成。
原文及原作者鏈接:https://kevincrawfordknight.github.io/

本譯文已獲得原作者 Kevin Knight 的許可
我相信 閱讀英語(yǔ)原文 是學(xué)習(xí)此內(nèi)容的最佳方式

不知道這是什么?閱讀本譯文的前言


一、總體計(jì)劃

我們想自動(dòng)分析人類(lèi)已存在的句子翻譯語(yǔ)料,來(lái)建立通用的翻譯規(guī)則。然后用這些規(guī)則來(lái)自動(dòng)翻譯新的內(nèi)容!

我知道這本手冊(cè)有點(diǎn)厚,但如果你花一天時(shí)間搞定它,你也會(huì)和其他人一樣,了解統(tǒng)計(jì)機(jī)器翻譯的絕大多數(shù)內(nèi)容。

這本教程的基本內(nèi)容是基于 Brown 等人于 1993 年通過(guò)期刊 Computational Linguistics 發(fā)表的文章 The Mathematics of Statistical Machine Translation。在這篇優(yōu)秀的文章之上,我能做的僅僅是增加一些新的視角,然后,可能的話,為讀者(你們什么都沒(méi)做錯(cuò))提供一些同情。

在整個(gè)教程中,重要的術(shù)語(yǔ)都會(huì)用 粗體 進(jìn)行標(biāo)注!(譯者注:原文使用下劃線進(jìn)行標(biāo)注)

二、基本的概率知識(shí)

我們認(rèn)為,一個(gè)英語(yǔ)句子 e 可以被翻譯成任意的一個(gè)法語(yǔ)句子 f。只不過(guò)一些翻譯比另一些更好。這里是一些基本的符號(hào),我們用這些符號(hào)來(lái)正式地表示“更好”:

  • P(e) — 先驗(yàn)概率(priori probability)。句子 e 發(fā)生的幾率。比如,如果 e 是英語(yǔ)句子 “I like snakes”,那么 P(e) 就是某個(gè)人在某時(shí)刻可能說(shuō)出 “I like snakes” 而不是說(shuō)出其他句子的幾率。
  • P(f|e) — 條件概率(conditional probability)。給定句子 e,句子 f 的幾率。比如,如果 e 是英語(yǔ)句子 “ I like snakes“,如果 f 是法語(yǔ)句子 “maisson bleue”,那么 P(f|e) 就是翻譯器把句子 e 翻譯成句子 f 的幾率。在這個(gè)例子中,完全不可能。
  • P(e, f) — 聯(lián)合概率(joint probability)。e 和 f 同時(shí)發(fā)生的幾率。如果 e 和 f 互不影響,我們可以寫(xiě)成 P(e,f) = P(e) * P(f)。比如,如果 e 代表 “the first roll of the die comes up 5”,如果 f 代表 “the second roll of the die comes up 3”,那么P(e,f) = P(e) ? P(f) = 1/6 * 1/6 = 1/36。如果 e 和 f 互相影響,則 P(e,f) = P(e) ? P(f|e)。意思是:“e 發(fā)生的幾率”乘以“e 發(fā)生且 f 同時(shí)發(fā)生的幾率”。如果 e 和 f 是互譯的兩串文本,那它們之間肯定是一定程度上相互影響的。

練習(xí)題:P(e,f) = P(f) ? ?

以上所有概率的值的范圍都是 0 到 1 的閉區(qū)間。0.5 的概率意味著“有一半的幾率”。

三、和與乘積

我們用以下方式來(lái)表示從 1 到 n 的整數(shù)之和:

我們用以下方式來(lái)表示從 1 到 n 的整數(shù)之乘積:

如果在求和過(guò)程中有因子,但它不依賴(lài)求和的元素,我們就可以把它放在外面:


練習(xí)題:


有時(shí)我們會(huì)對(duì)所有的句子 e 進(jìn)行求和,以下是一些有用的概率公式:


最后一個(gè)公式你可以這樣讀:“假設(shè) f 是被一些其他事件影響的,那么對(duì)于每一個(gè)會(huì)影響 f 的事件 e,我們計(jì)算 e 發(fā)生的幾率和 e 發(fā)生且 f 同時(shí)發(fā)生的幾率。為了覆蓋所有影響 f 的事件 e,我們把所有的幾率加起來(lái)?!?/p>

四、統(tǒng)計(jì)機(jī)器翻譯(Statistical Machine Translation)

對(duì)于一個(gè)法語(yǔ)句子 f,我們尋找一個(gè)英語(yǔ)句子 e,這個(gè)句子 e 的 P(e|f) 值是最大的(即最有可能的翻譯)。有時(shí)我們這樣寫(xiě):


argmax 可以這樣讀:“在所有的英語(yǔ)句子中,句子 e 的 P(e|f) 值是最大的”。如果你想用電腦程序的角度去思考它,你可以想象有這樣一個(gè)程序,它接受一組句子 e 和 f,返回概率 P(e|f) 的值,稍后我們會(huì)看到這樣的程序。

或者,你也可以想象這樣一個(gè)程序,它接受一個(gè)句子 f 作為輸入,返回所有可能的句子 ei 以及它的 P(e|f) 值。這樣的程序會(huì)需要更長(zhǎng)的運(yùn)行時(shí)間,即使你把英語(yǔ)句子的數(shù)量控制在一定范圍。

五、噪聲信道(The Noisy Channel)

記住貝葉斯公式(Bayes Rule),這非常重要!

練習(xí)題:通過(guò)第二節(jié)提供的練習(xí)題,來(lái)證明這個(gè)公式

通過(guò)貝葉斯公式,我們可以重寫(xiě)剛剛關(guān)于尋找最有可能的翻譯的表達(dá)式:

練習(xí)題:P(f) 去哪了?

這個(gè)公式的意思是,最有可能的翻譯,是以下兩個(gè)值的乘積的最大值:1. 某人說(shuō)出句子 e 的幾率,2. 如果他說(shuō)出了句子 e,他會(huì)把句子 e 翻譯成句子 f 的幾率。

噪聲信道的原理大概是這樣:我們想象某人的腦海里有句子 e,但是在它被正式說(shuō)出來(lái)之前,它被“噪聲”影響,從而變成了句子 f。為了恢復(fù)到最有可能的句子 e,我們推斷:1. 人們會(huì)用英語(yǔ)說(shuō)哪些句子,2. 英語(yǔ)是如何轉(zhuǎn)換成法語(yǔ)的。這倆有時(shí)被稱(chēng)為源模型(source modeling)和信道模型(channel modeling)。人們用噪聲信道來(lái)隱喻很多的工程問(wèn)題,比如電話傳播中的真實(shí)噪聲。

如果你想從電腦程序的角度去思考 P(e),你可以想象有一個(gè)程序,它接受一個(gè)任意的英語(yǔ)句子 e,返回一個(gè)概率 P(e)。我們很快就會(huì)見(jiàn)到這樣的程序。


或者,你也可以認(rèn)為有一個(gè)程序,它返回一個(gè)很長(zhǎng)的列表,包含了所有的英語(yǔ)句子 ei 和它們的 P(ei)。

對(duì)于 P(e|f),想象另一個(gè)程序,它接受一組句子 e 和 f,返回 P(e|f)。


同理,也可以是一個(gè)程序,它接受一個(gè)句子 e,返回所有可能的句子 fi,以及對(duì)應(yīng)的 P(e|fi)。

以上最后的兩個(gè)程序和第四節(jié)中的程序很類(lèi)似,除了 P(f|e) 和 P(e|f) 不一樣。

你可以把源(source)信道(channel)放在一起,像這樣:

有很多方法都可以產(chǎn)生出同一個(gè)法語(yǔ)句子 f。每一種方法都對(duì)應(yīng)著對(duì)源句子 e 的不同選擇。注意,兩個(gè)部分由右箭頭連接,這被稱(chēng)為生成模型(generative model)因?yàn)檫@個(gè)模型是關(guān)于法語(yǔ)句子 f 是如何被生成的。這個(gè)理論的意思是,首先一個(gè)英語(yǔ)句子 e 被生成,然后它被轉(zhuǎn)換成了法語(yǔ)句子。挺奇怪的一個(gè)理論。

六、貝葉斯推理

即使箭頭是向右指向的,我們其實(shí)會(huì)用這套理論來(lái)把法語(yǔ)翻譯回英語(yǔ)。

把句子 f 當(dāng)成一個(gè)犯罪現(xiàn)場(chǎng)。我們想推理這犯罪現(xiàn)場(chǎng)是怎么來(lái)的。我們的生成模型差不多是這樣一個(gè)東西:某人 e 決定去犯罪,然后他真的犯罪了。所以我們推理這兩點(diǎn):1. 哪些人可能會(huì)決定去犯罪(這里的 P(e) 可以認(rèn)為是動(dòng)機(jī)和人的性格),2. 他們可能會(huì)怎樣實(shí)施犯罪(這里的 P(f|e) 可以認(rèn)為是交通工具和武器),通常這兩點(diǎn)會(huì)沖突,某人可能有很好的動(dòng)機(jī)但卻沒(méi)有實(shí)施的條件,某人可能很輕易的實(shí)施犯罪但卻沒(méi)有動(dòng)機(jī)。

或者說(shuō),把句子 f 當(dāng)成一組醫(yī)學(xué)癥狀。很多的疾病都可能有這些癥狀。如果我們來(lái)建立生成模型,我們就可以推理出任意疾病 e 發(fā)生的概率和疾病 e 會(huì)顯示出癥狀 f 的概率。這又是 P(e) 和 P(f|e) 了。它們可能沖突:一些疾病很常見(jiàn)但可能沒(méi)有癥狀 f,一些疾病很罕見(jiàn)但可能總是有癥狀 f。這問(wèn)題是不是很艱難?

由于生物學(xué)家大概知道疾病是如何產(chǎn)生癥狀的,也就是 P(f|e) ,所以建立這樣的電腦模型是可能的。但要建立一個(gè)模型,通過(guò)癥狀推理得出疾病就沒(méi)有那么容易,也就是 P(e|f)。并且,我們可能有一些關(guān)于 P(e) 的孤立信息,比如醫(yī)院的早期記錄。

七、翻譯中的單詞重排序

如果我們直接用 P(e|f) 去推理得到翻譯,那我們最好很擅長(zhǎng)概率估計(jì)。另一方面,如果我們用貝葉斯公式把整個(gè)過(guò)程拆分,理論上,我們就可以得出一個(gè)不錯(cuò)的翻譯結(jié)果,即使概率值不高。

比如,假設(shè)我們當(dāng)句子 f 中的單詞能被翻譯成句子 e 中的單詞時(shí),才給 P(f|e) 很高的值,那句子 f 中的單詞可以是任意的順序:我們并不care。對(duì)于英語(yǔ)是如何被轉(zhuǎn)換成法語(yǔ)來(lái)說(shuō),這個(gè)模型并不準(zhǔn)確。可能對(duì)于英語(yǔ)是如何被轉(zhuǎn)換成爛法語(yǔ)來(lái)說(shuō),這個(gè)模型是準(zhǔn)確的。

現(xiàn)在,我們說(shuō)說(shuō) P(e)。假設(shè)我們當(dāng)英語(yǔ)句子 e 擁有正確的語(yǔ)法的時(shí)候,才給 P(e) 很高的值,這倒是挺合理的,即使實(shí)現(xiàn)起來(lái)很困難。

當(dāng)我們觀察句子 f,并努力找一個(gè)英語(yǔ)翻譯句子 e 的時(shí)候,一個(gè)有趣的事情發(fā)生了。每一個(gè)句子 e 都有它的 P(e) ? P(f|e)。因子 P(f|e) 會(huì)保證一個(gè)不錯(cuò)的英語(yǔ)句子 e 含有指定的單詞,這些單詞基本上都可以翻譯成法語(yǔ)句子 f 中的單詞。很多的句子 e 都會(huì)通過(guò)這個(gè)測(cè)試,比如,“the boy runs”通過(guò),“runs boy the”也通過(guò),一些句子的語(yǔ)法正確,另一些不正確。然而,因子 P(e) 會(huì)把那些語(yǔ)法不正確的句子的值降低。

實(shí)際上,P(e) 在操心單詞的順序,讓 P(f|e)不用干這事兒。這樣 P(f|e) 就可以更容易被建立。它只需要決定一堆英語(yǔ)單詞是否能被翻譯成一堆法語(yǔ)單詞。這可以用一些雙語(yǔ)詞典完成?;蛘邚乃惴ǖ慕嵌葋?lái)說(shuō),這部分模塊需要把一堆法語(yǔ)單詞翻譯成一堆英語(yǔ)單詞,并且給這兩堆單詞一個(gè)分?jǐn)?shù)。

練習(xí)題:把這些單詞按順序排列,“have programming a seen never I language better”,這個(gè)任務(wù)叫做詞袋生成(bag generation)。

練習(xí)題:把這些單詞按順序排列,“actual the hashing is since not collision-free usually the is less perfectly the of somewhat capacity table”。

練習(xí)題:你運(yùn)用了什么知識(shí)來(lái)完成以上任務(wù)?你是否認(rèn)為機(jī)器可以完成這些任務(wù)?你能否想出一種方式來(lái)評(píng)估機(jī)器的完成水平,不需要大量的人為檢查?

練習(xí)題:把這些單詞按順序排列,“l(fā)oves John Mary”。

最后一道題挺難的??雌饋?lái),P(f|e) 還是需要知道一些關(guān)于單詞順序的東西。它不能僅僅是推薦一堆無(wú)序單詞就完了。但它只需要懂一點(diǎn)點(diǎn)詞序,不是全部。

八、翻譯中的單詞選擇

在為法語(yǔ)單詞選擇英語(yǔ)翻譯的時(shí)候,P(e) 也是有用的。比如,一個(gè)法語(yǔ)單詞可以被翻譯成 "in" 或者 "on"。那就會(huì)有兩個(gè)有相同 P(f|e) 值的英語(yǔ)句子:1. she is in the end zone, 2. she is on the end zone。第一個(gè)句子比第二個(gè)句子要好,所以它會(huì)獲得更好的 P(e) 值,最終獲得更好的 P(e) * P(f|e) 值。記住,最有可能的翻譯就是擁有最高 P(e) * P(f|e) 值的句子。

練習(xí)題:寫(xiě)一句外語(yǔ)句子(譯者注:這里的外語(yǔ)指非英語(yǔ)),把單詞重新排列,讓他們看起來(lái)像是英語(yǔ)單詞的順序。用一個(gè)雙語(yǔ)詞典把所有單詞的所有可能翻譯(譯者注:這里的翻譯指非英語(yǔ)單詞對(duì)應(yīng)的英語(yǔ)單詞)都找出來(lái)。每個(gè)詞的翻譯寫(xiě)在它的下面組成一列。把最上面的非英語(yǔ)單詞全都擦掉。喊一個(gè)朋友(敵人也可以)通過(guò)每一列中選一個(gè)詞的方式來(lái)構(gòu)造一個(gè)英語(yǔ)句子。

九、語(yǔ)言模型

這些概率值從何而來(lái)?

稍后我們?cè)俨傩?P(f|e)。首先,我們需要建立一個(gè)程序,來(lái)給每一個(gè)英語(yǔ)句子 e 提供一個(gè) P(e) 值。這被稱(chēng)為語(yǔ)言模型(language model)。

我們可以建立一個(gè)程序,它熟悉這個(gè)世界,知道人們喜歡談?wù)撌裁?,知道人們?huì)用怎樣的語(yǔ)法結(jié)構(gòu)去描述特定的事情和物件等等。我們可以在程序里輸入大量的數(shù)字,然后進(jìn)行相加,乘積什么的。

另一個(gè)想法簡(jiǎn)單點(diǎn),僅僅把所有人說(shuō)過(guò)的英語(yǔ)句子記錄下來(lái)就好了。假設(shè)你有十億句子的語(yǔ)料庫(kù)。如果句子 “how's it going?” 在這個(gè)庫(kù)中出現(xiàn)了 76413 次,那 P(how’s it going?) = 76413/1000000000 = 0.000076413。我們可以用網(wǎng)絡(luò)或者在線的華爾街日?qǐng)?bào),如果我們不想自己做大量的記錄的話。

練習(xí)題:哪一個(gè)有更高的概率:"I like snakes" 和 "I hate snakes"。在 Google 中輸入它們,然后找出來(lái)。(搜索的時(shí)候用英文問(wèn)號(hào)?來(lái)保證在搜索結(jié)果里這些詞是按順序一起出現(xiàn)的)

練習(xí)題:“I hate baby poisonous snakes” 的概率是多少?

一個(gè)很大的問(wèn)題是,很多非常棒的句子會(huì)得到概率 0,因?yàn)槲覀儚奈匆?jiàn)過(guò)它們。這很糟糕。一個(gè)優(yōu)秀的 P(f|e) 模塊可能會(huì)給出一堆不錯(cuò)的單詞,比如 “hate snakes poisonous I baby”。但不管我們?nèi)绾芜M(jìn)行排序,P(e) 總是等于 0。這意味著,“hate snakes poisonous I baby” 會(huì)被認(rèn)為成和 “I hate baby poisonous snakes.” 是一樣的翻譯。

人們似乎可以判斷一堆單詞是否是一個(gè)合理的英語(yǔ)句子,而無(wú)需準(zhǔn)備語(yǔ)料庫(kù)。(你真的聽(tīng)說(shuō)過(guò)句子 “I hate baby poisonous snakes”?你確定?)我們似乎可以把句子拆分為更小的部分,然后只要這些小部分是合理地結(jié)合在一起的,我們就說(shuō)這堆單詞是一個(gè)合理的英語(yǔ)句子。

十、N-grams

對(duì)于計(jì)算機(jī)來(lái)說(shuō),把一串文本(string)拆分為小部分的最簡(jiǎn)單方式就是子串文本(substring)。一個(gè)包含 n 個(gè)單詞的子串文本被稱(chēng)為一個(gè) n-gram。如果 n = 2,我們稱(chēng)為 bigram(譯者注:bigram 可被譯為二元模型)。如果 n = 3,我們稱(chēng)為 trigram(譯者注:trigram 可被譯為三元模型)。如果 n = 1,書(shū)呆子們稱(chēng)為 unigram(譯者注:unigram 可被譯為一元模型),正常人稱(chēng)為單詞。

如果一串文本有很多合理的 n-grams,那么這串文本可能就是一個(gè)合理的句子。這不一定,但可能是。

讓 b(y|x) 為 單詞 y 緊跟隨單詞 x 的概率。我們可以通過(guò)在線語(yǔ)料來(lái)估計(jì)這個(gè)概率。直接用短語(yǔ) “xy” 出現(xiàn)的次數(shù)除以單詞 “x” 出現(xiàn)的次數(shù)。這被稱(chēng)為一個(gè)條件 bigram 概率(conditional bigram probability)。每一個(gè) b(y|x) 被稱(chēng)為一個(gè) 參數(shù)(parameter)

一個(gè)常用的 n-gram 估計(jì)量(estimator)看起來(lái)是這樣:


譯者注:number-of-occcurences 的意思是出現(xiàn)次數(shù)

因此,P(I hate baby poisonous snakes) 就約等于:


換句話說(shuō),你會(huì)用單詞 “I” 作為句子開(kāi)頭的幾率是多少?如果你用“I”開(kāi)頭,那么你會(huì)緊接著用單詞 “l(fā)ike” 的幾率是多少?如果你用了 “l(fā)ike”,那么 “snakes” 作為下一個(gè)單詞的幾率是多少?按同樣的邏輯繼續(xù)。

事實(shí)上,關(guān)于第五節(jié)中的生成理論,有另外一種情況。這個(gè)理論認(rèn)為,人們雖然不斷說(shuō)出一個(gè)個(gè)單詞,但除了前一個(gè)單詞,人們啥都不記得。這模型太瘋狂了吧。這被稱(chēng)為一個(gè) bigram 語(yǔ)言模型(bigram language model)。如果我們開(kāi)心,也可以允許人們記住前兩個(gè)單詞。這被稱(chēng)為一個(gè) trigram 語(yǔ)言模型(trigram language model):


十一、平滑(Smoothing)

N-gram 模型不會(huì)把從未出現(xiàn)過(guò)的句子認(rèn)為是概率 0。這是好事,正如 Martha Stewart 所說(shuō)。

只有一種情況你會(huì)看到概率 0,那就是這個(gè)句子含有一個(gè)從未之前出現(xiàn)過(guò)的 bigram 或者 trigram。這是有可能的。對(duì)于這種情況,我們可以做一些平滑。如果在我們的語(yǔ)料庫(kù)里,單詞 “z” 從沒(méi)緊跟隨過(guò) “xy”,我們可以看看 “z” 有沒(méi)有緊跟隨過(guò) “y”。如果有,那詞組 “xyz” 可能也不會(huì)差到哪去。如果沒(méi)有,我們可以繼續(xù)看看 “z” 是不是一個(gè)常用詞。如果不是,那 “xyz” 應(yīng)該給一個(gè)很低的概率值,相比較:


我們可以寫(xiě)成這樣:

在不同情況下使用不同的平滑系數(shù)(smoothing coefficients)是很容易的。你可以給 “xyz” 系數(shù)設(shè)為 0.95,也可以給其他情況比如 “abc” 系數(shù)設(shè)為 0.85。比如,如果 “ab” 不太常出現(xiàn),那么 “ab” 的出現(xiàn)次數(shù)和 “abc” 的出現(xiàn)次數(shù)就不是那么可靠。

注意,只要我們最后有 0.002,那所有的 trigram 條件概率就不會(huì)是 0,所以 P(e) 就不會(huì)是 0。這意味著,對(duì)于任意的單詞組,我們都有一個(gè)非 0 的正概率值,即使它們的語(yǔ)法是錯(cuò)誤的。畢竟,人有時(shí)說(shuō)話的語(yǔ)法都是錯(cuò)誤的。

對(duì)于估計(jì)平滑系數(shù),等會(huì)兒我們還會(huì)繼續(xù)討論一些。

n-gram 并不是整個(gè)統(tǒng)計(jì)機(jī)器翻譯所必須的。你可以為語(yǔ)言模型提供各種各樣的生成理論。比如,想象人們腦海里首先出現(xiàn)的是一個(gè)動(dòng)詞,然后他們?cè)谶@個(gè)動(dòng)詞前面想到了一個(gè)名詞,然后名詞前面又想到了一個(gè)形容詞,然后回到動(dòng)詞后面,想到一個(gè)名詞。這樣不斷繼續(xù),直到整個(gè)句子形成,然后脫口而出。

十二、對(duì)模型進(jìn)行評(píng)估

一個(gè)模型通常由一個(gè)生成理論(generative "story",比如,人們根據(jù)前兩個(gè)說(shuō)出的單詞來(lái)產(chǎn)生新單詞)和一組參數(shù)值(a set of parameter values,比如 b(z|xy) = 0.02)組成。通常來(lái)說(shuō),手動(dòng)設(shè)置參數(shù)值是很困難的,所以我們想到訓(xùn)練數(shù)據(jù)(training data)。N-gram 是很容易訓(xùn)練的,基本上我們只需要計(jì)算 n-gram 的出現(xiàn)次數(shù)然后使用除法。上一節(jié)最后描述的 名詞-動(dòng)詞-形容詞 模型可能不是那么容易訓(xùn)練。起碼,你要找到訓(xùn)練句子的謂語(yǔ)動(dòng)詞,即使你能做到,這個(gè)模型是否比 n-gram 的效果要好也難說(shuō)。

怎么去判斷一個(gè)模型比另一個(gè)模型要好?一種方法是收集一堆語(yǔ)料庫(kù)中不存在的英語(yǔ)測(cè)試數(shù)據(jù),然后提問(wèn):這個(gè)模型(生成理論+參數(shù)值)給我們提供的測(cè)試數(shù)據(jù)的概率值是多少?我們可以用符號(hào)來(lái)描述:P(模型|測(cè)試數(shù)據(jù))。

用貝葉斯公式:


譯者注:model即模型,test-data和data即測(cè)試數(shù)據(jù)

假設(shè) P(模型) 對(duì)于所有模型來(lái)說(shuō)都是一樣的。那就意味著,如果不關(guān)心測(cè)試數(shù)據(jù),我們是不知道對(duì)于不同模型來(lái)說(shuō) 0.95 是否比 0.07 要好。因此,最佳的模型就是 P(測(cè)試數(shù)據(jù)|模型) 值最大的模型。

練習(xí)題:P(測(cè)試數(shù)據(jù)) 去哪了?

還好,P(測(cè)試數(shù)據(jù)|模型) 是比較容易計(jì)算的。和 P(e) 一樣的,只不過(guò)這里的 e 變成了測(cè)試數(shù)據(jù)。

現(xiàn)在,任何能返回 P(e) 值的程序都可以,然后我們把它和其他程序比較。這蠻像賭博的,一個(gè)模型給所有的句子“下注”,也就是計(jì)算 P(e) 值。然后我們看這個(gè)模型給測(cè)試數(shù)據(jù)的 P(e) 值是多少。給得越多,這模型就越好。

相比 bigram,trigram 模型會(huì)給測(cè)試數(shù)據(jù)更高的值。為什么?bigram 模型會(huì)給句子 “I hire men who is good pilots” 一個(gè)比較高的值,因?yàn)檫@個(gè)句子由很合理的詞組組成,bigram 模型會(huì)給這個(gè)句子“下極高的注”。但 trigram 模型就不會(huì),因?yàn)?b(is|men who) 是極少出現(xiàn)的。也就是說(shuō), trigram 有更多的“錢(qián)”給那些測(cè)試數(shù)據(jù)中的合理但沒(méi)出現(xiàn)過(guò)的的句子下注(比如,“I hire men who are good pilots”)。

所有給測(cè)試數(shù)據(jù) 0 概率值的模型都會(huì)被淘汰!但我們總是會(huì)做一些平滑,對(duì)吧?關(guān)于平滑系數(shù) — 有很多方法可以設(shè)置平滑參數(shù),使 P(測(cè)試數(shù)據(jù)|模型) 的值更高。但這不太公平,我們不應(yīng)該給測(cè)試數(shù)據(jù)做任何的額外訓(xùn)練。更好的是,把原始測(cè)試數(shù)據(jù)分為兩部分。第一部分用來(lái)收集 n-gram 出現(xiàn)次數(shù)。第二部分用來(lái)設(shè)置平滑系數(shù)。這樣我們就可以用測(cè)試數(shù)據(jù)來(lái)評(píng)估所有的模型了。

十三、困惑度(Perplexity)

如果測(cè)試數(shù)據(jù)很長(zhǎng),那 n-gram 模型計(jì)算出的 P(e) 值是許多很小的值的乘積,一個(gè)值比一個(gè)值小。一些 n-gram 條件概率會(huì)非常的小。導(dǎo)致 P(e) 很難去閱讀和理解。一個(gè)更常用的比較不同模型的方式是計(jì)算:


這被稱(chēng)為模型的困惑度。N 是測(cè)試數(shù)據(jù)的單詞量。除以 N 使最終的值更常規(guī),不管測(cè)試數(shù)據(jù)的大小如何,一個(gè)模型總是有大致一樣的困惑度。對(duì)數(shù)(logarithm)的基數(shù)(base)是 2。

當(dāng) P(e) 增加時(shí),困惑度降低。一個(gè)好的模型有相對(duì)高的 P(e) 值,以及相對(duì)小的困惑度。困惑度越小越好。

練習(xí)題:假設(shè)一個(gè)語(yǔ)言模型給一個(gè)含有3個(gè)單詞的測(cè)試數(shù)據(jù)的 n-gram 條件概率值是 1/4, 1/2, 1/4。那么 P(測(cè)試數(shù)據(jù)) = 1/4 * 1/2 * 1/4 = 0.03125。困惑度是多少?假設(shè)另一個(gè)模型給一個(gè)含有6個(gè)單詞的測(cè)試數(shù)據(jù)的 n-gram 條件概率值是 1/4, 1/2, 1/4, 1/4, 1/2, 1/4。P(測(cè)試數(shù)據(jù)) 是多少?困惑度是多少?

練習(xí)題:如果 P(測(cè)試數(shù)據(jù)) = 0,這個(gè)模型的困惑度是多少?你覺(jué)得它為什么被稱(chēng)為“困惑度”?

十四、計(jì)算對(duì)數(shù)概率(Log Probability Arithmetic)

P(e) 的另一個(gè)問(wèn)題是很小的值會(huì)很容易導(dǎo)致浮點(diǎn)數(shù)下溢(underflow floating point scheme)。假設(shè) P(e) 是很多因子 f1, f2, f3, ..., fn 的乘積,每個(gè)因子都比上一個(gè)的值要小。有一個(gè)技巧是:

如果我們保存并使用概率的對(duì)數(shù)值,那我們就避免了下溢的問(wèn)題。相比較直接把兩個(gè)概率值相乘,我們把每個(gè)概率的對(duì)數(shù)值相加。用下面的表格熟悉一下對(duì)數(shù)概率:


(0.5 * 0.5 * 0.5 * ... * 0.5 = 0.5n) 可能導(dǎo)致最終值太小,但是 (-1-1-1- ... -1 = -n) 就相對(duì)可控多了。

記住對(duì)數(shù)的一個(gè)有效方式是:log2(x) = log10(x)/ log10(2)。

至此,對(duì)于概率值,我們只是把它們乘了起來(lái),后面我們需要把他們加起來(lái)。用對(duì)數(shù)的形式來(lái)做相加是很機(jī)智的。我們需要一個(gè)函數(shù) g,使得 g(log(p1), log(p2)) = log(p1+p2)。因?yàn)檫@樣的話,我們就可以很簡(jiǎn)單地先把概率的原始值加起來(lái)(而不是先取對(duì)數(shù)),再取對(duì)數(shù)。但第一步就讓整個(gè)想法終止了,因?yàn)樵嫉母怕手堤×?,保存時(shí)可能導(dǎo)致浮點(diǎn)數(shù)下溢。有一個(gè)不錯(cuò)的近似方式去實(shí)現(xiàn),我把這作為練習(xí)題吧。(提示:如果兩個(gè)對(duì)數(shù)概率值相差很大,在實(shí)際操作中,其中一個(gè)值是可以被忽略的。)

十五、翻譯模型(Translation Modeling)

P(e) 討論得差不多了?,F(xiàn)在我們可以為任意的英語(yǔ)句子 e 計(jì)算概率值。

接下來(lái),我們來(lái)看看 P(f|e) ,給定英語(yǔ)句子 e,法語(yǔ)句子 f 出現(xiàn)的幾率。這被稱(chēng)為翻譯模型。我們需要一個(gè)生成理論,來(lái)解釋英語(yǔ)句子是如何變成法語(yǔ)句子的。記住,P(f|e) 是整個(gè)法語(yǔ)到英語(yǔ)的機(jī)器翻譯系統(tǒng)的模塊。當(dāng)我們看到一個(gè)法語(yǔ)句子 f,我們會(huì)反向推理:1. 說(shuō)出的英語(yǔ)句子可能是什么?2. 其中哪些可能被翻譯成 f ?我們尋找一個(gè)英語(yǔ)句子,它的 P(e) * P(f|e) 值是最大的。

英語(yǔ)如何變成法語(yǔ)?一個(gè)不錯(cuò)的理論認(rèn)為英語(yǔ)句子被轉(zhuǎn)換成謂詞邏輯(predicate logic),或者是原子邏輯斷言的邏輯并(conjunction of atomic logical assertions)。這些理論將語(yǔ)言中的“非邏輯”部分全部剔除。比如,“John must not go”被轉(zhuǎn)換成

OBLIGATORY(NOT(GO(JOHN)))

“John may not go”被轉(zhuǎn)換成

NOT(PERMITTED(GO(JOHN)))

注意,盡管這兩個(gè)句子的句法相似,NOT 運(yùn)算符的使用卻非常不同。這個(gè)理論的另一部分是謂詞邏輯是如何轉(zhuǎn)換成法語(yǔ)的。我喜歡這個(gè)理論。

另一個(gè)理論是說(shuō),英語(yǔ)句子被進(jìn)行句法分析(parsed syntactically)。具體說(shuō),一個(gè)二叉樹(shù)(binary tree diagram)用來(lái)表示這個(gè)句子,描述了主體(head)和修飾語(yǔ)(modifier)之間的句法關(guān)系。比如,主語(yǔ)/動(dòng)詞,形容詞/名詞,介詞短語(yǔ)/動(dòng)詞短語(yǔ),等等。這個(gè)樹(shù)緊接著被轉(zhuǎn)化成另一個(gè)代表法語(yǔ)句法關(guān)系的樹(shù)。這個(gè)過(guò)程中,短語(yǔ)被互換,英語(yǔ)單詞被法語(yǔ)對(duì)應(yīng)的單詞替代。這個(gè)理論稱(chēng)為句法遷移(syntactic transfer)。

還有一個(gè)理論,認(rèn)為英語(yǔ)句子中的單詞被法語(yǔ)單詞替換,然后它們?cè)谀腔靵y地移動(dòng)位置。這算個(gè)什么鬼理論?然而本教程的后續(xù)內(nèi)容就會(huì)使用這個(gè)理論。我們將這個(gè)理論稱(chēng)為 IBM Model 3(譯者注:此術(shù)語(yǔ)不進(jìn)行翻譯)

至少,這個(gè)理論很簡(jiǎn)單。我們可以實(shí)現(xiàn)將任何英語(yǔ)句子轉(zhuǎn)換成任何法語(yǔ)句子,等會(huì)兒我們就會(huì)知道這是非常重要的。在其他理論里,我們并不清楚如何把句子進(jìn)行轉(zhuǎn)換。另一點(diǎn),P(f|e) 是不需要把英語(yǔ)轉(zhuǎn)換成優(yōu)秀的法語(yǔ)句子的。第七節(jié)和第八節(jié)中已經(jīng)討論過(guò),獨(dú)立訓(xùn)練的 P(e) 模塊會(huì)操心這個(gè)事情。

這個(gè)理論是這樣的:

  1. 對(duì)于英語(yǔ)句子(i = 1 ... l)中的每一個(gè)單詞 ei,我們選擇一個(gè)繁衍值(fertility)φi(讀作 “phi”,第二十一個(gè)希臘字母)。繁衍值的選擇僅僅取決于當(dāng)前句子中的單詞,不依賴(lài)于其他英語(yǔ)句子中的英語(yǔ)單詞以及它們的繁衍值。
  2. 對(duì)于每一個(gè)單詞 ei,我們生成 φi 個(gè)法語(yǔ)單詞。法語(yǔ)單詞的翻譯僅僅依賴(lài)于生成這個(gè)法語(yǔ)單詞的英語(yǔ)單詞,不依賴(lài)于英語(yǔ)單詞的上下文含義,也不依賴(lài)于其他通過(guò)當(dāng)前英語(yǔ)句子或其他英語(yǔ)句子已經(jīng)生成的任何法語(yǔ)單詞。
  3. 生成好的法語(yǔ)單詞被重新排列。每個(gè)法語(yǔ)單詞被給予在目標(biāo)法語(yǔ)句子中的絕對(duì)“位置編號(hào)”。比如,一個(gè)單詞可能被給予位置 3,另一個(gè)可能被給予位置 2 — 因此在最終的法語(yǔ)句子中,第二個(gè)單詞會(huì)排在第一個(gè)單詞的前面。法語(yǔ)單詞的位置選擇僅僅取決于生成它的英語(yǔ)單詞的絕對(duì)位置。

這個(gè)理論是不是很 funny?

十六、把翻譯當(dāng)成句子重寫(xiě)

你可以把這個(gè)生成理論當(dāng)做一種重寫(xiě)句子的方式。首先你寫(xiě)一個(gè)英語(yǔ)句子:

Mary did not slap the green witch

然后給繁衍值。對(duì)于第一個(gè)繁衍值,你可以簡(jiǎn)單地復(fù)制第一個(gè)單詞。對(duì)于第二個(gè)繁衍值,復(fù)制第二個(gè)單詞兩次。對(duì)于繁衍值 0,直接把原單詞扔掉。比如,我們可能給 “did” 為 0 的繁衍值。產(chǎn)生的新句子:

Mary not slap slap slap the the green witch

注意,“slap” 的繁衍值給了 3。接下來(lái),用法語(yǔ)單詞替換英語(yǔ)單詞(這里我用西班牙語(yǔ)吧,因?yàn)槲視?huì)西班牙語(yǔ))。這一步就一對(duì)一的做替換:

Mary no daba una botefada a la verde bruja

最后,我們重新排列單詞:

Mary no daba una botefada a la bruja verde

練習(xí)題:通過(guò)上面的生成理論把句子 “my child, you must go home” 用一門(mén)外語(yǔ)進(jìn)行翻譯。

十七、Model 3

在語(yǔ)言模型中,我們用生成理論 “人們基于上一個(gè)說(shuō)出的單詞來(lái)產(chǎn)生下一個(gè)新單詞”,和大量類(lèi)似 b(snakes|like) 的參數(shù)來(lái)確定了一個(gè)完整的模型。這些參數(shù)可以通過(guò)語(yǔ)料庫(kù)來(lái)取得?,F(xiàn)在,我們來(lái)做相同的事情。

在思考應(yīng)該擁有哪些參數(shù)的時(shí)候,我們只需要看看這個(gè)生成理論依賴(lài)了什么東西。比如,生成哪些法語(yǔ)單詞依賴(lài)了當(dāng)前的英語(yǔ)單詞。所以很容易可以想象出一個(gè)參數(shù) t(maison|house),它計(jì)算英語(yǔ)單詞 “house” 生成法語(yǔ)單詞 “maison” 的概率。繁衍值也一樣的,我們可以有一個(gè)參數(shù) n(1|house),它計(jì)算只要 “house” 出現(xiàn)時(shí),法語(yǔ)句子中就剛好有一個(gè)(不多不少)對(duì)應(yīng)的單詞的概率。被稱(chēng)為失真參數(shù)(distortion parameter)的東西也一樣,比如,d(5|2) 計(jì)算位于位置 2 的英語(yǔ)單詞生成的法語(yǔ)單詞剛好位于位置 5 的概率。事實(shí)上,Model 3 使用了一個(gè)略微優(yōu)化后的失真機(jī)制(distortion scheme),目標(biāo)位置會(huì)取決于英語(yǔ)句子和法語(yǔ)句子的長(zhǎng)度。因此這個(gè)參數(shù)看起來(lái)會(huì)是這樣 d(5|2, 4, 6),和 d(5|2) 的區(qū)別僅僅是多接受了英語(yǔ)句子的長(zhǎng)度 4 和法語(yǔ)句子的長(zhǎng)度 6。記住,失真參數(shù)不需要把每個(gè)法語(yǔ)單詞擺放成語(yǔ)法正確的。即使這個(gè)模型產(chǎn)生了爛法語(yǔ)也可以接受。

Model 3 有另一個(gè)優(yōu)化,真是“陰險(xiǎn)”。想象一些法語(yǔ)單詞是“偽造的”。就是說(shuō),他們神奇地出現(xiàn)在了最終的法語(yǔ)句子里,但卻沒(méi)有英語(yǔ)單詞對(duì)他們“負(fù)責(zé)”。比如,功能性單詞。想想上一節(jié)例子中的西班牙單詞 “a”。我給英語(yǔ)單詞 “the” 的繁衍值是 2,它最終產(chǎn)生了西班牙語(yǔ)里的 “a”。更好的做法可能是給 “the” 的繁衍值為 1,然后讓 “a” 被“偽造地”生成。

為了給這個(gè)現(xiàn)象建模,我們假定每一個(gè)英語(yǔ)句子在初始時(shí)都有一個(gè)不可見(jiàn)的單詞 NULL,它位于位置 0。我們給一個(gè)參數(shù) t(maison|NULL),它計(jì)算由 NULL 生成“偽造”單詞 maison 的概率。

我們也可以給類(lèi)似 n(3|NULL) 的參數(shù),它計(jì)算在最終的法語(yǔ)句子中有 3 個(gè)(不多不少)“偽造”單詞的概率。但是,Model 3 擔(dān)心長(zhǎng)句子會(huì)有更多的“偽造”單詞。這突如其來(lái)的顧慮,看不懂。但不管怎樣,相比于 n(0|NULL) ... n(25|NULL),我們可以只有一個(gè)浮點(diǎn)數(shù)參數(shù),稱(chēng)為 p1。你可以這樣理解 p1:在我們給所有“真正的”英語(yǔ)單詞(除了 NULL)設(shè)置繁衍值之后,我們就可以生成比如 z 個(gè)法語(yǔ)單詞。當(dāng)我們生成每個(gè)法語(yǔ)單詞時(shí),我們選擇性地通過(guò)概率 p1 把“偽造”單詞塞進(jìn)去。對(duì)于不把“偽造”單詞塞進(jìn)去的概率,我們用 p0 = 1 - p1 來(lái)表示。

練習(xí)題:如果一個(gè)英語(yǔ)單詞的繁衍值的最大值是 2,對(duì)于一個(gè)長(zhǎng)度為 l 的英語(yǔ)句子,對(duì)應(yīng)的法語(yǔ)句子的最大長(zhǎng)度是多少?(別忘記 NULL 生成的“偽造”單詞)

最后,我們來(lái)看看 NULL 生成的“偽造”單詞的失真概率。我擔(dān)心用參數(shù) d(5|0, 4, 6) 來(lái)計(jì)算太簡(jiǎn)單了,d(5|0, 4, 6) 的意思是 NULL 會(huì)生成位于位置 5 而不是其他位置的法語(yǔ)單詞的幾率。這些可是“偽造”的單詞啊,朋友!他們可以出現(xiàn)在任何位置!去預(yù)測(cè)它沒(méi)有意義的!相反,我們使用正常單詞的失真概率來(lái)選擇被正常生產(chǎn)的法語(yǔ)單詞的位置,然后把 NULL 生成的“偽造”單詞放在剩余的空位。如果 NULL 生成了 三個(gè)單詞,有三個(gè)空位,那就有 3!(3 的階乘),6 種方式去填充它們。我們給每一種方式 1/6 的概率。

我們現(xiàn)在可以完整地梳理模型 Model 3 了:

  1. 通過(guò)繁衍值概率 n(φi|ei),給每個(gè)英語(yǔ)單詞 ei,i = 1, 2, ..., l,提供一個(gè)繁衍值 φi
  2. 通過(guò) p1 概率以及上一步中的所有繁衍值 ei 的總和,給由 e0 = NULL 生成的“偽造”單詞,也提供一個(gè)繁衍值 φ0
  3. 讓 m 等于所有單詞的繁衍值的和,包括 NULL。
  4. 對(duì)于每一個(gè) i = 0, 1, 2, ..., l, k = 1, 2, ..., φi,通過(guò)概率 t(τik|ei),提供一個(gè)法語(yǔ)單詞 τik。( τ(譯者注:不是英語(yǔ)字母 T) 讀作 “tau”,第十九個(gè)希臘字母)。
  5. 對(duì)于每一個(gè) i = 1, 2, ..., l,k = 1, 2, ..., φi,通過(guò)概率 d(πik|i,l,m),提供法語(yǔ)句子中的目標(biāo)位置 πik(讀作 “pi”,第十六個(gè)希臘字母)。(譯者注:m 指目標(biāo)法語(yǔ)句子的長(zhǎng)度)。
  6. 對(duì)于每一個(gè) k = 1, 2, ..., φ0,通過(guò) 1/(φ0!) 的概率,從一共 m 個(gè)位置中的 φ0 - k + 1 個(gè)剩余空位中選出一個(gè)位置 π0k。
  7. 通過(guò)位于位置 πik 的法語(yǔ)單詞 Tik ,輸出整個(gè)法語(yǔ)句子。(0 ≤ i ≤ l, 1 ≤ k ≤ φi)。

如果你想從句子重寫(xiě)的角度來(lái)思考,參考下面的步驟:

  1. Mary did not slap the green witch (輸入)
  2. Mary not slap slap slap the green witch (提供繁衍值)
  3. Mary not slap slap slap NULL the green witch (提供“偽造”單詞的個(gè)數(shù))
  4. Mary no daba una botefada a la verde bruja (提供替代的單詞)
  5. Mary no daba una botefada a la bruja verde (提供目標(biāo)句子中的位置)

十八、Model 3 的參數(shù)

看得出來(lái),這個(gè)模型有四種參數(shù):n,t,p 和 d。n 和 t 是由浮點(diǎn)數(shù)組成的二維表。d 是由浮點(diǎn)數(shù)組成的一維表。p 是一個(gè)單獨(dú)的浮點(diǎn)數(shù)。這個(gè)模型沒(méi)有任何魔法:它幾乎只是一堆數(shù)字而已!

練習(xí)題:如果每一個(gè)浮點(diǎn)數(shù)占用 4 字節(jié)(bytes)的內(nèi)存,要存儲(chǔ)所有的表,你認(rèn)為需要多少的空間?


譯者:
第一部分正文結(jié)束
繼續(xù)第二部分正文(最后一部分)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容