1. 程式人生 > >【Machine Translation】僅由單語數據生成雙語詞典

【Machine Translation】僅由單語數據生成雙語詞典

多層感知機 img facebook 學習 sls data 上下文 algorithm inline

Word translation without parallel data

考慮在只有單語數據的情況下,如何生成雙語詞典。

技術分享圖片

基於假設:

相似的上下文中的單詞具有相似的語義;在兩個不同語言的詞向量空間中,兩個具有相似語義的單詞在各自空間中具有相似的相對空間位置,因此只要學習一個線性映射就可以實現大致的對齊。

實現步驟:

A:對於語言X和Y,首先,各自訓練詞向量矩陣(300維)。

? 這裏學習詞向量用的是facebook的fastText而不是Word2vec。

B:學習旋轉矩陣W,實現近似對齊。這裏用到的方法是對抗學習

? b1:首先學習一個判別器,使用的方法是多層感知機,判別器的作用是區分在矩陣W作用下X的詞向量仍然屬於X語言,Y詞向量依然屬於Y語言,使得這個概率盡量大;

? b2:而矩陣W的作用是,使得判別器盡可能區分不了WX與Y,即經W變換後的X詞向量,和Y的詞向量差別最小。

? 綜合來說,即最小化下面兩個目標函數:

技術分享圖片

技術分享圖片

C:優化W矩陣。

上 面的學習並沒有考慮不同頻率的單詞會給學習帶來很大的影響。X中頻率小的單詞可能在向Y的映射中根本就沒有一個匹配,這樣在B中訓練W時,頻率的問題可能帶來很大的影響,因此在C步驟中我們消除這種影響:考慮頻度最高的單詞(如5k),用\(min |WX - Y|\)的方法建立一個暫時的假的詞典,利用特定提高方法(使用的是Procrustes algorithm),不斷叠代,這個過程不斷更新詞典和W,得到更新的W。實驗發現,這個做法的提高並不是很大。

D:進行最終的翻譯。

這裏的翻譯並不是指用W直接旋轉X後得到Y,而是重新定義了單詞與單詞之間的距離度量,稱作CSLS。CSLS的做法是定義一個二部圖,即:對於X每個單詞,找到Y中與它距離最近的K個單詞,作為它的鄰居,Y亦然。之後,定義新的距離度量為:

技術分享圖片

技術分享圖片

這樣,最終根據這個度量最小找到X在Y中的翻譯單詞到底是哪個。對X中每一個單詞都應用上述步驟,最終得到雙語詞典。

【Machine Translation】僅由單語數據生成雙語詞典