我們都知道并且喜歡使用Google翻譯,這個網(wǎng)站可以瞬時翻譯100種不同的人類語言,就好像有魔法一樣。他甚至存在于我們的手機和智能手表上面
Google翻譯背后的科技被稱為機器翻譯。它改變了世界,在本來根本不可能的情況下讓(不同語言的)人們完成了溝通。
但我們都知道,在過去的15年里,高中學(xué)生已經(jīng)使用Google翻譯...額 ...協(xié)助他們完成他們的西班牙語作業(yè)。這已經(jīng)不是新聞了…?
事實證明,在過去兩年,深度學(xué)習(xí)已經(jīng)完全改寫了我們的機器翻譯方法。那些對語言翻譯一無所知的深度學(xué)習(xí)研究人員正在利用一個個相對簡單的機器學(xué)習(xí)解決方案,來打敗世界上最好的專家建造的語言翻譯系統(tǒng)。
這一突破背后的技術(shù)被稱為序列到序列學(xué)習(xí)sequence to sequence learning。這是一項非常強大的技術(shù),被用于解決許多種類的問題。在我們看到它如何被用于翻譯之后,我們還將學(xué)習(xí)這個算法是怎樣用來編寫AI聊天機器人和描述圖片的。
我們開始吧!
讓計算機翻譯
那么我們該如何編寫代碼,才能讓計算機翻譯人類的語言呢?
最簡單的方法,就是把句子中的每個單詞,都替換成翻譯后的目標(biāo)語言單詞。這里有一個簡單的例子,把西班牙語逐字翻譯成英語:
我們只是用匹配的英語單詞替換每個西班牙單詞。
這很容易實現(xiàn),因為你所需要是一本字典來查找每個單詞的翻譯。但結(jié)果并不好,因為它忽略了語法和上下文的聯(lián)系。因此,下一件你可能要做的事,就是開始添加特定語言規(guī)則以改進結(jié)果。例如,你可能將兩個常用詞翻譯為詞組。你可能互換名詞和形容詞的順序,因為他們在西班牙語中以相反的順序出現(xiàn):
這真的有效!如果我們就繼續(xù)添加更多的規(guī)則,直到我們可以應(yīng)對每一部分語法,我們的程序應(yīng)該就能夠翻譯任何句子了,對吧?這就是最早的機器翻譯系統(tǒng)的工作原理。語言學(xué)家提出了許多復(fù)雜的規(guī)則,并逐一編程實現(xiàn)。一些世界上最聰明的語言學(xué)家在冷戰(zhàn)期間辛勤努力了多年,才創(chuàng)建出了一些更容易理解俄羅斯人交流的翻譯系統(tǒng)。
不幸的是,這種套路只對簡單問題適用,比如說像天氣預(yù)報這樣結(jié)構(gòu)簡單的文檔。它對于真實世界的文字來說并不可靠。問題是,人類語言并不總是遵循固定的規(guī)則。人類語言充滿了各種特殊情況,區(qū)域差異,或者干脆就不按套路出牌(#‵′)凸。我們說英語的方式更多地受到幾百年前入侵的人的影響,而不是由坐下來定義語法規(guī)則的人。
利用統(tǒng)計數(shù)據(jù)使計算機更好地翻譯
在基于規(guī)則的系統(tǒng)失效之后,一些新的翻譯方法被開發(fā)出來了,他們基于概率和統(tǒng)計的模型而不是語法規(guī)則。建造一個基于統(tǒng)計的翻譯系統(tǒng)需要大量的訓(xùn)練數(shù)據(jù),其中完全相同的文本被翻譯成至少兩種語言。這種雙重翻譯的文本稱為平行語料庫parallel corpora。18世紀(jì)的科學(xué)家以同樣的方式在羅塞塔石碑上面從希臘語中找出埃及象形文字。(譯者注:羅塞塔石碑,高1.14米,寬0.73米,制作于公元前196年,刻有古埃及國王托勒密五世登基的詔書。石碑上用希臘文字、古埃及文字和當(dāng)時的通俗體文字刻了同樣的內(nèi)容,這使得近代的考古學(xué)家得以有機會對照各語言版本的內(nèi)容后,解讀出已經(jīng)失傳千余年的埃及象形文之意義與結(jié)構(gòu),而成為今日研究古埃及歷史的重要里程碑)以同樣的方式,計算機可以使用平行語料庫猜測如何將文本從一種語言轉(zhuǎn)換為另一種語言。
幸運的是,有很多雙重翻譯的文本已經(jīng)存在在世界的各個角落。例如,歐洲議會將其訴訟程序翻譯成21種語言。因此,研究人員經(jīng)常使用這些數(shù)據(jù)來幫助建造翻譯系統(tǒng)。
訓(xùn)練數(shù)據(jù)通常令人興奮!但這只是無數(shù)條政府文件而已...
用概率的思維思考
統(tǒng)計翻譯系統(tǒng)的根本不同,在于它們試圖生成不止一個精確的翻譯。相反,他們生成成千上萬種可能的翻譯,然后他們按照可能最正確的給這些翻譯排名。他們通過與訓(xùn)練數(shù)據(jù)的相似性來估計有多“正確”。以下是它的工作原理:
第1步:將原始句子分成塊
首先,我們將我們的句子分成簡單的塊,每一塊都可以輕松翻譯:
第2步:找到每一塊的所有可能的翻譯
接下來,我們將翻譯每塊文字,我們將通過尋找我們數(shù)據(jù)庫中所有人類翻譯過的相同詞塊來完成我們的翻譯。
要著重注意的是,我們不只是在一本簡簡單單的翻譯字典中查找這些詞塊。相反,我們看到是真實的人在真實的句子中如何翻譯這些相同的詞。這有助于我們捕獲到在不同語境中所有不同的表達方式:
即使最常見的短語也有很多種可能的翻譯
這些可能的翻譯中的有一些會比其他翻譯更頻繁地使用。根據(jù)我們訓(xùn)練數(shù)據(jù)中每個翻譯出現(xiàn)的頻率,我們可以給它設(shè)定一個分?jǐn)?shù)。例如,有人說“Quiero”更多的時候是指“我想要”而不是“我嘗試”。所以,我們可以使用我們訓(xùn)練數(shù)據(jù)中 “Quiero”被翻譯成“我想要”的頻率,給“我想要”這個翻譯更多的權(quán)重。
第3步:生成所有可能的句子,找到最有可能的那句
接下來,我們將使用這些詞塊的每種可能翻譯來組合生成一堆可能的句子。
從第二步中列出的翻譯過的詞塊中,我們可以通過不同組合方式生成將近2,500個不同的句子。下面是一些例子:
I love | to leave | at | the seaside | more tidy.
I mean | to be on | to | the open space | most lovely.
I like | to be |on | per the seaside | more lovely.
I mean | to go | to | the open space | most tidy.
但在真實世界中,因為有不同的語序和詞塊分解方法,所以實際上有更多可能的詞塊組合:
I try | to run | at | the prettiest | open space.
I want | to run | per | the more tidy | open space.
I mean | to forget | at | the tidiest | beach.
I try | to go | per | the more tidy | seaside.
現(xiàn)在需要掃描所有這些生成的句子,找到那個聽起來“最像人話”的句子。
為此,我們將每個生成的句子與來自英語書籍和新聞故事的數(shù)百萬個真實句子進行比較。我們擁有的英語文本越多越好。
我們采用這種可能的翻譯:
I try | to leave | per | the most lovely | open space.
很可能沒有人用英語寫過這樣的句子,所以它不會與我們的數(shù)據(jù)庫任何句子非常相似。我們給這個可能的翻譯設(shè)定一個低概率的得分。
但看看下面這個可能的翻譯:
I want | to go | to | the prettiest | beach.
這個句子和我們的訓(xùn)練集中的句子很類似,所以它將獲得一個高概率的得分。
在嘗試過所有可能的句子之后,我們會選擇那個,既是最有可能的詞塊翻譯,又與真實英語句子最相似,的句子。
我們最后的翻譯將是“I want | to go | to | the prettiest | beach.
我想去最漂亮的海灘。”不錯!
有里程碑意義的統(tǒng)計機器翻譯
當(dāng)有足夠多的訓(xùn)練數(shù)據(jù)的時候,統(tǒng)計機器翻譯系統(tǒng)的性能要優(yōu)于基于語言規(guī)則的系統(tǒng)。 Franz Josef Och基于這些想法并做出了改進,并在21世紀(jì)初使用它們構(gòu)建了Google翻譯。機器翻譯終于可以被全世界使用。
早期的時候,基于概率翻譯的“愚蠢”方法居然比語言學(xué)家設(shè)計規(guī)則系統(tǒng)做的更好,這讓每個人都感到驚訝。這導(dǎo)致了80年代的時候,研究人員會(有點刻薄的)說:“每當(dāng)我炒了一個語言學(xué)家魷魚的時候,我的翻譯準(zhǔn)確度就會上升。” Frederick Jelinek
統(tǒng)計機器翻譯的局限性
雖然統(tǒng)計機器翻譯系統(tǒng)效果還不錯,但是他們難于構(gòu)建和維護。每一對需要翻譯的新語言,都需要專業(yè)人士對一個全新的多步驟“翻譯流水線”進行調(diào)試和修整。
因為構(gòu)建這些不同的流水線需要做太多工作,所以我們必須進行權(quán)衡。如果你要用Google翻譯把格魯吉亞語翻譯成泰盧固語(印度東部德拉維拉語言),那么作為一個中間步驟,它必須先翻譯成英語。因為并沒有太多格魯吉亞到泰盧固語的翻譯需求,所以在這一對語言上投入太多并沒有太大意義。相比于英語翻譯到法語,它可能會使用一個更低級的“翻譯流水線”。
如果我們能讓計算機為我們做所有令人討厭的開發(fā)工作,這不更好么?
讓電腦翻譯的更好——無需昂貴的專家們
機器翻譯的核心是一個黑盒系統(tǒng),它通過查看訓(xùn)練數(shù)據(jù),自己就可以學(xué)習(xí)如何翻譯。使用統(tǒng)計機器翻譯,人們?nèi)匀恍枰⒑驼{(diào)整多步驟的統(tǒng)計模型。
2014年,KyungHyun Cho的團隊取得了突破。他們發(fā)現(xiàn)了一種應(yīng)用深度學(xué)習(xí)來構(gòu)建這種黑盒系統(tǒng)的方法。他們的深度學(xué)習(xí)模型采用平行語料庫,并使用它來學(xué)習(xí)如何在無任何人為干預(yù)的情況下在這兩種語言之間進行翻譯。
兩個宏偉的方法使這成為可能 - 循 環(huán)神經(jīng)網(wǎng)絡(luò)和編碼。通過巧妙地結(jié)合這兩個想法,我們可以建立一個能夠自學(xué)的翻譯系統(tǒng)。
循環(huán)神經(jīng)網(wǎng)絡(luò)
我們已經(jīng)在第2章討論過了循環(huán)神經(jīng)網(wǎng)絡(luò),讓我們快速回顧一下。
一個常規(guī)(非循環(huán))神經(jīng)網(wǎng)絡(luò)是泛型機器學(xué)習(xí)算法,接收一序列數(shù)字并計算結(jié)果(基于先前的訓(xùn)練)。神經(jīng)網(wǎng)絡(luò)可以用作一個黑盒子,來解決很多問題。例如,我們可以基于房子的屬性,使用神經(jīng)網(wǎng)絡(luò)來計算房屋的近似價格:
但是像大多數(shù)機器學(xué)習(xí)算法一樣,神經(jīng)網(wǎng)絡(luò)是無狀態(tài)(Stateless)的。你輸入一序列數(shù)字,神經(jīng)網(wǎng)絡(luò)計算并輸出結(jié)果。如果再次輸入相同的數(shù)字,它總是計算出相同的結(jié)果。它沒有進行過的計算的記憶。換句話說,2 + 2總是等于4。
一個循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network或簡稱RNN)是一個稍微改進過的神經(jīng)網(wǎng)絡(luò)的版本,區(qū)別是RNN先前的狀態(tài)是可以被當(dāng)做輸入,再次帶入到下一次計算中去。這意味著之前的計算結(jié)果會更改未來計算的結(jié)果!
人類痛恨他:一個黑科技就讓機器變得更聰明!
我們?yōu)槭裁匆@樣做?無論我們上次計算結(jié)果是什么,2 + 2不應(yīng)該總是等于4么?
這個技巧允許神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)數(shù)據(jù)序列中的規(guī)律。例如,基于句子的前幾個詞,你可以使用它來預(yù)測句子中下一個最有可能的單詞是什么:
實現(xiàn)智能手機輸入法的“自動更正”的方法之一…
當(dāng)你想要學(xué)習(xí)數(shù)據(jù)中的規(guī)律時,RNN將會非常有用。因為人類語言其實只是一個大而復(fù)雜的“規(guī)律”,自然語言處理的各個領(lǐng)域越來越多地使用RNN。
如果你想了解更多關(guān)于RNN,你可以閱讀第2章,我們使用了RNN來生成一本海明威寫作風(fēng)格的假書,然后使用同一個RNN生成了超級馬里奧兄弟的游戲關(guān)卡。
編碼
我們需要回顧的另一個想法是編碼Encoding。在第4章中作為臉部識別的一部分,我們談到了編碼。為了解釋編碼,讓我們稍作調(diào)整,了解一下如何用電腦區(qū)分兩個人。
當(dāng)你試圖用電腦區(qū)分兩張臉時,你從每張臉收集不同的測量值,并與其他臉部比較這些測量值。例如,我們可以測量耳朵的大小或眼間的間距,比較兩個圖片的測量值以確定他們是否是同一個人。
你可能已經(jīng)從觀看熱門影視劇CSI當(dāng)中對這個想法耳熟能詳了。
把面部特征轉(zhuǎn)換為一系列測量值的想法就是編碼的例子之一。我們獲取到原始數(shù)據(jù)(面部圖片),并將其轉(zhuǎn)換為代表這張臉的一系列測量值(編碼)。
但是像我們在第4章中看到的,我們不必提出一個具體的面部特征列表來測量我們自己。相反,我們可以使用神經(jīng)網(wǎng)絡(luò),讓它自動從面部生成測量值。找出哪些測量值能夠區(qū)分兩個相似的人,計算機在這方面比我們做的更好:
這些是由神經(jīng)網(wǎng)絡(luò)產(chǎn)生的面部特征測量值,訓(xùn)練后的該神經(jīng)網(wǎng)絡(luò)可以保證不同的數(shù)字代表了不同人的面部。
這是我們的編碼。它讓我們用簡單的東西(128個數(shù)字)代表非常復(fù)雜的東西(一張臉的圖片)?,F(xiàn)在比較兩張臉更加容易了,因為我們只需要比較這128個數(shù)字而不是比較整張臉的圖像。
你猜怎么著?我們可以用句子做同樣的事情!我們可以把任何一個句子表達成一系列獨特的編碼:這一序列數(shù)字代表的是英語句子“有趣的機器學(xué)習(xí)!”。不同的句子將由不同的數(shù)字集表示。
為了生成這個編碼,我們將句子輸入到RNN中,一次一個詞。最后一個詞處理之后的最終結(jié)果,就將是表示整個句子的數(shù)值:
因為RNN具有記憶功能,能夠記住處理過得每個詞,所以它計算的最終編碼表示句子中的所有詞。
棒極了,所以現(xiàn)在我們有一種方法來把一個整個句子表示成一組獨特的數(shù)字!我們不知道編碼中的每個數(shù)字是什么意思,但這并不重要。只要每一句話都能由一組獨特的數(shù)字標(biāo)識出來,那么我們就不需要準(zhǔn)確地知道這些數(shù)字是如何生成的。
讓我們開始翻譯吧!
好的,所以我們知道怎樣使用RNN去個一句話編碼并生成一組獨特的數(shù)字。它有什么用呢?事情從這兒開始變得酷炫了!
如果我們使用兩個RNNs并將它們首尾相連呢?第一個RNN可以給句子生成編碼。然后,第二RNN遵循相反的邏輯,解碼得到原始句子:
當(dāng)然,編碼然后再解碼并得到原始語句并沒有太大用處。但是如果(這里是問題的關(guān)鍵),我們訓(xùn)練第二個RNN,使它解碼成西班牙語而不是英語,這會怎樣?我們可以使用平行語料庫訓(xùn)練數(shù)據(jù)來訓(xùn)練它:
就像這樣,我們有一個通用的方法,將一序列英語單詞轉(zhuǎn)換成同樣的西班牙語單詞序列!
這是一個強有力的想法l這種方法主要受限于你擁有的訓(xùn)練數(shù)據(jù)量和你可以投入的計算機生產(chǎn)力。機器學(xué)習(xí)研究人員僅僅在在兩年前發(fā)明了這個方法,但它已經(jīng)表現(xiàn)的和統(tǒng)計機器翻譯系統(tǒng)一樣好了,而后者花了20年時間才開發(fā)完善。
l這不依賴于任何關(guān)于人類語言規(guī)則的了解。算法自己計算出這些規(guī)則。這意味著你不需要專業(yè)人士來調(diào)整“翻譯流水線”的各個步驟,計算機為你把這個做好了。
l這種方法適用于幾乎任何種類的序列到序列sequence-to-sequence問題!而且事實證明,許多有趣的問題都實際上是 序列到序列的問題。繼續(xù)閱讀了解其他你可以做的酷炫的事!
注意,我們忽略了一些處理真實數(shù)據(jù)會碰到的問題。例如,如何處理不同長度的輸入和輸出?這還需要一些額外的工作(請參見bucketing和padding)。非常用詞翻譯也是一個問題。
構(gòu)建你自己的序列到序列翻譯系統(tǒng)
如果你想建立自己的語言翻譯系統(tǒng),這兒有一個包括可以在英語和法語之間翻譯的TensorFlow的demo。然而,這并不是給膽小鬼或預(yù)算有限的人準(zhǔn)備的。這仍然是一項新技術(shù),并且資源有限。即使你有一臺帶有高級顯卡的高級電腦,可能也需要連續(xù)一個月的時間來訓(xùn)練你自己的語言翻譯系統(tǒng)。
此外,序列到序列語言翻譯技術(shù)正在及快速地改進,以至于難以跟上。許多最近的改進(如添加注意機制attention mechanism或上下文跟蹤tracking context)顯著改善了翻譯結(jié)果,但這些發(fā)展太過前沿,以至于他們甚至還沒有維基百科頁面。如果你想做認真的去做任何序列到序列學(xué)習(xí),隨著技術(shù)的發(fā)展,你需要持續(xù)保持更新。
序列到序列模型的無窮力量
那么,我們還能用序列到序列模型做什么呢?
大約一年前,Google的研究人員表示,你可以使用序列到序列模型來建造AI機器人。這個想法是如此簡單,并且令人震驚的是,它真的有效。
首先,他們獲取了一些Google員工和Google技術(shù)支持小組之間的聊天記錄。然后他們訓(xùn)練了序列到序列模型,其中輸入的句子就是雇員的問題,而技術(shù)支持團隊的回復(fù)是該句子的“翻譯”。
當(dāng)用戶與機器人進行交互時,他們將使用該系統(tǒng)“翻譯”每個用戶的消息以獲得機器人的響應(yīng)。
他們最終得到的是一個半智能機器人,(有時)可以回答真正的技術(shù)支持問題。下面是一部分用戶和機器人之間的對話示例:
人:連接被拒絕或類似的東西
機器:我可以知道你連接的網(wǎng)絡(luò)連接的版本嗎?
人:我不確定我知不知道
機器:是網(wǎng)絡(luò)連接提示任何用戶證書?
人類:是的
機器:你現(xiàn)在在家還是在工作?辦公室?
人:我在家
機器:試試這個。 goto <URL redacted>頁面,然后輸入您的姓名和密碼
人類:完成
機器:嘗試使用<NAME redacted>登錄,然后檢查其是否正常工作
人類:是的,現(xiàn)在它在工作!
機器:棒極了。還有什么我可以幫助你的?
他們還試圖建立一個基于數(shù)百萬部電影字幕的聊天機器人。他們的想法是,使用電影角色之間的對話作為一種訓(xùn)練機器人像人一樣說話的方式。輸入句子是一名角色的一句話,“翻譯”是另一名角色在對話里回應(yīng)他的內(nèi)容:
他們得到了很有意思的結(jié)果。機器人不僅僅像一個人,更是顯示出了一點點智能化:
人類:我的名字是david。我的名字是什么?
機器:david。
人:我的名字是約翰。我的名字是什么?
機器:約翰。
人類:你是領(lǐng)導(dǎo)還是追隨者?
機器:我是領(lǐng)導(dǎo)者。
人類:你是追隨者還是領(lǐng)導(dǎo)者?
機器:我是領(lǐng)導(dǎo)者。
這只是可能性的開始。我們將不局限于將一個句子轉(zhuǎn)換成另一個句子,同樣,我們制作一個圖像到序列的模型,它可以將圖像轉(zhuǎn)換為文本!
Google的另一個團隊通過將第一個RNN替換為卷積神經(jīng)網(wǎng)絡(luò)(如我們在第3章中所了解的那樣)。這允許輸入是圖片而不是句子,其余的工作基本相同:
就像這樣,(只要我們有很多很多的訓(xùn)練數(shù)據(jù))我們就可以把圖片變成單詞!
Andrej Karpathy把這個想法進行了拓展,以構(gòu)建一個通過分別處理圖像的多個區(qū)域,來詳細描述圖像的系統(tǒng):
Andrej Karpathy論文中的圖片
這個想法使得我們可以構(gòu)建一個,能夠按照奇怪的要求找到特定圖片的圖片搜索引擎,甚至有研究人員正在研究相反的問題,僅僅基于文本描述產(chǎn)生一個完整的圖片!
從這些例子,你可以開始想象的各種可能性。 到目前為止,序列到序列應(yīng)用在從語音識別到計算機視覺各個領(lǐng)域。 我猜,明年會有更多的應(yīng)用。