天天看點

無監督神經機器翻譯(UNSUPERVISED NEURAL MACHINE TRANSLATION)學習筆記無監督神經機器翻譯學習筆記

無監督神經機器翻譯學習筆記

幾個月前MikelArtetxe和KyunghyunCho等人提出了一種極具潛力的無監督神經機器翻譯(UNSUPERVISED NEURAL MACHINE TRANSLATION)模型,這個模型突破了原有的神經機器翻譯需要有足夠大的平行語料庫的限制,創造了一種可以使用兩個單語語料庫進行訓練的翻譯模型,克服了平行語料庫不足的難題。同時翻譯過程應用到了識别語義的思想,可以被廣泛的應用于多語言的翻譯系統中。在此對于該文章的學習做一下簡單的記錄原文

對語義的了解

先來考慮一下嬰兒學習一種語言的過程。首先他的父母會在他的面前指這自己不斷的說“爸爸”“媽媽”,然而一開始嬰兒肯定無法了解什麼是“爸爸”,什麼是“媽媽”對于他而言這不過是兩個特殊的聲音或者圖像而已。然而随着嬰兒不斷長大,他們終将會有一天明白站在他面前的那個男人叫“爸爸”,那個女人叫“媽媽”,至于嬰兒是怎麼樣完成這個對應關系的,我們無需了解,可能是長時間的生物進化和嬰兒自身的生長把大腦裡的一些參數(神經元)進行修改的結果。不管怎麼樣這個嬰兒成功的了解了“爸爸”和“媽媽”這個概念,并可以應用到以後的對話中去。對于中國嬰兒而言他們學到的是“爸爸”和“媽媽”,然而對于一個英國人而言他學到的是“father”和“mother”,對于日本人而言他學到的是“父さん”和“母さん”,事實上無論他是哪國人他學到的都是相同的概念,即爸爸和媽媽和對應的是一個男人和一個女人的概念,并且能夠了解這兩概念有所差別。而當他學會了一種語言後,在去學習第二種語言的時候,别人指者媽媽的圖像在告訴他那叫“mother”他就很自然而然的能夠把”媽媽“翻譯成“mother”,同時如果他也學習日語他就可以吧“媽媽”對應成為“母さん”,這樣就可以很快的學習到不同的語言。對于計算機而言,人們一直設想去重複這一過程,不過很不幸,一個良好的語義概念并不容易學到,即便是在這篇文章中,翻譯模型所學到的“語義”也僅僅是兩種語言之間的語義,對于第三種語言可能并不能完美的表示。究其原因,可能是在學習語義的過程中沒有使用圖像或者聲音等第三方條件去标注這個語義概念,然而在機器翻譯過程中這個工作是很難實作的(需要圖像-文本對應資料)也是沒有必要的(處理圖檔和語音比單純處理文字更加耗時)。在這篇文章中使用了Google提出的seq2seq模型(一種利用大量單語語料學習出一種encoder)并加以改進實作了對兩種語言之間的“語義”概念的建構。

encoder的建構方法

首先定性的了解一下這個encoder的作用,這個encoder可将文本映射到一個特殊的空間上的一個向量,這個向量就表示了這個詞的可以将它與其他詞區分開來的特征也就是某種“語義”例如:

”mother“==>[0.1,0.2,0.3,0.6,0.1,0.7,0.9,0.8]

” father “==>[0.1,0.3,0.5,0.7,0.8,0.6,0.9,0.8]

需要說明的是這種映射并不是按照某種已知的”語義“去建構的,它隻是一個詞的一種标号在詞表中,用以區分這個詞與其他詞的一種辨別,也可以用這個向量作為神經網的輸入資訊。那麼如何去在單語語料庫中學習得到這樣的一個encoder呢? 其實,可以把這個過程想像為在大量的語料中找”長得像的詞“的一個過程,所謂”長得像”可以通過某個詞的上下文關系,出現的頻率等資訊加以區分即假設在語料庫中一個出現了如下次數:

A->B->X->C->D

A->E->B->X->C->D

