2016-GNMT神經機器翻譯上線#
案件摘要#
2016 年 9 月,Google 宣布將神經機器翻譯系統 GNMT(Wu 等人,arXiv:1609.08144)上線到 Google Translate,首先支援英→中。這樁案件宣告了統計機器翻譯(SMT)時代的終結:使用了十年的 phrase-based SMT 被一套 8 層 LSTM 編碼器 + 8 層 LSTM 解碼器 + attention 的深度神經網路取代。人工評估顯示翻譯錯誤率平均下降約 60%。這也是 1954 年 Georgetown-IBM 實驗以來,機器翻譯夢想最接近實現的一刻。
前因 -- 為什麼會有這個案子#
- Google Translate 2006 年上線,用的是 phrase-based SMT:翻譯被拆成短語片段的統計對齊與重組。瓶頸明顯——句子之間不連貫、長距離依賴崩壞、成語與複雜句式經常翻得荒謬。
- 學術突破已在眼前:Sutskever 等人 2014 年的 Seq2Seq(LSTM 編碼器-解碼器)證明端到端神經翻譯可行;Bahdanau 等人 2014 年的 attention 機制解決了長句的瓶頸。
- 深度學習的翻譯品質在 WMT 榜單上快速逼近 SMT,但學術系統的規模與工程穩定度都不足以支撐每天數十億次翻譯請求的 Google Translate。
- Google 擁有兩張王牌:數十億句對的訓練資料,以及 2016 年問世的 TPU(張量處理器)提供的專用算力。把學術突破工程化上線,只欠一個決心。
線索與推理 -- 數學式、程式、理論#
GNMT 架構:深層 LSTM + attention + residual#
第一條線索是把 Seq2Seq 推到工業規模。GNMT 的架構:
- 編碼器:8 層 LSTM(第一層雙向),解碼器:8 層 LSTM。
- 編碼器與解碼器之間用 attention 連接,解碼器每一步對編碼器的所有時間步計算加權上下文:
- 深層網路難以訓練,GNMT 用 residual connections(殘差連接)讓梯度直通上層:
解碼的訓練目標仍是條件語言模型的對數似然:
子詞模型:解決 OOV 的關鍵一步#
第二條線索:神經翻譯用固定詞彙表,OOV(詞彙表外的詞)是老大難。GNMT 採用 wordpiece 模型(與 Sennrich 等人 2016 年的 BPE 同期、思路相通):把詞拆成高頻子詞片段,約 8 萬個 wordpiece 就能覆蓋幾乎所有輸入——罕見詞變成常見子詞的組合,OOV 問題被結構性地消滅。
部署:quantization 與 TPU#
第三條線索是工程面:將 FP32 模型量化(quantization)到 8 位元整數,模型縮小數倍、速度提升,得以部署到手機離線翻譯;TPU 則承擔了訓練與線上推理的主力算力。這證明深度學習可以在 Google 的生產規模上穩定運轉。
與 SMT 的對照:錯誤率下降 60%#
第四條線索是破案的證據:人工評估(對 WMT 英→法、英→中、英→西等語向,請人類評比翻譯品質)顯示 GNMT 相比 phrase-based SMT 的錯誤率平均下降約 60%。更關鍵的質性差異:SMT 的翻譯是短語拼接,GNMT 的翻譯是整句理解——長距離依賴、句間連貫、指代消解顯著改善。成語不再崩壞,因為模型見過的是整句而非片段。
程式示範:mini BPE 子詞分割#
以下 Python 實作 byte pair encoding(BPE)子詞分割演算法,對小語料迭代合併最高頻相鄰符號對:
from collections import Counter
def get_stats(words):
pairs = Counter()
for word, freq in words.items():
sym = word.split()
for a, b in zip(sym, sym[1:]):
pairs[(a, b)] += freq
return pairs
def merge_pair(pair, words):
merged = "".join(pair)
out = {}
for word, freq in words.items():
sym = word.split()
i, new = 0, []
while i < len(sym):
if i < len(sym) - 1 and (sym[i], sym[i+1]) == pair:
new.append(merged)
i += 2
else:
new.append(sym[i])
i += 1
out[" ".join(new)] = freq
return out
corpus = ["low", "lower", "lowest", "low", "new", "newer", "newest", "new", "wide", "wider", "widest"]
words = Counter(corpus)
words = {" ".join(list(w)) + " </w>": f for w, f in words.items()} # 拆成字元 + 詞界
num_merges = 10
for i in range(num_merges):
pairs = get_stats(words)
if not pairs:
break
best = max(pairs, key=pairs.get)
words = merge_pair(best, words)
print(f"merge {i+1}: {best}")
print("\n詞彙表中的子詞:")
vocab = Counter()
for word, freq in words.items():
vocab.update(word.split())
print(dict(vocab))
# 觀察:est、er、low 等高頻子詞被合併出來,罕見詞變成子詞組合
結案 -- 後果與影響#
- 統計機器翻譯時代正式落幕:2016-2018 年間,Google、微軟、Facebook 等各家翻譯系統陸續轉向 NMT,phrase-based SMT 退出生產。
- BPE/wordpiece 成為整個 NLP 的分詞標準:GPT 系列的 tokenizer 就是 byte-level BPE 變體,子詞模型從翻譯的解法變成 LLM 的基礎設施。
- TPU 的算力證明:GNMT 是第一個在生產環境大規模使用 TPU 的系統,Google 的硬體路線由此確立。
- 翻譯品質接近人工:Hassan 等人 2018 年以圖靈測試式的 side-by-side 評估顯示,GNMT 的中文→英文翻譯已接近人類水準——70 年前 Georgetown 的夢想部分實現。
- 缺陷同時現形:NMT 仍有「翻錯數字、漏譯、幻覺」等問題,且不可解釋——SMT 時代的可追溯對齊消失了,這是新的代價。
關鍵人物與文獻(條列,含真實文獻書目)#
- Yonghui Wu、Mike Schuster、Zhifeng Chen 等人(Google):Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation. arXiv:1609.08144, 2016。
- Ilya Sutskever、Oriol Vinyals、Quoc V. Le:Sequence to Sequence Learning with Neural Networks. NeurIPS 2014。
- Dzmitry Bahdanau、Kyunghyun Cho、Yoshua Bengio:Neural Machine Translation by Jointly Learning to Align and Translate. ICLR 2015(arXiv:1409.0473)。
- Rico Sennrich、Barry Haddow、Alexandra Birch:Neural Machine Translation of Rare Words with Subword Units. ACL 2016(BPE)。
- Hany Hassan、Anthony Aue 等人:Achieving Human Parity on Automatic Chinese to English News Translation. arXiv:1803.05567, 2018。
- Melvin Johnson、Mike Schuster 等人:Google's Multilingual Neural Machine Translation System: Enabling Zero-Shot Translation. TACL 5:339-351, 2017。