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

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

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

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


一、總體計劃

我們想自動分析人類已存在的句子翻譯語料,來建立通用的翻譯規(guī)則界斜。然后用這些規(guī)則來自動翻譯新的內(nèi)容沙兰!

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

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

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

二同眯、基本的概率知識

我們認(rèn)為,一個英語句子 e 可以被翻譯成任意的一個法語句子 f唯鸭。只不過一些翻譯比另一些更好须蜗。這里是一些基本的符號,我們用這些符號來正式地表示“更好”:

  • P(e) — 先驗(yàn)概率(priori probability)目溉。句子 e 發(fā)生的幾率明肮。比如,如果 e 是英語句子 “I like snakes”缭付,那么 P(e) 就是某個人在某時刻可能說出 “I like snakes” 而不是說出其他句子的幾率柿估。
  • P(f|e) — 條件概率(conditional probability)。給定句子 e陷猫,句子 f 的幾率秫舌。比如,如果 e 是英語句子 “ I like snakes“绣檬,如果 f 是法語句子 “maisson bleue”足陨,那么 P(f|e) 就是翻譯器把句子 e 翻譯成句子 f 的幾率。在這個例子中河咽,完全不可能钠右。
  • P(e, f) — 聯(lián)合概率(joint probability)。e 和 f 同時發(fā)生的幾率忘蟹。如果 e 和 f 互不影響飒房,我們可以寫成 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 同時發(fā)生的幾率”。如果 e 和 f 是互譯的兩串文本献酗,那它們之間肯定是一定程度上相互影響的寝受。

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

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

三很澄、和與乘積

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

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

如果在求和過程中有因子,但它不依賴求和的元素颜及,我們就可以把它放在外面:


練習(xí)題:


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


最后一個公式你可以這樣讀:“假設(shè) f 是被一些其他事件影響的,那么對于每一個會影響 f 的事件 e俏站,我們計算 e 發(fā)生的幾率和 e 發(fā)生且 f 同時發(fā)生的幾率讯蒲。為了覆蓋所有影響 f 的事件 e,我們把所有的幾率加起來肄扎∧郑”

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

對于一個法語句子 f反浓,我們尋找一個英語句子 e萌丈,這個句子 e 的 P(e|f) 值是最大的(即最有可能的翻譯)赞哗。有時我們這樣寫:


argmax 可以這樣讀:“在所有的英語句子中雷则,句子 e 的 P(e|f) 值是最大的”。如果你想用電腦程序的角度去思考它肪笋,你可以想象有這樣一個程序月劈,它接受一組句子 e 和 f,返回概率 P(e|f) 的值藤乙,稍后我們會看到這樣的程序猜揪。

或者,你也可以想象這樣一個程序坛梁,它接受一個句子 f 作為輸入而姐,返回所有可能的句子 ei 以及它的 P(e|f) 值。這樣的程序會需要更長的運(yùn)行時間划咐,即使你把英語句子的數(shù)量控制在一定范圍拴念。

五钧萍、噪聲信道(The Noisy Channel)

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

練習(xí)題:通過第二節(jié)提供的練習(xí)題风瘦,來證明這個公式

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

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

這個公式的意思是万搔,最有可能的翻譯,是以下兩個值的乘積的最大值:1. 某人說出句子 e 的幾率官帘,2. 如果他說出了句子 e瞬雹,他會把句子 e 翻譯成句子 f 的幾率。

噪聲信道的原理大概是這樣:我們想象某人的腦海里有句子 e刽虹,但是在它被正式說出來之前挖炬,它被“噪聲”影響,從而變成了句子 f状婶。為了恢復(fù)到最有可能的句子 e意敛,我們推斷:1. 人們會用英語說哪些句子,2. 英語是如何轉(zhuǎn)換成法語的膛虫。這倆有時被稱為源模型(source modeling)和信道模型(channel modeling)草姻。人們用噪聲信道來隱喻很多的工程問題,比如電話傳播中的真實(shí)噪聲稍刀。

