我們先來了解一下機器翻譯系統的建模,它可以分為三個部分。
首先是翻譯模型(Translation Model),解決從一個語言到另外一個語言的語言對齊問題,原語言到底是什麼詞,應該翻譯成什麼?
其次是語言模型(Language Model),目標語言儘可能地比較流暢。所謂的語言模型指的是,這個詞後面接着的下一個詞什麼,或者幾個詞後面跟着的下一個詞是什麼?
最後是 Compute argmax,這個模型是一個乘積的關係,尋找模型參數使它的乘積最大化,也就是我們通常說的訓練,以上就是機器翻譯的整個建模過程。
NMT(神經網絡機器翻譯)與統計機器翻譯最大的區別,與機器學習和深度學習的區別是一樣的。
機器學習與深度學習的區別,機器學習業務最典型基本上可以分為兩層,一層是 Feature Extraction(特徵抽取),另一層是 Downstream Task(下游任務),例如常見的 Classification。
而到了深度學習,沒有顯式的 Feature Extraction 和 Downstream Classification,而它是一種智能學習方式,我們將輸入送進去,直接得到輸出訓練的過程,所以真正的 NMT 的優勢可能就在於 End to End 的建模。
在文本生成的領域裡面,最有名的模型是 Encode-Decoder Model,我們也稱之為 Seq2Seq Model。
Seq2Seq 包含 Encoder,Decoder 兩個 RNN Model。Encoder Model 是一個時序化建模的 RNN 網絡。對數學公式: $ H1 $ 和數學公式: $ X1 $ 建模得到數學公式: $ H2 $,然後數學公式: $ H2 $ 跟數學公式: $ X2 $ 得到數學公式: $ H3 $,這樣持續下去得到 Encoded vector,然後再基於編碼的向量,經過 RNN 的 Decoder 解碼出第一個詞語,再把隱狀態發送過來,然後經過第二個 RNN 解出數學公式: $ Y2 $,這就實現了整個翻譯的過程。
我們拿上圖右側的例子來說明,例如「我對你感到滿意」經過編碼器,得到 Encoded vector ,它是一個多個維度的向量,再經過解碼器得到翻譯目標——I am satisfied with you。
舉一個 Encoded 的動態例子,比如「how to configure s5700 arp?」
如果進行這個句子的機器翻譯,整個過程是這樣的,首先對每個詞語分別進行編碼,然後對問號做編碼,最後當碰到 EOS(end of sentence)代表這個句子已經說完,那麼這種時候可以的帶 Encoded vector,將它送進一個 BOS(begin of sentence)。
Begin of sentence 基於上文的向量對所有詞取最大的概率,那麼就可以得到「如何」字段,然後將「如何」送過來解碼,繼而得到「配置」,接着得到「下一次」,這句話就解碼完了,最後得出「如何配置 s5700 arp」,那麼就得到了 Target Sentence。
我們剛才演示的過程稱為 Greedy Decoding,也就是貪婪解碼。所謂貪婪解碼是每次只取概率為 Top1 的結果,那麼假如不取 Top1 的結果,我可以取 Top k,然後每次保留 k 個分支,那麼其實上類似於一個路徑搜索。
上圖 從<bos>的解碼就是這樣的一個過程,最終解碼得到<eos>,這個時候解碼結束,每一步就可以保持它的 Top K 的結果,這就是 Beam Search 技術。
而對於 Seq2Seq 模型效果是這樣的,神經網絡模型優於統計機器翻譯的模型。SMT 是統計記憶翻譯的模型,NMT 是神經網絡機器翻譯,神經網絡第一次以 34.81vs33.3 的成績超過了統計機器翻譯的模型。
而且神經網絡的模型可以對統計機器翻譯結果進行 Reranking(重排),取得 Beam Search Top50 的結果進行重排,它這個機制可以達到 36.6 的最高分。
但 Seq2seq 模型有一個問題,那就是 Encoder 永遠編碼成維度確定的句向量,當我們句子長短維度確定之後,這個向量無法表示足夠多的句子信息。
這個時候就需要引入業界很有名的 Attention 的機制。
當 Decoder 已經解碼出了「如何」,得到了 Hidden state,Decoder 的「如何」會與 Source Token 進行 Attention 計算,我們可以將之理解為進行一個相似度的計算。當與所有 Source Tokens 做完 Attention 的計算後,再進行 Softmax,也就是將它的隱狀態(hidden state)進行信息加權,最後得到一個向量。
這樣,編碼向量會和每個詞相關的狀態,這一個向量的狀態是變化的,它能夠很好地表現哪個詞語已經翻譯了,哪個詞還沒有翻譯,以及接下來翻譯哪個詞語,這也就是 Align 與 Translate 的結合。
接下來,所有的 Encoder States 和 Decoder States 進行 Attention Scores ,然後進行加權平均(Softmax),最後加權平均的結果與每一個 Source 進行線性組合,就可以拿到最終結果。
中間是個典型的例子——The Animal didn't cross the street because it is too tired。假如說出現了 it is too tired 的話, it 的 attention weight 更多時候會 Attention 到 Animal 上面,那麼相當於 it 代替的是狗或者動物;
而假如說出現 it is too wide,在經過 Attention 計算,更多對應到的是 cross the street 或者 cross the river。
從最右邊的 Performance 也可以看得出來。RNNSearch 比 RNNEncode 好很多,句子長度 30 和 50,RNNsearch 分別提升了 7.2 和 7.4,最好效果可以達到 36.15。
這裡 30 指的對含有 30 個詞的句子進行訓練,可以看到一般模型,句子越長效果越差,而 RNNSearch50 的情況下,可以看到效果基本上不變。(RNNencode 也就是之前的 Seq2Seq model,而 Attention model 在學術上稱為 RNNsearch。)
並且驚喜的是,當句子超過 50 個詞之後,RNNsearch50 翻譯質量也不下降。
Attention is all you need 是那篇最經典的論文。
最初的 Seq2Seq without attention 有 CNN 和 RNN 進行 decoder,decoder 和 encoder 之間的關係是用靜態的向量來表示的。而第二個模型 Seq2Seq with attention,則是由 CNN 和 RNN 做 decoder,中間是 attention 關聯的。到了 Transformer 方面的話,所有都換成了 Attention 的模式。
就效果來看,統計機器翻譯是 33.3,而在 Seq2Seq 的時候是 34.81,然後到 RNNSearch(RNNAttn)架構是 36.15,到 Transformer 架構到 41.8 了,提升非常明顯。
Transformers 架構典型的三個特點有 No RNN、純 Attention 以及 Position Embedding。
上圖右邊是典型的 Transformers 的架構,我們可以看到中間是 Self attention encoder,在此後面有 Feed Forward Network。接着是 Decoder self attention,然後 decode 和 encode 之間的 Attention,然後以及 Decoder Feed Forward。
這套架構 Transformers 的效果很好,BLEU 可以達到 41.8,並且 Transformer 訓練時長縮短不少,這一點對工業用途很友好。
神經網絡機器翻譯經過了三輪迭代已經足夠好了,但是它還存在命名實體、Topic、Document 以及 Consistency 等等問題,解決的方案是將我們的模型在大數據上進行訓練,形成一個 Big Data+Small knowledge 的 Big knowledge 概念。
而後面的話,隨着神經網絡機器翻譯的發展,你可以認為有一批數據在大數據上訓練的模型,而我們接下來有一個理想,就是 Big Data,Big Data 加上 Smart 能夠真正形成 Big Knowledge 的概念。
NMT 知識體系可以分為四部分,全局知識、領域知識、模型知識以及多模態知識。全局知識的最典型的模式是顯式知識,最常用的是知識圖譜。
上圖是一個藥品的知識圖譜,有一個詞語是乙酰水楊酸,它的同義詞是阿司匹林,假如在沒有知識驅動的情況下,就會被翻譯成其他的。而當將實體 + 類型的三元組知識融合的情況下,就可以將乙酰水楊酸標準地翻譯成阿司匹林,這個知識是一個顯性的知識。
全局知識融合的另一種方式是隱示知識,目前典型方式是用預訓練模型做初始化。阿里巴巴曾經有一個研究,使用 BERT 做 Encode 端的編碼和初始化,還是用 GPT 做 Decode 端編碼和初始化,訓練拿到的結果是最好的。
不管是 BERT 還是 GPT 都融入了大量的知識,和我們前面的顯式知識不一樣,它是一種典型隱示的知識,因為它見過海量的句子,但是當前應用的是哪一個或者哪幾個句子知識我們是不知道的。
了解全局知識之後,我們來聊一下領域知識,領域知識也分為顯式和隱式知識。
領域知識顯示的情況下,可以是 Token 和 NER Pair,也可以去解決 Decoding Constraint 或者 Grid Beam Search。
Great beam search 較為簡單,比如當拿到一句漏掉「快」詞語的句子,那麼機器翻譯模型將會重新調整這句話,然後把「Quick」增加到合適的地方,並且效果提升還是比較明顯。
除詞語級別之外,我們還可以做句子級別的知識融入。我們有個先驗知識,原句相近,目標句也相近。在原句的後面拼接相似句,可以加強目標句解碼正確的概率。
比如上圖中,「胃息肉是個常見的癌症」,把這句話的翻譯文字增加在下方,並且給予「胃息肉」一個顯示的標籤,然後與「胃息肉」相關的內容就翻譯得很準確。
第三個是模型知識,模型知識也可以分為兩種,整體知識和分層知識。最典型的整體知識是知識蒸餾,在 Seq2Seq 的模型里,知識蒸餾相當於利用模型生成各種偽數據,這樣可以使得機器能夠學得更好。
而分層知識則如上圖,在訓深練度學習模型的時候,Drop Out 是開啟的狀態,同一個句子會得到不完全一致的表示,模型越穩定的時候,不同的 Drop Out 拿到的兩個句子向量(經過同一個 Encoder 得到的向量)是一樣的,它才能保證解碼的穩定性。所以在兩個向量之間增加 KL 散度,就可以保證每次出來向量儘量一樣。
最後是多模態的知識,「Rabbit is ready for cook」是要表達「兔子要吃飯了?」還是「我們要吃兔肉?」這個最典型的情況。
如何解決這個問題呢?
我們在 Encoder 這一層,將圖像分割和圖像的識別的特徵與文本特徵拼接起來,保持 Encoder 和 Decoder 模型不變,就可以解碼這樣的問題。
知識分類的建模過程如下:
第一,當我們已經有了內部的知識,不需要進行知識抽取的情況下, Input 經過生成模型可以得到 Output,然後直接調用內部的知識進行 Embedding。
第二,當我們需要外部知識的情況下,不管是公用領域的知識,或者一些領域外的知識,大家首先需要進行知識抽取,然後再進行知識注入和融合,再生成模型,進而得到有知識指導的輸出。
而在訓練的時候,知識驅動的模型會有 Knowledge Loss。當機器翻譯的時候,除了保證生成的句子與目標越來越像,還需要保證不能出現 Critical Error。雖然它在整個評估指標的情況下,這類詞在文本裡面的比例很低,所以只能加上 Knowledge Loss 的效果才會比較好。
整體流程如下:
Input>Knowledge Acquisition>Knowledge Fusion>Output>Knowledge Sources。
接下來講一下約束生成,包含 Sentence/Topic Mining、Token/Ner Mining、MTL/KG Mining,Sentence 對應的領域、Token 事件詞,以及 Multi-task 那些圖片來做事情。
那麼這樣的時候就可以把 Domain 給建立起來。
當我們在解碼的時候,實際上分為兩種解碼,分別是 Hard constraint 和 Soft constraint。Hard constraint 要求提供的約束必須出現,但是它會出現時態或語態的問題。
上圖 Source 的句子中有一個詞「Luptat」,它同時有爭鬥和腳踝的意思,但是 Unconstraint 翻譯的,它會翻譯成 struggle。
進行 Hard Constraint 的時候,不太好確定語態的問題,最後會翻譯成 ankle,拿到了接近最優解的結果。Hard constraint 無需訓練模型,直接在解碼當中就行。
而當進行 Soft Constraint 時候,我們需要得到正常的 Token Pair Score、Sentence Paired score 的時候,同時驗證其對齊關係和時態等語義信息平衡的最優解,換句話說,滿足約束的加權得分最高,也就是 Knowledge loss 最小。
接下來我們一起進行一個知識驅動翻譯實踐。我們做了一個 WMT (國際機器翻譯)Biomedical/Tavel 的翻譯任務,它包含 Strong Domain Knowledge,和很多種語言的翻譯任務。
這個任務有以下幾點問題:
首先是專業領域,比如「prefers white」一般可以翻譯成「喜歡白色」,但是對於體育領域或者下棋來說,應該翻譯成「擲白棋」。
其次是一些 NER、漏譯、過譯以及風格問題。這裡着重說一下風格問題,比如上圖最下面翻譯出來的 「20 世紀 20 年代和 30 年代」以及「1920 年代和 1930 年代」的區別還是很大的。
機器翻譯的提升可以分成三個階段:
第一階段是 Vanilla Transformer NMT,這一階段相當於用 In Domain 的數據來訓練 Transform model。上圖的訓練數據有英德和英中等等,我們將數據進行預處理之後,然後進行 Proprocess Pair,接着訓練 Model,然後配置訓練參數之後,就可以得到上圖右側的效果,英中和中英分別得到 39 和 27,而在英德和德英的話分別拿到 31 和 37,這就相當於拿到了 Baseline Performance。
第二個階段,隨着大模型出來 Pre-training + Fine-tuning 是典型的業界範式。
Pre-training 利用具有很多數據的 Out-Domain,經過較大外部數據的機器翻譯模型訓練出一個大的模型,然後用小的數據來進行微調訓練。
為了優化效果,還可以抽取同樣接近大小的外部數據做領域的 discrimination,這一過程相當於區分領域外以及領域內的不同結果,換句話說,當提供一個句子組的時候,翻譯成領域外什麼樣子,翻譯成領域內是什麼樣子。
我們可以看到領域外的數據,例如拿英德和英中的 9600 萬和 1500 萬的數據,還有英德中大約一個億的單語數據。
以英中為例,通過 Out-Domain 數據訓練,我們得到 40 bleu,這已經比第一個模型(In Domain)要好。
然後,進行 In Domain Fine-tuning 以及 In-Out- Domain discrimination 的話,我們最終可以拿到 46.9 以及 35.5 的 performance。這已經是最好的表現了,接近 WMT 的冠軍水平。
最後我們發現,還是存在一些實體詞語翻譯得不正確的問題,我們做了 Fuzzy Entity Enhance NMT。它指的是,訓練識別 Entity 和 Entity 對齊,效果也有明顯的提升。
我們對比的基線是 ACL2020 的一篇論文,這篇論文它借鑑相似句提升。比如「how long does a cold last」和「how long does the flight last」,經過對齊之後,Combien 德語後面一長串前面的幾個字是一樣的,在詞級別打上標籤,告訴模型哪幾個詞語是對的,哪幾個詞是錯的,這個的效果取得了不少的提升。
但是前面的模型有兩個問題,它所有的詞的權重都是一樣的,對齊的標籤有噪聲。
而我們針對性做了兩個優化,首先是對實體詞對實體詞做加權;其次,我把目標句的標籤全部修改到了原句上面,原句沒有噪聲問題,這相當於噪聲降低了。這個模型相較前面的幾個模型有百分之一點幾的提升,並且在有實體詞的情況下提升很明顯,將近有 2% 左右,不過在沒有實體詞情況下,我們略有下降。
對於神經網絡和機器翻譯的暢想,首先是大模型或者自遷移的方向;其次是更準確多任務的 AI 服務;最後是知識性和可解釋 AI 服務。
嘉賓介紹:
楊浩,華為文本機器翻譯實驗室主任,北京郵電大學通信與信息系統博士,師承兩院院士陳俊亮老師,在搜索推薦和機器翻譯等人工智能相關領域有十年以上研發經驗。有 10+ICLR/ICASSP 等頂會論文和國內外專利,帶領團隊獲得 WMT/WAT NEWS/DOMAIN/QE/APE 冠軍。希望致力於機器翻譯等技術方向,共建高質量全棧的人工智能服務和平台。
在 4 月 24-25 日,ArchSummit 全球架構師峰會即將落地上海,數字化轉型是大趨勢,不管是金融轉型,還是汽車產業數字化轉型,製造業數字化轉型,一定會涉及到企業的產品形態,這裡面包括市場定位和可行性的諸多因素,還有 ROI 評估模型。
除了在業務上的轉型,在技術上也需要底層技術支持,例如微服務架構實踐,數據庫管理,前端開發,質量提升等等,共同保證項目落地。基於這些需求,ArchSummit 架構師峰會上邀請了國內較有經驗的專家來分享各自的案例,幫助大家少踩坑,多復用,快速解決工作中的問題,了解更多請點擊閱讀原文或掃描下方二維碼即可參與。