A->B->F->G->X

可以發現X始終出現在AB的後邊,那麼這個特征便可以用來辨別X這個詞這樣就可以用一個向量來表示X,這個學習的過程中,我們并不知道這些向量中的參數是什麼意思,也很難了解這些參數,這是屬于機器的“思維“但是我們也并不需要知道這些參數的意思,隻要機器能夠用這些向量對詞進行很好的區分,我們就可以認為機器學習到了詞彙的”語義“。當然區分詞語的因素有很多很多,不局限于語序一種,事實上上面提到的區分詞語的方式很簡單也很清晰,但是在這個翻譯模型中應用語序關系進行詞彙區分是一個不好的選擇,後面會有詳細的解釋。

有了詞的語義概念了就可以根據這個詞的“語義”去學習句子的語義,畢竟翻譯需要以句子為機關進行,在學習句子語義的時候可以将詞向量作為輸入通過一個兩層的雙向RNN神經網進行學習,學習的到的結果就可以用來将句子映射到一個由數字所代表的”語義“空間上去。

當然隻是用一種語言的語料庫進行encoder的訓練隻能得到對應于這種語言的”語義“,如果用兩種語言的單語語料庫同時進行訓練,就可以得到一個可以同時将兩種語言的詞彙分開的encode方法,根據這個方法就可以得到一個能夠同時表述兩種語言的”語義“的encoder。通過這個encoder可以将兩種語言的詞映射到同一個向量空間,作為這兩種語言的共同“語義”。訓練的具體過程可以參考論文中所引用的論文,和論文附帶的源碼,在此不做更多贅述

個人認為,這個共同encoder的訓練是整個翻譯過程的核心,它很大程度上決定了翻譯模型的好壞,而其中蘊含的思想更是值得研究的,即試想如果能夠使用世界上所有的語言進行共同訓練,那就可能得到一個人類語言的共同的encoder他能夠将語言映射到一個表示了所有語言的共同語義的向量空間,這樣便可以使機器真正學到自然語言中的語義,做到了解自然語言,同時如果可以對這個共同訓練得到的向量空間加以分析,甚至可能得到以語言為依托的智能,當然這已經是一個玄學問題,就不再更深入的讨論了。。

翻譯模型結構

在上一步的工作中我們得到了一個很好的encoder,下面就需要将這個encoder應用到 這個無監督的翻譯模型中。這個翻譯模型使用了一個共同的encoder來将兩種不同的語言文本映射到相同的向量空間中去。

無監督神經機器翻譯(UNSUPERVISED NEURAL MACHINE TRANSLATION)學習筆記無監督神經機器翻譯學習筆記

然後再同時訓練兩個由向量空間到L1和L2的decoder訓練的過程使用了兩層的RNN進行訓練。再翻譯的時候首先用共用的encoder對源語言語言進行映射,映射到一個相同的向量空間中去,得到再使用目智語言的decoder去對映射後的向量進行decode得到翻譯結果。

訓練過程

訓練這個翻譯模型需要兩個步驟 (1)denoising (2)backtranslation