如果你想從電腦程序的角度去思考 P(e)撩独,你可以想象有一個程序,它接受一個任意的英語句子 e账月,返回一個概率 P(e)综膀。我們很快就會見到這樣的程序。


或者局齿,你也可以認(rèn)為有一個程序剧劝,它返回一個很長的列表,包含了所有的英語句子 ei 和它們的 P(ei)抓歼。

對于 P(e|f)讥此,想象另一個程序,它接受一組句子 e 和 f谣妻,返回 P(e|f)萄喳。


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

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

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

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

六吧史、貝葉斯推理

即使箭頭是向右指向的邮辽,我們其實(shí)會用這套理論來把法語翻譯回英語。

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

或者說阎毅,把句子 f 當(dāng)成一組醫(yī)學(xué)癥狀焚刚。很多的疾病都可能有這些癥狀。如果我們來建立生成模型扇调,我們就可以推理出任意疾病 e 發(fā)生的概率和疾病 e 會顯示出癥狀 f 的概率矿咕。這又是 P(e) 和 P(f|e) 了。它們可能沖突:一些疾病很常見但可能沒有癥狀 f肃拜,一些疾病很罕見但可能總是有癥狀 f痴腌。這問題是不是很艱難雌团?

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

七毁枯、翻譯中的單詞重排序

如果我們直接用 P(e|f) 去推理得到翻譯慈缔,那我們最好很擅長概率估計。另一方面种玛,如果我們用貝葉斯公式把整個過程拆分藐鹤,理論上,我們就可以得出一個不錯的翻譯結(jié)果赂韵,即使概率值不高娱节。

比如,假設(shè)我們當(dāng)句子 f 中的單詞能被翻譯成句子 e 中的單詞時祭示,才給 P(f|e) 很高的值肄满,那句子 f 中的單詞可以是任意的順序:我們并不care。對于英語是如何被轉(zhuǎn)換成法語來說质涛,這個模型并不準(zhǔn)確稠歉。可能對于英語是如何被轉(zhuǎn)換成爛法語來說汇陆,這個模型是準(zhǔn)確的轧抗。

現(xiàn)在,我們說說 P(e)瞬测。假設(shè)我們當(dāng)英語句子 e 擁有正確的語法的時候横媚,才給 P(e) 很高的值,這倒是挺合理的月趟,即使實(shí)現(xiàn)起來很困難灯蝴。

當(dāng)我們觀察句子 f,并努力找一個英語翻譯句子 e 的時候孝宗,一個有趣的事情發(fā)生了穷躁。每一個句子 e 都有它的 P(e) ? P(f|e)。因子 P(f|e) 會保證一個不錯的英語句子 e 含有指定的單詞因妇,這些單詞基本上都可以翻譯成法語句子 f 中的單詞问潭。很多的句子 e 都會通過這個測試,比如婚被,“the boy runs”通過狡忙,“runs boy the”也通過,一些句子的語法正確址芯,另一些不正確灾茁。然而窜觉,因子 P(e) 會把那些語法不正確的句子的值降低翅敌。

實(shí)際上胸懈,P(e) 在操心單詞的順序,讓 P(f|e)不用干這事兒抬闯。這樣 P(f|e) 就可以更容易被建立拓颓。它只需要決定一堆英語單詞是否能被翻譯成一堆法語單詞语婴。這可以用一些雙語詞典完成∈荒溃或者從算法的角度來說腻格,這部分模塊需要把一堆法語單詞翻譯成一堆英語單詞,并且給這兩堆單詞一個分?jǐn)?shù)啥繁。

練習(xí)題:把這些單詞按順序排列菜职,“have programming a seen never I language better”,這個任務(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)用了什么知識來完成以上任務(wù)适室?你是否認(rèn)為機(jī)器可以完成這些任務(wù)嫡意?你能否想出一種方式來評估機(jī)器的完成水平,不需要大量的人為檢查捣辆?

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

最后一道題挺難的汽畴【山恚看起來,P(f|e) 還是需要知道一些關(guān)于單詞順序的東西忍些。它不能僅僅是推薦一堆無序單詞就完了鲁猩。但它只需要懂一點(diǎn)點(diǎn)詞序,不是全部罢坝。

