原文 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)看起來是這樣:
因此,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ù))舆声。
用貝葉斯公式:
假設(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) 模塊會操心這個事情跨跨。
這個理論是這樣的:
- 對于英語句子(i = 1 ... l)中的每一個單詞 ei潮峦,我們選擇一個繁衍值(fertility)φi(讀作 “phi”囱皿,第二十一個希臘字母)。繁衍值的選擇僅僅取決于當(dāng)前句子中的單詞忱嘹,不依賴于其他英語句子中的英語單詞以及它們的繁衍值嘱腥。
- 對于每一個單詞 ei,我們生成 φi 個法語單詞拘悦。法語單詞的翻譯僅僅依賴于生成這個法語單詞的英語單詞齿兔,不依賴于英語單詞的上下文含義,也不依賴于其他通過當(dāng)前英語句子或其他英語句子已經(jīng)生成的任何法語單詞础米。
- 生成好的法語單詞被重新排列分苇。每個法語單詞被給予在目標(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 了:
- 通過繁衍值概率 n(φi|ei)沪摄,給每個英語單詞 ei躯嫉,i = 1, 2, ..., l纱烘,提供一個繁衍值 φi。
- 通過 p1 概率以及上一步中的所有繁衍值 ei 的總和祈餐,給由 e0 = NULL 生成的“偽造”單詞擂啥,也提供一個繁衍值 φ0绘梦。
- 讓 m 等于所有單詞的繁衍值的和背零,包括 NULL。
- 對于每一個 i = 0, 1, 2, ..., l桑逝, k = 1, 2, ..., φi蜒谤,通過概率 t(τik|ei)山宾,提供一個法語單詞 τik。( τ(譯者注:不是英語字母 T) 讀作 “tau”鳍徽,第十九個希臘字母)资锰。
- 對于每一個 i = 1, 2, ..., l,k = 1, 2, ..., φi阶祭,通過概率 d(πik|i,l,m)绷杜,提供法語句子中的目標(biāo)位置 πik(讀作 “pi”,第十六個希臘字母)濒募。(譯者注:m 指目標(biāo)法語句子的長度)鞭盟。
- 對于每一個 k = 1, 2, ..., φ0,通過 1/(φ0!) 的概率瑰剃,從一共 m 個位置中的 φ0 - k + 1 個剩余空位中選出一個位置 π0k齿诉。
- 通過位于位置 πik 的法語單詞 Tik ,輸出整個法語句子培他。(0 ≤ i ≤ l, 1 ≤ k ≤ φi)鹃两。
如果你想從句子重寫的角度來思考,參考下面的步驟:
- Mary did not slap the green witch (輸入)
- Mary not slap slap slap the green witch (提供繁衍值)
- Mary not slap slap slap NULL the green witch (提供“偽造”單詞的個數(shù))
- Mary no daba una botefada a la verde bruja (提供替代的單詞)
- 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ù)第二部分正文(最后一部分)