機器翻譯小結
機器翻譯主要是通過計算機將一種語言翻譯到其他語言,也就是最基本的序列到序列的問題。傳統的機器翻譯主要是基於統計的機器翻譯,一般能夠在精確度上做的比較好,但是在譯文流暢度上有很大的不足,往往是只是翻譯出對應單詞的意思而缺少句子的整體資訊。近幾年,出現了基於神經網路的機器翻譯,在譯文流暢度和精確度上均有較好的表現。目前,主流的神經網路翻譯架構有 cnn(facebook), rnn,lstm , gru,transformer等,在翻譯結果上也有不同的表現,之前也有各自優點。rnn到lstm到gru 是不斷變化進而 彌補之前缺陷,2017 年初左右這三種是很多翻譯模型的主流架構。緊接著,出現了cnn和transformer ,cnn結構的主要是通過不斷卷積,並且加入注意力機制,進而取得不錯的翻譯表現。而transformer 則是完全基於注意力機制,在翻譯表現上,均能達到最好的效果,在經過優化之後,基於transformer的翻譯模型最終碾壓其他模型。這也使得較多公司選擇使用transformer,並不斷進行優化創新。在之前的文章中已經有了gnmt相關訓練總結這裡就對transformer在基本原理和使用方面做乙個總結。(之後的transformer 表示基於transfomer的模型)
首先,雖然transformer是完全基於注意力機制的,但是仍然離不開基本的編碼-解碼器結構,這一點是和gnmt相同的。不同的是gnmt是經過變種的rnn結合注意力機制實現的,而transformer完全是基於注意力機制實現的。這裡就對transformer基本結構做乙個簡單的描述:
首先是最基本的結構圖:
由圖可以看出,transformer是由編碼器和解碼器組成,不同的是 編碼器和解碼器內部完全是多層的注意力機制層,這裡的注意力機制也可以看做是乙個變種,準確來說是自注意力機制,也就是說qkv 均來自自身,對輸入本身做注意力,然後輸入的資訊經過編碼器到達解碼器,逐漸對於每乙個位置的詞語進行生成,最終得到完整的句子。
其中,transformer中 同樣有需要進行訓練的輸入輸出巢狀層,這在gnmt中也有所體現。巢狀的目的是為了將較長的輸入向量對映到 對映空間,進而減少訓練過程中產生過多引數,以適應當前硬體的處理能力。同時transformer中有位置編碼層,這是目前transformer中特有的。由於此結構模型是完全基於注意力機制的,在訓練過程中單詞之間的相對位置資訊不能夠很好的被模型所捕捉到,所以引入了 位置編碼層,以記錄不同單詞見的相對位置資訊,在google發表的**中有不同的位置編碼方式,可供選擇。在自注意力機制之前也就是主要也就是這兩部分,緊接著是重要的多頭注意力機制了,簡單來說就是設定不同的qkv以獲得所謂不同型別的注意力模型,再次還有多頭的概念,由於模型在初始過程中的一些權重完全是隨機初始化的,為了提高精度,使用多個自注意力機制,也就是這裡的多頭,然後將這些進行連線通過訓練的新的權重矩陣層獲得和單個自注意力的同樣的輸出。進行完多頭注意力機制層,接著就是殘差層,和標準化層。然後經過前饋神經網路和另乙個殘差層。這樣就是乙個完整的編碼器的基本單元了,在transformer中,這樣的 單元根據引數的設定,可以疊加多層,以獲得更好效果。解碼器與編碼器類似,不同的就是將編碼器的輸出作為解碼器中注意力的輸出,結合已經產生的輸出進而逐漸產生出對應位置結果。
以上就是對transformer模型的簡單介紹,接下來是關於訓練的一些步驟。
首先是獲取基本的訓練**,transformer模型可以自己通過tensorflow或是keras進行構建,也可以直接使用開源**。目前較為成熟的開源專案tensor2tensor 中包含transofmer 模型的實現,並且在模型修改和問題的定義方面也都比較方便,因此選擇其作為訓練的主要**。
基本環境的配置主要有:
安裝對應的環境,tensorflow(gpu),tensor2tensor
編寫自定義問題** (根據官網文件)
編寫自定義引數**。
訓練方面:主要是通過提供的命令,選擇問題對應的訓練引數和模型進行訓練。需要注意的是要根據硬體條件調整訓練的batch_size 大小,一般來說,gpu數量越多,batch_size 越大,獲得的模型質量越好。對於同的語言,要根據實際情況進行引數調整,主要有warm_up_steps 和 learning_rate 。如果是硬體條件限制,可以選擇不同的優化器進行結果調整。例如:gpu過少,但是想要達到過gpu效果,可以採用多步調優優化器。
結果評測:tensor2tensor 在訓練過程中會有bleu的測試,這個值較大,不能和其他模型進行比較。理想的是它提供了測試bleu的命令t2t-bleu 可以測試出標準的bleu。在評測的時候可以拿newstest各年的評測語料進行評測,然後與網上的資料進行對比,以檢驗模型的優劣。同時在內容上,可以預參考檔案進行對比,查詢具體原因。
結果調優:基本的transformer模型雖然能基本達到其他模型的最好效果,但是還有很多方式進行整,以達到最優效果。目前主流的就是有通過增加資料集大小,不斷的擴充語料。主要方式是通過開放的資料集和網上同開文章進行提取獲取語料,同時可以通過back_translation 的方式進行擴充語料(這部分需要進一步探索)。資料清洗,為了獲取優質的翻譯語料,需要將原始語料中的一些東西去除,一般的做法主要有,清除句子中過長句子,標點統一轉化為半形字元,轉義字元進行轉化,統一大小寫,通過統計獲取句子中的原句和目標句子的長度比值的閾值,以去除問題資料等。模型整合,通過訓練出不同的模型,然後將同一源句子輸入到各個模型對結果賦予不同權重,進行重新打分,進而選擇最合適模型。最後對翻譯進行微調,以獲取較好的結果。
總的來說,乙個人的力量很有限,期待和更多相似的人共同合作!
加油~!
機器翻譯(待續)
機器翻譯 語言模型 翻譯模型 語言模型如 n元語言模型 n元語言模型 舉例,三元語言模型,乙個詞至於它相鄰的2個詞有關。條件概率 p 我吃飯 表示詞語組合合理的概率。p 我吃飯 p 飯 我吃 p 我吃 p 我吃 p 吃 我 p 我 得到 p 我吃飯 p 飯 我吃 p 吃 我 p 我 基礎統計概率這樣...
1958 機器翻譯
time limit 1 sec memory limit 128 mb submit 55 solved 28 submit status web board 小晨的電腦上安裝了乙個機器翻譯軟體,他經常用這個軟體來翻譯英語文章。這個翻譯軟體的原理很簡單,它只是從頭到尾,依次將每個英文單詞用對應的中...
機器翻譯彙總
史丹福大學的nlp 機器翻譯的專案 tf中的nmt專案 最新進展 facebook ai research convolutional sequence to sequence learning 該文章所提出的模型 簡稱convs2s 不僅僅在翻譯任務上效果顯著,而且所需訓練時間也很短。實現 pyt...