八廓握、翻譯中的單詞選擇

在為法語單詞選擇英語翻譯的時候,P(e) 也是有用的嘁酿。比如隙券,一個法語單詞可以被翻譯成 "in" 或者 "on"。那就會有兩個有相同 P(f|e) 值的英語句子:1. she is in the end zone, 2. she is on the end zone闹司。第一個句子比第二個句子要好娱仔,所以它會獲得更好的 P(e) 值,最終獲得更好的 P(e) * P(f|e) 值开仰。記住拟枚,最有可能的翻譯就是擁有最高 P(e) * P(f|e) 值的句子薪铜。

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

九奶稠、語言模型

這些概率值從何而來?

稍后我們再操心 P(f|e)捡遍。首先锌订,我們需要建立一個程序,來給每一個英語句子 e 提供一個 P(e) 值画株。這被稱為語言模型(language model)辆飘。

我們可以建立一個程序,它熟悉這個世界谓传,知道人們喜歡談?wù)撌裁打谙睿廊藗儠迷鯓拥恼Z法結(jié)構(gòu)去描述特定的事情和物件等等。我們可以在程序里輸入大量的數(shù)字续挟,然后進(jìn)行相加紧卒,乘積什么的。

另一個想法簡單點(diǎn)诗祸,僅僅把所有人說過的英語句子記錄下來就好了跑芳。假設(shè)你有十億句子的語料庫。如果句子 “how's it going?” 在這個庫中出現(xiàn)了 76413 次直颅,那 P(how’s it going?) = 76413/1000000000 = 0.000076413聋亡。我們可以用網(wǎng)絡(luò)或者在線的華爾街日報,如果我們不想自己做大量的記錄的話际乘。

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

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

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

人們似乎可以判斷一堆單詞是否是一個合理的英語句子,而無需準(zhǔn)備語料庫洲脂。(你真的聽說過句子 “I hate baby poisonous snakes”斤儿?你確定?)我們似乎可以把句子拆分為更小的部分恐锦,然后只要這些小部分是合理地結(jié)合在一起的往果,我們就說這堆單詞是一個合理的英語句子。

十一铅、N-grams

對于計算機(jī)來說陕贮,把一串文本(string)拆分為小部分的最簡單方式就是子串文本(substring)。一個包含 n 個單詞的子串文本被稱為一個 n-gram潘飘。如果 n = 2肮之,我們稱為 bigram(譯者注:bigram 可被譯為二元模型)。如果 n = 3福也,我們稱為 trigram(譯者注:trigram 可被譯為三元模型)局骤。如果 n = 1,書呆子們稱為 unigram(譯者注:unigram 可被譯為一元模型)暴凑,正常人稱為單詞峦甩。

如果一串文本有很多合理的 n-grams,那么這串文本可能就是一個合理的句子现喳。這不一定凯傲,但可能是。

讓 b(y|x) 為 單詞 y 緊跟隨單詞 x 的概率嗦篱。我們可以通過在線語料來估計這個概率冰单。直接用短語 “xy” 出現(xiàn)的次數(shù)除以單詞 “x” 出現(xiàn)的次數(shù)。這被稱為一個條件 bigram 概率(conditional bigram probability)灸促。每一個 b(y|x) 被稱為一個 參數(shù)(parameter)诫欠。

一個常用的 n-gram 估計量(estimator)看起來是這樣:


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

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


換句話說浴栽,你會用單詞 “I” 作為句子開頭的幾率是多少荒叼?如果你用“I”開頭,那么你會緊接著用單詞 “l(fā)ike” 的幾率是多少典鸡?如果你用了 “l(fā)ike”被廓,那么 “snakes” 作為下一個單詞的幾率是多少?按同樣的邏輯繼續(xù)萝玷。