首先來解釋一下denoising 的含義,這裡邊的noise是人為添加的,用來減小語序對于翻譯結果的影響來提高翻譯品質。這裡應用了一個假設,即翻譯過程中的語義不依賴于詞語順序,但是在實際操作的過程中詞語的順序又很大程度上影響了embedding和encode的結果。詞語在句子中的位置可以很直接也很清晰的将一個詞彙與其他詞彙分開,在seq2seq模型中語序很大程度上影響了映射的結果,這對于區分詞彙來說是一件好事,然而對于了解語義來說卻并不好。為了解釋這個問題可以考慮國小時候常見的把字句和被字句的轉換問題,無論是把字句還是被字句他們表示的是同一個意思,但是他們的主語和賓語的位置是完全相反的,如果對把字句和被字句分别進行embedding 獲得的結果會對相同的詞彙産生差別很大的結果,這顯然不是我們所想要的。在舉另一個例子,任何一個人看到一個句子的時候,并不會主動的分析這個句子是否符合文法結構,就好比我寫的這篇部落格中,一定是充滿了文法錯誤,但是讀者依然可以這篇部落格其中的含義,這是因為我們人類有通過詞彙獲得資訊的能力,或者說人類在擷取語言資訊時更多的使用的是詞彙資訊而不是句子結構資訊。在這個假設的基礎上,人為的消解掉語序對于了解語義的影響就很有必要。要消除這個影響很簡單的一個想法便是,人為調整句子中的詞語順序使得到的embedding結果中表示詞語順序的部分是錯誤的,這樣就無法根據語序資訊來區分詞彙,迫使機器通過其他資訊來對詞語進行區分,而這些資訊無疑能夠更好的表示“語義”。文章在denoising過程假設有N個詞彙,那麼便可以将N/2個詞語順序對調,進行認為打亂,而通過對打亂後文本進行encoder的訓練可以消除人為噪聲的影響,得到的結果就是符合我們要求的表示“語義”的encoder結果。

再來解釋一下back translation的含意,back translation是指将源語言L1經過翻譯系統翻譯成L2,再根據翻譯得到的L2翻譯回L1new,根據比對L1和L1new的差異來進行學習。我們知道,機器學習的過程需要對模型中的參數進行化,使訓練後的模型能夠盡可能的符合客觀事實,根據模型得到的輸出也符合預期結果。為了實作這個優化我們就必須将模型得到的結果與預期結果進行比對進而知道如何更新參數,使學習能夠進行。但是再隻能使用單語語料庫的條件限定下,一個源語言的句子是沒有與其對應的目智語言的句子,是以要使學習能夠進行,就必須采用一種對照手段來對模型進行優化,而backtranslation正好可以實作這一目的。在這裡由于兩個decoder是同步訓練的,我們便可以根據現有的模型将一個源語言句子先翻譯到目智語言,再将目智語言通過共同的encoder和源語言的decoder翻譯成源語言的句子,這樣便可以根據對比原始句子和翻譯後的句子進行優化,當原句和翻譯後的句子差異達到可以接受的範圍時便可以認為兩個decoder同步訓練完成。這樣的訓練過程沒有使用平行語料庫進行有監督學習,是以可以稱這個翻譯模型為一個無監督機器翻譯模型。在文章的訓練過程中采取了,teacher-student方法和注意力模型等方法對訓練進行優化,在這裡不加贅述可以參考

注意力模型

teacher-student方法

玄學問題

在最後說一些玄學問題,僅僅為個人猜想無理論證明。個人認為人類能從動物中脫穎而出,其最主要的原因是語言的産生,有了語言便可以存儲知識建構社會結構,進而使人類得以發展。考慮一下人類學習知識産生智能的過程。最初在嬰兒階段需要通過各種感官來感受客觀世界,記住種種不同的事物的直覺資訊,随着大腦的不斷發育所記錄的直覺資訊不斷增加,以及對自然語言的學習,人的大腦漸漸學會了将客觀事物的直接資訊與學到的語言資訊進行聯系,轉而傾向于使用語言來儲存這些學到的資訊。為了證明這一點,可以考慮學習英文單詞的時候,看到了一個寫在紙上的一個單詞,最初我們回想起來的肯定是他的圖像資訊,記住了其字母順序,大小,字型甚至紙的顔色,但是随着重複學習的進行我們不會再記得第一次看見這個單詞時的圖像資訊而僅僅記住了他的語言語言資訊,是以可以推測出語言是人腦中存儲資訊的形式。這樣做也有很大的優點,語言資訊所占用的空間更小,表達的含義更加精确,更易于交換資訊等。在這篇文章裡提出的建構共同encoder的過程可以看作是一個從兩種語言中學習語義的過程,試想如果可以實驗更多種語言建構一個多語encoder獲得多種語言的共同語義,那麼這個語義就很接近與人類所了解的語義,或者說可以與人類語義進行對應,這樣也就提供了一個人類探知智能的一種方式。

繼續閱讀