淺談自然語言處理 – 早期機器翻譯
淺談自然語言處理 – 3
作者:李嘉銘
「Siri,零除以零是多少?」
「假如你有0塊餅乾,要分給0個朋友,每個人能分到幾塊?你看,這個問題沒有任何意義吧?甜餅怪會難過,因為沒有餅乾吃,而你也會難過,因為你一個朋友都沒有。」
自然語言處理簡史 – 早期機器翻譯
上次我們聊到19世紀40年代到60年代之間自然語言處理研究的創立,以及初期遇到的一些困難。在美國政府決定停止給自然語言處理研究提供資金之後,在其他國家中研究仍在繼續。根據《機器翻譯史》中提到的,加拿大率先研發了METEO System用於翻譯天氣預報。它支持英語和法語之間的互譯,在1980年正式被啟用並且搶了初級翻譯員的飯碗。無獨有偶,Systran公司在1968年創立並研發了用於歐洲語言之間互相翻譯的軟體,它的軟體在70年代首次被包括NATO,國際核能組織,以及通用汽車公司等所使用。
如果你還記得上次的聊天軟體ELIZA,你可能會覺得這麼短時間內絕對不可能出現機器翻譯軟體。METEO System和Systran是如何做到的?難道美國政府嚴重高估了自然語言處理的難度?為了回答這些問題,我們首先得了解早期機器翻譯系統是如何運作的。
三步實現機器翻譯
早期機器翻譯系統通常是一句一句翻譯的(現在大部分翻譯軟體仍然如此),對於每一句句子,它分為三個步驟:
- 從句子中提取語法信息。
- 按照目標語言把語法結構進行重新排列。
- 把每個詞從源語言翻譯成目標語言。
這個簡單翻譯系統受到了會雙語的翻譯者們的啟發,它會在之後的自然語言系統中不斷的重複出現,所以我們需要一步一步仔細理解它。
假設我們受雇於加拿大政府,幫助他們翻譯天氣預告,我們要把如下的一句句子翻譯為法文:「蒙特利爾的天氣是多雲。」我不懂法文,而且我也並不精通翻譯,所以我得慢慢來。我手上有如下一些東西:中法詞典一本、初級語法書一本、還有稍微懂一些法語的我的朋友小明。
從句子中提取語法信息
詞性
首先我得搞清楚每一個詞的詞性,詞性的劃分是根據詞在句子中所起到的語法作用而來的,一般有名詞、動詞、形容詞之類的。我在詞典里找到「蒙特利爾」,它是個名詞,我把名詞標上之後繼續去找下一個詞「的」的詞性。很快我就把整句句子里的詞性全標記上了:「蒙特利爾/名詞 的/助詞 天氣/名詞 是/動詞 多雲/形容詞 。/。」
語法分析樹
我所需要的下一樣東西是這句句子的語法分析樹,或者簡稱分析樹。顧名思義,語法分析樹是把文本按照語法拆分成樹狀結構的結果。要簡單的理解分析樹的話,可以先從數學公式開始,因為數學公式的語法其實比自然語言的語法簡單的多。比如我們要計算x + y * z,我們得先算乘法再算加法,而分析樹的作用就是寫清楚:是先乘法還是先加法。同樣,在自然語言中分析樹的作用就是寫清楚形容詞描述的到底是哪個名詞,以及句子的主語是哪個之類的。
左邊的是x + y * z正確的分析樹,右邊的則是(x + y) * z的分析樹。
回到我們剛剛的例子「蒙特利爾的天氣是多雲。」,我知道「蒙特利爾」和「的」應該組合在一起,因為根據語法書上的說法,名詞 + 助詞=>名詞助詞短語,我還知道「是多雲」應該組合在一起,因為動詞 + 形容詞 => 動詞短語。以此類推,組合到最後的結果是:名詞短語 + 動詞短語 + 。 => 完整的句子!正式的語法樹長得如下:(如果看不懂那些詞性的英文簡寫沒關係,都是語言學的術語,大部分我也看不懂,感興趣的話這裡有中文的常用詞性的列表。)
「蒙特利爾的天氣是多雲。」的語法分析樹
按照目標語言把語法結構進行重新排列
我現在得把分析樹轉換成法語的句式,於是我問我朋友小明:「這個分析樹所對應的句式是什麼?」。他看了一眼以後回答:「應該是「(中文無對應詞)/冠詞 天氣/名詞 在/助詞 蒙特利爾/名詞 是/動詞 多雲/形容詞 。/。」,你知道有個東西叫谷歌翻譯的對吧?」我不理會他關愛智障一般的眼神,把他給的句式抄了下來。如果你只看詞性的話,你會發現基本上它只是把中文的句式結構在某些部分顛倒了一下,其實和英文里的句式差不多。
把每個詞從源語言翻譯成目標語言
我拿出我的中法詞典並且開始查找「天氣」和與之相對應的冠詞,我找到的是」La météo」。我繼續把接下去每一個中文詞都找到與之對應的法語詞。最後我得到的結果長得像這樣:「La/冠詞 météo/名詞 à/助詞 Montréal/名詞 est/動詞 nuageuse/形容詞 ./。」,我把標註的詞性去掉之後句子變成了:「La météo à Montréal est nuageuse.」,看上去貌似是對的。
有限狀態機和詞典
我們剛剛展示了分三步的機器翻譯系統是如何運作的,我們還介紹了兩個十分重要的語言學概念:詞性和分析樹。詞性告訴我們一個詞到底是名詞、動詞、還是其他什麼類型的詞,而分析樹則用樹形結構表示了我們腦中詞和詞之間的關係。與此同時,在每一個步驟中我們還用到我們手上有額外的一些東西。
第一步里,我們假設手上有能夠查詢詞性的詞典,我們之前說到過詞可能會有多種詞性和意思,然而因為我們只需要翻譯一種類型的內容,像是對於METEO System的話,只需要翻譯天氣預報,因此詞的意思和詞性一般沒有歧義。所以我們才能準確無誤的用詞典找到正確的詞性,並且不用擔心需要在多個可能的詞性里選擇一個,因為一般只有一種可能。
在我們把詞性標註完成之後,我們還畫出了整個句子的結構樹,對於我們人來說,我們直覺上知道哪些詞應該組合在一起,因為那樣才說得通。然而對於機器來說,他們並沒有直覺,而必須依賴規則和邏輯,他們需要一個內在的狀態來記錄某些關鍵信息,比如:「我是否看到過一個動詞?這句句子是不是少一個賓語?我剛看到一個』the』所以它之後跟的應該是名詞。」。如果一個程序擁有內在的狀態並且根據一系列的規則和邏輯來改變自己所在的狀態的話,我們叫它有限狀態機(Finite State Machine)。
能夠幫助理解有限狀態機最好的例子其實是遊戲的AI,我們拿吃豆人來打比方,控制吃豆人里的敵軍的有限狀態機基本上只有7種狀態,敵軍通過判斷吃豆人有沒有吃到強化藥劑來判斷需要追還是需要逃。」追吃豆人」和「逃離吃豆人」就是兩種狀態,而「吃豆人吃了強化藥劑」是用來改變AI狀態的規則,一旦滿足了一定的規則,有限狀態機就會進入一個新的狀態。用於自然語言的有限狀態機比吃豆人的AI要複雜許多,但是工作原理還是一樣的,每次有限狀態機都會從初始狀態開始,檢查現在滿足了哪個規則,並且根據那個規則進入新的一個狀態,之後再次檢查規則……它會重複這些操作直到進入結束狀態。有限狀態機在編程中有著廣泛的運用,有興趣的話可以進一步了解一下。
吃豆人AI的有限狀態機
回到我們的機器翻譯上來,在用有限狀態機生成了結構樹之後,在第二步中,我們用到了我的朋友小明,小明幫我們把結構樹轉換成了法語的語法句式。但可憐的機器翻譯系統一個朋友都沒有,不過它可以用有限狀態機來完成這一步。其實這個過程和之前把源語言的句子轉換成結構樹類似,只是把輸入輸出顛倒了一下,現在的輸入是分析樹,而輸出的則是目標語言的語法句式,兩者之間技術上沒啥區別。
最後一步中,我用了中法詞典,和我第一步用的詞性詞典所類似,翻譯程序可以輕易的儲存並且使用中法詞典而不用擔心詞的意思有歧義。至此,我們把我們所需要的所有資源全都列出來了,而我們的工作也被使用有限狀態機和詞典的機器翻譯軟體所取代了。
有限狀態機的弊端
如果我們把ELIZA和包括METEO System的機器翻譯軟體相比較,顯然比起之前找關鍵詞的做法,有限狀態機的結果好得多,它程序的體積足夠小,小到40年前的電腦也能裝的下,並且能夠勝任局限於某個話題的翻譯工作,但是有限狀態機有沒有任何弊端?為什麼我們不能把同一個機器翻譯系統用於比天氣預報和政府文件更加廣的主題上?
有限狀態機主要的問題之一在於程序員和研究人員需要幫它寫出所有的規則和狀態,並且所寫的規則和狀態的好壞和最終翻譯的質量直接相關。如果寫的規則過於細化,它只會在一些邊邊角角的極端情況下被用到,而且程序員需要寫更加多的規則才能涵蓋所有可能的情況。但如果寫的規則過於寬泛,則過於廣泛的在錯誤的情形下使用那些規則會導致翻譯系統的錯誤率升高。即使對於這方面的專家來說,掌握這兩者之間的平衡也是一件難事。與此同時,如果你要把一個系統應用於更加廣泛的領域上時,隨之而來的是更多可能的輸入,更多可能的歧義,以及更多需要寫的規則和更多的人力。
YouTube截取的AI Bug
在這裡,我想再次用電子遊戲AI的例子來說明有限狀態機的弊端。電子遊戲AI需要應對許多複雜的情形,正因為如此它們才會經常有各種各樣的bug。我在玩一個RPG遊戲的時候,有一次看到一個AI控制的人物突然失去了夢想,不停地撞牆,幾秒後會停止一小會兒,然後又開始繼續撞牆。以下的圖展示了一個寫的不好的有限狀態機AI是如何造成這種bug的:
有限狀態機AI bug示意圖
受限制於有限狀態機天生的弊端,每一款早期的機器翻譯軟體只能被用於一個領域,如果我想要翻譯天氣預報,我可以用軟體A,但如果我同時也想翻譯其他的東西,比如我想翻譯餐廳的菜單,那我不得不用另一個軟體B。這個問題困擾著計算機科學家們,其中有些人開始思考如下的問題:「我可不可以讓機器為我們生成那些規則?這樣我就可以躺在沙發上刷手機而不用去費盡心思工作了。」有趣的是,那些人後來成了機器學習領域的先驅,他們為自然語言處理帶來了新的生機。沒有他們的努力,現代的自然語言處理也就無從談起,關於他們的工作,還請聽下回分解。
註:
文章開始的Siri關於零除以零的對白翻譯自英文版Siri,翻譯摘自搜狐。正式的說,使用有限狀態機的翻譯系統被稱作增強躍遷網路(Augmented transition network)。引用
Machine translation: a concise history - John Hutchins
THE METEO SYSTEM
我使用了Stanford Parser用於生成語法分析樹,並用了Syntax Tree Generator來生成分析樹的圖片。我用了gif.com生成了AI bug的視頻.
圖片來源:
吃豆人數學分析樹
甜餅怪
推薦閱讀:
※第三章 自然語言理解的技術分類及比較
※AI+互聯網金融--入職半年總結
※TextGAN 代碼閱讀筆記
※《Dialogue Act Sequence Labeling using Hierarchical encoder with CRF》閱讀筆記
※機器學習:生動理解TF-IDF演算法