事實(shí)上嫁乘,關(guān)于第五節(jié)中的生成理論昆婿,有另外一種情況。這個理論認(rèn)為蜓斧,人們雖然不斷說出一個個單詞仓蛆,但除了前一個單詞,人們啥都不記得法精。這模型太瘋狂了吧多律。這被稱為一個 bigram 語言模型(bigram language model)痴突。如果我們開心搂蜓,也可以允許人們記住前兩個單詞。這被稱為一個 trigram 語言模型(trigram language model):


十一辽装、平滑(Smoothing)

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

只有一種情況你會看到概率 0殉挽,那就是這個句子含有一個從未之前出現(xiàn)過的 bigram 或者 trigram。這是有可能的拓巧。對于這種情況斯碌,我們可以做一些平滑。如果在我們的語料庫里肛度,單詞 “z” 從沒緊跟隨過 “xy”傻唾,我們可以看看 “z” 有沒有緊跟隨過 “y”。如果有承耿,那詞組 “xyz” 可能也不會差到哪去冠骄。如果沒有,我們可以繼續(xù)看看 “z” 是不是一個常用詞加袋。如果不是凛辣,那 “xyz” 應(yīng)該給一個很低的概率值,相比較:


我們可以寫成這樣:

在不同情況下使用不同的平滑系數(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 條件概率就不會是 0,所以 P(e) 就不會是 0壹堰。這意味著拭卿,對于任意的單詞組骡湖,我們都有一個非 0 的正概率值,即使它們的語法是錯誤的峻厚。畢竟响蕴,人有時說話的語法都是錯誤的。

對于估計平滑系數(shù)惠桃,等會兒我們還會繼續(xù)討論一些浦夷。

n-gram 并不是整個統(tǒng)計機(jī)器翻譯所必須的。你可以為語言模型提供各種各樣的生成理論辜王。比如劈狐,想象人們腦海里首先出現(xiàn)的是一個動詞,然后他們在這個動詞前面想到了一個名詞呐馆,然后名詞前面又想到了一個形容詞肥缔,然后回到動詞后面,想到一個名詞汹来。這樣不斷繼續(xù)续膳,直到整個句子形成,然后脫口而出收班。

十二坟岔、對模型進(jìn)行評估

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

怎么去判斷一個模型比另一個模型要好住涉?一種方法是收集一堆語料庫中不存在的英語測試數(shù)據(jù),然后提問:這個模型(生成理論+參數(shù)值)給我們提供的測試數(shù)據(jù)的概率值是多少钠绍?我們可以用符號來描述:P(模型|測試數(shù)據(jù))舆声。

用貝葉斯公式:


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

假設(shè) P(模型) 對于所有模型來說都是一樣的。那就意味著媳握,如果不關(guān)心測試數(shù)據(jù)碱屁,我們是不知道對于不同模型來說 0.95 是否比 0.07 要好。因此蛾找,最佳的模型就是 P(測試數(shù)據(jù)|模型) 值最大的模型娩脾。

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

還好打毛,P(測試數(shù)據(jù)|模型) 是比較容易計算的柿赊。和 P(e) 一樣的,只不過這里的 e 變成了測試數(shù)據(jù)幻枉。

現(xiàn)在碰声,任何能返回 P(e) 值的程序都可以,然后我們把它和其他程序比較展辞。這蠻像賭博的奥邮,一個模型給所有的句子“下注”万牺,也就是計算 P(e) 值罗珍。然后我們看這個模型給測試數(shù)據(jù)的 P(e) 值是多少。給得越多脚粟,這模型就越好覆旱。

相比 bigram,trigram 模型會給測試數(shù)據(jù)更高的值核无。為什么扣唱?bigram 模型會給句子 “I hire men who is good pilots” 一個比較高的值,因?yàn)檫@個句子由很合理的詞組組成团南,bigram 模型會給這個句子“下極高的注”噪沙。但 trigram 模型就不會,因?yàn)?b(is|men who) 是極少出現(xiàn)的吐根。也就是說正歼, trigram 有更多的“錢”給那些測試數(shù)據(jù)中的合理但沒出現(xiàn)過的的句子下注(比如,“I hire men who are good pilots”)拷橘。

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

十三目养、困惑度(Perplexity)

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


這被稱為模型的困惑度努释。N 是測試數(shù)據(jù)的單詞量碘梢。除以 N 使最終的值更常規(guī),不管測試數(shù)據(jù)的大小如何伐蒂,一個模型總是有大致一樣的困惑度煞躬。對數(shù)(logarithm)的基數(shù)(base)是 2。

當(dāng) P(e) 增加時逸邦,困惑度降低恩沛。一個好的模型有相對高的 P(e) 值,以及相對小的困惑度缕减。困惑度越小越好雷客。

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

練習(xí)題:如果 P(測試數(shù)據(jù)) = 0,這個模型的困惑度是多少嫂易?你覺得它為什么被稱為“困惑度”兄朋?

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

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

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


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

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

至此巍佑,對于概率值茴迁,我們只是把它們乘了起來,后面我們需要把他們加起來萤衰。用對數(shù)的形式來做相加是很機(jī)智的堕义。我們需要一個函數(shù) g,使得 g(log(p1), log(p2)) = log(p1+p2)脆栋。因?yàn)檫@樣的話倦卖,我們就可以很簡單地先把概率的原始值加起來(而不是先取對數(shù)),再取對數(shù)椿争。但第一步就讓整個想法終止了怕膛,因?yàn)樵嫉母怕手堤×耍4鏁r可能導(dǎo)致浮點(diǎn)數(shù)下溢秦踪。有一個不錯的近似方式去實(shí)現(xiàn)褐捻,我把這作為練習(xí)題吧。(提示:如果兩個對數(shù)概率值相差很大椅邓,在實(shí)際操作中柠逞,其中一個值是可以被忽略的。)

十五希坚、翻譯模型(Translation Modeling)

P(e) 討論得差不多了”咂唬現(xiàn)在我們可以為任意的英語句子 e 計算概率值。

接下來裁僧,我們來看看 P(f|e) ,給定英語句子 e慕购,法語句子 f 出現(xiàn)的幾率聊疲。這被稱為翻譯模型。我們需要一個生成理論沪悲,來解釋英語句子是如何變成法語句子的获洲。記住,P(f|e) 是整個法語到英語的機(jī)器翻譯系統(tǒng)的模塊殿如。當(dāng)我們看到一個法語句子 f贡珊,我們會反向推理:1. 說出的英語句子可能是什么?2. 其中哪些可能被翻譯成 f 涉馁?我們尋找一個英語句子门岔,它的 P(e) * P(f|e) 值是最大的。

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

OBLIGATORY(NOT(GO(JOHN)))

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

NOT(PERMITTED(GO(JOHN)))

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

另一個理論是說好渠,英語句子被進(jìn)行句法分析(parsed syntactically)局嘁。具體說,一個二叉樹(binary tree diagram)用來表示這個句子晦墙,描述了主體(head)和修飾語(modifier)之間的句法關(guān)系悦昵。比如,主語/動詞晌畅,形容詞/名詞但指,介詞短語/動詞短語,等等抗楔。這個樹緊接著被轉(zhuǎn)化成另一個代表法語句法關(guān)系的樹棋凳。這個過程中,短語被互換连躏,英語單詞被法語對應(yīng)的單詞替代剩岳。這個理論稱為句法遷移(syntactic transfer)

還有一個理論入热,認(rèn)為英語句子中的單詞被法語單詞替換拍棕,然后它們在那混亂地移動位置。這算個什么鬼理論勺良?然而本教程的后續(xù)內(nèi)容就會使用這個理論绰播。我們將這個理論稱為 IBM Model 3(譯者注:此術(shù)語不進(jìn)行翻譯)

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

這個理論是這樣的:

  1. 對于英語句子(i = 1 ... l)中的每一個單詞 ei潮峦,我們選擇一個繁衍值(fertility)φi(讀作 “phi”囱皿,第二十一個希臘字母)。繁衍值的選擇僅僅取決于當(dāng)前句子中的單詞忱嘹,不依賴于其他英語句子中的英語單詞以及它們的繁衍值嘱腥。
  2. 對于每一個單詞 ei,我們生成 φi 個法語單詞拘悦。法語單詞的翻譯僅僅依賴于生成這個法語單詞的英語單詞齿兔,不依賴于英語單詞的上下文含義,也不依賴于其他通過當(dāng)前英語句子或其他英語句子已經(jīng)生成的任何法語單詞础米。
  3. 生成好的法語單詞被重新排列分苇。每個法語單詞被給予在目標(biāo)法語句子中的絕對“位置編號”。比如屁桑,一個單詞可能被給予位置 3医寿,另一個可能被給予位置 2 — 因此在最終的法語句子中,第二個單詞會排在第一個單詞的前面蘑斧。法語單詞的位置選擇僅僅取決于生成它的英語單詞的絕對位置靖秩。

這個理論是不是很 funny?

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

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

Mary did not slap the green witch

然后給繁衍值。對于第一個繁衍值捕传,你可以簡單地復(fù)制第一個單詞惠拭。對于第二個繁衍值,復(fù)制第二個單詞兩次庸论。對于繁衍值 0职辅,直接把原單詞扔掉。比如葡公,我們可能給 “did” 為 0 的繁衍值罐农。產(chǎn)生的新句子:

Mary not slap slap slap the the green witch

注意,“slap” 的繁衍值給了 3催什。接下來,用法語單詞替換英語單詞(這里我用西班牙語吧宰睡,因?yàn)槲視靼嘌勒Z)蒲凶。這一步就一對一的做替換:

Mary no daba una botefada a la verde bruja

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

Mary no daba una botefada a la bruja verde

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

十七旋圆、Model 3

在語言模型中,我們用生成理論 “人們基于上一個說出的單詞來產(chǎn)生下一個新單詞”麸恍,和大量類似 b(snakes|like) 的參數(shù)來確定了一個完整的模型灵巧。這些參數(shù)可以通過語料庫來取得〔蠼茫現(xiàn)在,我們來做相同的事情刻肄。

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

Model 3 有另一個優(yōu)化疮装,真是“陰險”。想象一些法語單詞是“偽造的”粘都。就是說廓推,他們神奇地出現(xiàn)在了最終的法語句子里,但卻沒有英語單詞對他們“負(fù)責(zé)”翩隧。比如樊展,功能性單詞。想想上一節(jié)例子中的西班牙單詞 “a”堆生。我給英語單詞 “the” 的繁衍值是 2专缠,它最終產(chǎn)生了西班牙語里的 “a”。更好的做法可能是給 “the” 的繁衍值為 1淑仆,然后讓 “a” 被“偽造地”生成涝婉。

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

我們也可以給類似 n(3|NULL) 的參數(shù)渔工,它計算在最終的法語句子中有 3 個(不多不少)“偽造”單詞的概率锌钮。但是,Model 3 擔(dān)心長句子會有更多的“偽造”單詞涨缚。這突如其來的顧慮轧粟,看不懂。但不管怎樣脓魏,相比于 n(0|NULL) ... n(25|NULL)兰吟,我們可以只有一個浮點(diǎn)數(shù)參數(shù),稱為 p1茂翔。你可以這樣理解 p1:在我們給所有“真正的”英語單詞(除了 NULL)設(shè)置繁衍值之后混蔼,我們就可以生成比如 z 個法語單詞。當(dāng)我們生成每個法語單詞時珊燎,我們選擇性地通過概率 p1 把“偽造”單詞塞進(jìn)去惭嚣。對于不把“偽造”單詞塞進(jìn)去的概率,我們用 p0 = 1 - p1 來表示悔政。

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

最后槽地,我們來看看 NULL 生成的“偽造”單詞的失真概率。我擔(dān)心用參數(shù) d(5|0, 4, 6) 來計算太簡單了芦瘾,d(5|0, 4, 6) 的意思是 NULL 會生成位于位置 5 而不是其他位置的法語單詞的幾率捌蚊。這些可是“偽造”的單詞啊,朋友近弟!他們可以出現(xiàn)在任何位置缅糟!去預(yù)測它沒有意義的!相反祷愉,我們使用正常單詞的失真概率來選擇被正常生產(chǎn)的法語單詞的位置窗宦,然后把 NULL 生成的“偽造”單詞放在剩余的空位。如果 NULL 生成了 三個單詞二鳄,有三個空位迫摔,那就有 3!(3 的階乘),6 種方式去填充它們泥从。我們給每一種方式 1/6 的概率。

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

  1. 通過繁衍值概率 n(φi|ei)沪摄,給每個英語單詞 ei躯嫉,i = 1, 2, ..., l纱烘,提供一個繁衍值 φi
  2. 通過 p1 概率以及上一步中的所有繁衍值 ei 的總和祈餐,給由 e0 = NULL 生成的“偽造”單詞擂啥,也提供一個繁衍值 φ0绘梦。
  3. 讓 m 等于所有單詞的繁衍值的和背零,包括 NULL。
  4. 對于每一個 i = 0, 1, 2, ..., l桑逝, k = 1, 2, ..., φi蜒谤,通過概率 t(τik|ei)山宾,提供一個法語單詞 τik。( τ(譯者注:不是英語字母 T) 讀作 “tau”鳍徽,第十九個希臘字母)资锰。
  5. 對于每一個 i = 1, 2, ..., l,k = 1, 2, ..., φi阶祭,通過概率 d(πik|i,l,m)绷杜,提供法語句子中的目標(biāo)位置 πik(讀作 “pi”,第十六個希臘字母)濒募。(譯者注:m 指目標(biāo)法語句子的長度)鞭盟。
  6. 對于每一個 k = 1, 2, ..., φ0,通過 1/(φ0!) 的概率瑰剃,從一共 m 個位置中的 φ0 - k + 1 個剩余空位中選出一個位置 π0k齿诉。
  7. 通過位于位置 πik 的法語單詞 Tik ,輸出整個法語句子培他。(0 ≤ i ≤ l, 1 ≤ k ≤ φ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 (提供“偽造”單詞的個數(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ù)

看得出來俊扳,這個模型有四種參數(shù):n,t猛遍,p 和 d馋记。n 和 t 是由浮點(diǎn)數(shù)組成的二維表。d 是由浮點(diǎn)數(shù)組成的一維表懊烤。p 是一個單獨(dú)的浮點(diǎn)數(shù)梯醒。這個模型沒有任何魔法:它幾乎只是一堆數(shù)字而已!

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


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末壁肋,一起剝皮案震驚了整個濱河市号胚,隨后出現(xiàn)的幾起案子籽慢,更是在濱河造成了極大的恐慌,老刑警劉巖猫胁,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箱亿,死亡現(xiàn)場離奇詭異,居然都是意外死亡弃秆,警方通過查閱死者的電腦和手機(jī)届惋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菠赚,“玉大人脑豹,你說我怎么就攤上這事⌒庵粒” “怎么了晨缴?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長峡捡。 經(jīng)常有香客問我击碗,道長,這世上最難降的妖魔是什么们拙? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任稍途,我火速辦了婚禮,結(jié)果婚禮上砚婆,老公的妹妹穿的比我還像新娘械拍。我一直安慰自己,他們只是感情好装盯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布坷虑。 她就那樣靜靜地躺著,像睡著了一般埂奈。 火紅的嫁衣襯著肌膚如雪迄损。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天账磺,我揣著相機(jī)與錄音芹敌,去河邊找鬼。 笑死垮抗,一個胖子當(dāng)著我的面吹牛氏捞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冒版,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼液茎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起豁护,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤哼凯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后楚里,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猎贴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年班缎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片她渴。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡达址,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趁耗,到底是詐尸還是另有隱情沉唠,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布苛败,位于F島的核電站满葛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏罢屈。R本人自食惡果不足惜嘀韧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缠捌。 院中可真熱鬧锄贷,春花似錦、人聲如沸曼月。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哑芹。三九已至炎辨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绩衷,已是汗流浹背蹦魔。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咳燕,地道東北人勿决。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像招盲,于是被迫代替她去往敵國和親低缩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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