簡介#

Google Translate 是 Google 提供的語言翻譯服務,廣泛應用於全球。截至 2024 年,它支援超過 130 種語言,服務超過 十億名使用者 [1]。此服務仰賴機器學習(Machine Learning)模型來理解並翻譯不同語言之間的文字。本章將探討如何設計這樣的翻譯系統。

Figure 1: Language translation service

釐清需求#

以下是面試中候選人與面試官之間的典型對話:

候選人: 系統一開始需要支援哪些語言?

面試官: 先聚焦在四種語言:英文、西班牙文、韓文和法文。未來可以擴展到更多語言。

候選人: 考量到語言的多樣性,我們是否有足夠大且涵蓋面廣的資料集可用於訓練?

面試官: 有的。我們擁有大規模的多語言語料庫(Multilingual Corpus),涵蓋正式文件、網頁內容和對話文本,四種語言皆有。資料集包含 3 億筆範例,每筆範例是一對源語言與目標語言的句子。

候選人: 我們是否有通用文字資料?這很重要,因為它能讓我們對模型進行預訓練(Pretraining),使模型獲得通用知識。

面試官: 假設我們擁有各語言各 TB 級別的通用文字資料,來源多元。

候選人: 使用者會指定輸入文字的語言,還是系統應自動偵測?

面試官: 使用者不一定能辨識文字的語言。想像一本書的標題使用了使用者不熟悉的語言。我們的系統應自動偵測輸入語言。

候選人: 輸入文字長度是否有限制?

面試官: 系統需支援最多 1,000 個字的輸入。

候選人: 系統是否需要在無網路連線時支援翻譯?換句話說,模型是否需要在裝置端(On-device)運行?

面試官: 本次面試不聚焦於效率與模型優化。假設需要網路連線,模型部署在雲端。

候選人: 系統是否需要支援即時翻譯(Real-time Translation)?

面試官: 初期不需要。

將問題框架化為機器學習任務#

定義系統的輸入與輸出#

翻譯系統的輸入為:

  • 源語言中的一段文字序列
  • 使用者指定的目標語言

輸出為目標語言中的一段文字序列

Figure 2: Input and output of a translation system

選擇適合的機器學習方法#

在語言翻譯中,一種語言的文字序列會被轉換為另一種語言的文字序列。這種序列到序列(Sequence-to-Sequence, Seq2Seq) 結構也出現在其他任務中,例如文本摘要和語音辨識。

Seq2Seq 模型專為此類模式設計,能將輸入序列轉換為長度可變的輸出序列。Seq2Seq 模型遵循編碼器-解碼器架構(Encoder-Decoder Architecture),包含兩個主要組件:

  • 編碼器(Encoder): 處理輸入序列,將其轉換為一組上下文向量(Context Vectors),編碼輸入中的資訊。
  • 解碼器(Decoder): 利用編碼器的上下文向量,逐一生成輸出序列中的詞元(Token)。

Figure 3: Encoder-decoder model for English-to-Spanish translation

為什麼選擇 Transformer?#

多種架構可作為編碼器和解碼器,包括 LSTM、GRU 和 Transformer。其中,Transformer 在翻譯任務中表現最優異,尤其擅長處理長距離依賴關係(Long-range Dependencies)。值得注意的是,注意力機制(Attention Mechanism)最初就是在語言翻譯的背景下提出的 [2]。

為什麼選擇編碼器-解碼器架構而非其他 Transformer 變體?#

如第 2 章所述,Transformer 有三種變體:

  • 僅編碼器(Encoder-only)(如 BERT [3])——擅長理解輸入,但需要額外機制來生成輸出
  • 僅解碼器(Decoder-only)(如 GPT [4]、Claude [5])——在生成式任務中非常有效
  • 編碼器-解碼器(Encoder-Decoder)——將輸入理解與輸出生成分開處理

雖然三種架構都可用於翻譯,但編碼器-解碼器模型更受青睞,原因有三:

  1. 關注點分離(Separation of Concerns): 編碼器專注於源語言,在解碼器生成輸出之前完整理解輸入。編碼器通常使用雙向機制(如雙向 LSTM [6] 或 Transformer)從兩個方向理解上下文。
  2. 可變長度處理: 編碼器-解碼器模型天然適應輸入與輸出序列長度不同的情況,這在輸入與輸出沒有固定長度關係時至關重要。
  3. 交叉注意力(Cross-Attention): 交叉注意力機制使解碼器在生成過程中能動態聚焦於輸入序列的相關部分,提升翻譯的準確性和品質。我們將在架構章節進一步探討交叉注意力。

資料準備#

訓練所需的資料分為兩類:

  • 通用資料: 從網路公開取得的文字
  • 翻譯資料: 3 億筆句子對,每筆包含源語言句子及其對應翻譯

兩類資料中的原始文字通常帶有雜訊,且格式不符合模型的預期。由於第 2 章已涵蓋通用資料的準備,本節聚焦於翻譯資料的準備,分為兩個步驟:

  1. 文字前處理(Text Preprocessing)
  2. 文字分詞(Text Tokenization)

文字前處理#

我們對原始翻譯資料進行以下前處理:

  • 移除缺失資料: 移除源文本或目標文本為空的句子對。
  • 移除雜訊資料: 移除含有 HTML 標籤或語言配對錯誤的句子對。
  • 去重複(Deduplication): 移除重複的句子對,避免過擬合(Overfitting)。
  • 處理命名實體(Named Entities): 翻譯前將命名實體替換為佔位符(Placeholder Token),翻譯後再還原。例如:
    • 原文:“The California city, Burlingame, is named after diplomat Anson Burlingame.”
    • 偵測到的實體:“California”(地點)、“Burlingame”(地點)、“Anson Burlingame”(人名)
    • 替換後:“The ENTITY_1 city, ENTITY_2, is named after diplomat ENTITY_3.”
    • 這有助於模型在訓練時專注於句子上下文,不被生僻詞彙干擾。

不再需要的前處理步驟#

在現代基於 Transformer 的翻譯系統中,幾個傳統前處理步驟已不再必要:

  • 小寫化(Lowercasing): 現代模型能自然處理大小寫,學會區分如 “Apple”(公司)和 “apple”(水果)。小寫化反而會丟失有用資訊。
  • 停用詞移除(Stop Word Removal): 停用詞(如 “the”、“and”、“in”)對文法結構至關重要。移除它們會破壞流暢性和語意。
  • 詞幹提取與詞形還原(Stemming & Lemmatization): 現代模型可直接處理詞形變化。將詞語還原為基本形式反而會移除有價值的資訊。
  • 標點符號移除: 標點符號承載句子結構和語意,現代模型能自然處理。

文字分詞#

處理多語言時,分詞演算法的選擇非常重要。詞級分詞(Word-level Tokenization)會產生數十萬個獨立詞彙——詞彙表龐大且效率低落。

Figure 4: A huge vocabulary size due to word-level tokenization

傳統的詞級分詞器還難以處理詞彙表外詞(Out-of-Vocabulary, OOV) 的問題。子詞級分詞(Subword-level Tokenization)更高效,也能有效解決 OOV 問題。以下介紹常用的子詞級演算法——位元組對編碼(Byte-Pair Encoding, BPE) [7]。

位元組對編碼(BPE)#

BPE 透過迭代合併建立子詞級詞彙表。它從單個字元開始,反覆合併最頻繁出現的字元對成為新的子詞。這使模型能將罕見或未見過的詞拆解為已知的組成部分。

初始設定#

假設語料庫中包含以下詞彙:“cat”、“cats”、“dog” 和 “dogs”。

Figure 5: Frequency of words in our corpus

初始設定步驟如下:

  1. 在每個詞後加上特殊的結束標記 </w>,標示詞的邊界。
  2. 將語料庫中的每個詞拆分為單個字元
  3. 以字元及其出現頻率初始化詞彙表。

Figure 6: Initial setup steps

迭代合併#

建立初始詞彙表後,BPE 會反覆合併最頻繁的字元對為子詞,直到詞彙表達到預定大小或滿足停止條件。

前五次 BPE 迭代:

  • 迭代 1: 最頻繁的字元對是 “d” + “o”(出現 10 次,來自 “dog” 和 “dogs”)。合併為 “do”。雖然 “og” 也出現 10 次,但 “do” 的字母序在前。將 “do” 加入詞彙表並更新頻率計數。

Figure 7: BPE iteration 1

  • 迭代 2: 下一個最頻繁的字元對是 “do” + “g”(10 次)。合併為 “dog”。

Figure 8: BPE iteration 2

  • 迭代 3: “c” + “a” 共同出現 8 次(來自 “cat” 和 “cats”)。合併為 “ca”。
  • 迭代 4: “ca” + “t” 出現 8 次。合併為 “cat”。此時 “cats” = “cat” + “s”,“dogs” = “dog” + “s”。
  • 迭代 5: “s” + </w> 出現 7 次(來自 “dogs” 和 “cats”)。合併為 s</w>

Figure 9: BPE iterations 3-5

BPE 反覆合併最頻繁的字元對,使語料庫的表示更加緊湊。此流程持續進行,直到達到所需的詞元數量或迭代次數。

Figure 10: BPE vocabulary after 5 iterations

特殊標記 </w> 在區分詞形時扮演關鍵角色。例如,“cat” 後接 </w> 表示詞 “cat” 的結束,而沒有 </w> 的 “cat” 可能是其他詞的一部分。這種區分使 BPE 能準確表示與解釋詞彙,從而處理已知和未見過的詞。

建立詞彙表後,我們將每個分詞後的句子替換為整數序列,以此構建訓練資料。這會產生多個表格,每個語言對各一個。

Figure 11: Constructed training data for English-Korean and English-French pairs

模型開發#

我們使用編碼器-解碼器 Transformer 進行語言翻譯。本節涵蓋架構、訓練策略和取樣方法。

架構#

編碼器-解碼器 Transformer 的關鍵組件與第 2 章介紹的僅解碼器 Transformer 非常相似。

編碼器#

編碼器處理輸入序列,為每個輸入詞元輸出一個嵌入向量(Embedding)。

Figure 12: Encoder components

編碼器由三個組件組成:

  • 文字嵌入(Text Embedding): 將每個輸入詞元轉換為嵌入向量,捕捉語意資訊。

Figure 13: Token embedding table

  • 位置編碼(Positional Encoding): 注入每個詞元在輸入序列中的位置資訊。固定式和學習式方法在實務中都有效。為簡化起見,我們選擇固定方法,如正弦-餘弦編碼(Sine-Cosine Encoding)
  • Transformer: 透過一疊 Transformer 區塊處理詞元嵌入。每個區塊包含使用多頭注意力(Multi-Head Attention, MHA)的自注意力層(Self-Attention Layer)前饋層(Feed-Forward Layer),並配有正規化層(Normalization Layer)以穩定訓練。由於需求規定支援 1,000 個字的輸入,標準注意力機制即可滿足,無需使用優化變體。

解碼器#

解碼器使用編碼器的輸出和先前生成的詞元,逐一生成輸出序列。它包含四個組件:

  • 文字嵌入: 將目標序列中的每個詞元轉換為嵌入向量。
  • 位置編碼: 為每個詞元注入位置資訊。
  • Transformer: 處理目標序列並輸出更新後的嵌入向量。
  • 預測頭(Prediction Head): 使用更新後的嵌入向量預測下一個詞元。

Figure 14: Decoder components

編碼器與解碼器的關鍵差異#

兩者有三個關鍵差異:

交叉注意力層#

解碼器的 Transformer 包含一個交叉注意力層(Cross-Attention Layer),對編碼器的輸出執行多頭注意力運算。這使解碼器中的每個詞元都能關注所有編碼器嵌入,在輸出生成過程中有效整合來自輸入序列的資訊。

Figure 15: Cross-attention layer

自注意力機制#

自注意力在編碼器和解碼器中的運作方式不同:

  • 編碼器: 每個詞元關注序列中的所有其他詞元,實現全面理解。
  • 解碼器: 每個詞元僅關注前面的詞元,透過遮罩(Masking)屏蔽未來的詞元。這對生成任務至關重要,因為模型應僅使用先前生成的詞元來預測下一個詞元。

Figure 16: Different self-attention mechanisms in the encoder and decoder

預測頭#

解碼器在 Transformer 組件之上有一個預測頭(Prediction Head),通常由線性層(Linear Layer)和 Softmax 層組成。它將 Transformer 的輸出轉換為詞彙表上的機率分布,用以決定最可能的下一個詞元。

訓練#

我們採用兩階段策略來訓練語言翻譯模型:

  1. 非監督式預訓練(Unsupervised Pretraining)
  2. 監督式微調(Supervised Finetuning)

非監督式預訓練#

在此階段,我們使用大規模通用資料語料庫訓練基礎模型(Base Model)。這會建立一個能理解語言、文法和上下文的基礎模型。

預訓練資料#

我們使用常見的預訓練資料集,例如 C4 [8]、Wikipedia [9] 和 StackExchange [10]。不同於第 2 章僅聚焦英文,翻譯任務需要基礎模型理解多種語言。因此,我們保留預期翻譯語言的文字資料,移除其他語言的文字。

機器學習目標與損失函數#

在第 2 章中,我們探討了下一詞元預測(Next-Token Prediction) 作為主要的機器學習目標。然而,下一詞元預測並不適合編碼器-解碼器的預訓練,因為此階段是非監督式的——如果我們將完整句子傳入編碼器,它可能編碼出讓解碼器「作弊」的資訊,總是能準確預測下一個詞。

因此,我們改用遮罩語言模型(Masked Language Modeling, MLM)

遮罩語言模型(MLM)#

在 MLM(也稱為遮罩詞元預測)中,部分輸入詞元會被遮罩,模型需訓練來預測這些被遮罩的詞元。

Figure 17: An overview of the MLM objective

MLM 讓編碼器處理輸入句子並進行編碼,使解碼器能預測被遮罩的詞。由於被遮罩的詞在編碼過程中永遠不可見,這能防止模型作弊。

為衡量預測效能,我們使用交叉熵損失(Cross-Entropy Loss),衡量預測機率與真實詞元之間的差異。步驟如下:

  1. 遮罩詞元: 隨機選擇一部分詞元,替換為 [MASK]。例如 “Thank you for inviting me” 變為 “Thank [MASK] for inviting [MASK]"。
  2. 編碼: 將遮罩後的序列輸入編碼器,編碼器為每個詞元輸出新的嵌入向量。
  3. 解碼: 將相同的輸入序列(未遮罩)向右移一位,插入起始標記 <BOS> 後輸入解碼器。關於為何在訓練時移位輸入序列,請參閱第 2 章或 [11]。
  4. 預測: 解碼器利用所有先前的輸入詞元及編碼器的編碼資訊,預測每個位置的下一個詞元。
  5. 計算損失: 僅針對被遮罩的詞元,計算預測機率與真實值之間的交叉熵損失。

Figure 18: Cross-entropy loss calculation for MLM objective

我們在預訓練中使用 MLM 目標,因為它能同時訓練編碼器和解碼器。編碼器透過編碼被遮罩的輸入來發展語言理解能力,解碼器則學習處理這些編碼資訊並預測被遮罩的詞元。這為兩個組件做好監督式微調階段的準備。

預訓練基礎模型需要大量資源且成本高昂。實務上,我們通常使用公開可用的編碼器-解碼器模型,例如 Google 的 T5 [12] 或 Meta 的 BART [13],這些模型已在大規模資料集上完成預訓練,能大幅降低成本和資源需求。

監督式微調#

第二階段透過翻譯資料微調基礎模型,使其適應語言翻譯任務。有兩種方法:

Figure 19: Bilingual vs multilingual models

雙語方法(Bilingual Approach)#

針對每個語言對訓練專屬模型。

  • 優點:
    • 能捕捉每個語言對的獨特語言特性
    • 翻譯準確度通常較高
    • 較容易隔離和解決特定語言對的問題
  • 缺點: 訓練、部署和維護多個模型需要大量資源且成本高。
多語言方法(Multilingual Approach)#

訓練單一模型在多種語言之間翻譯。

  • 優點: 更簡單、成本更低,部署和維護也更容易。
  • 近期研究(mT5 [14]、mBART [15])顯示,多語言模型的表現常常能匹敵甚至超越雙語模型。

本章以翻譯準確度為優先,因此選擇雙語方法

訓練資料#

每個表格代表一個語言對,每一列包含源句子的詞元 ID 序列和目標句子的詞元 ID 序列。

Figure 20: Example of prepared training data for different language pairs

機器學習目標與損失函數#

與非監督式預訓練不同,微調是監督式的。編碼器處理源句子的詞元,解碼器生成目標句子的詞元。由於解碼器在訓練後需按順序生成詞元,我們使用下一詞元預測(Next-Token Prediction) 作為機器學習目標,並以交叉熵(Cross-Entropy) 作為損失函數(Loss Function)。

Figure 21: Loss calculation during the finetuning stage

圖 21 為簡化起見僅展示單一預測。實務上,如第 2 章所示,解碼器會同時預測所有位置的下一個詞元,並對所有預測計算損失。

取樣#

在取樣(Sampling)階段,訓練好的模型根據先前生成的詞元和輸入序列的上下文,逐一預測下一個詞元以生成翻譯結果。

Figure 22: Generating translation

如第 2 章所述,取樣策略主要分為兩類:確定性方法(如束搜尋,Beam Search)和隨機取樣(Stochastic Sampling)。我們選擇束搜尋(Beam Search),原因有二:

  1. 翻譯準確度: 束搜尋評估多個可能的序列,選擇機率最高的那個,能產生更準確的翻譯。
  2. 一致性: 束搜尋是確定性的,對相同輸入始終產生相同輸出。這種可預測性對翻譯系統至關重要,因為意外結果是不可接受的。

對於重視多樣性和創意的應用(如創意寫作),隨機取樣方法更為適合。第 4 章將詳細介紹 Top-k 和 Top-p 取樣。

特性確定性方法隨機方法
方法遵循可預測的流程基於機率分布生成輸出
效率因追蹤多條路徑,通常效率較低更高效;隨機性使選擇更快
品質連貫且可預測多樣且具創意
風險較長序列傾向產生重複輸出可能產生不當輸出
適用場景需要一致性的任務(如翻譯)需要創意的任務(如開放式生成)
方法例子貪婪搜尋(Greedy Search)、束搜尋(Beam Search)多項式取樣(Multinomial)、Top-k、Top-p

表 1:確定性方法與隨機方法的比較

評估#

離線評估指標#

要全面評估語言翻譯模型,指標應衡量翻譯準確度上下文適切性。三個常用指標為:

  • BLEU — 基於精確率(Precision)
  • ROUGE — 基於召回率(Recall)
  • METEOR — 結合精確率、召回率與語意匹配

BLEU#

BLEUBiLingual Evaluation Understudy)[16] 是基於精確率的指標,比較候選翻譯與參考翻譯的 n-gram,計算匹配比例。分數介於 0 到 1 之間,數值越高表示翻譯越精確。

BLEU 分數公式:

$\text{BLEU} = \text{BP}\cdot \exp \left( \sum_{n=1}^N w_n \log p_n \right)$

其中:

  • $N$ 是考慮的最大 n-gram 長度
  • $\text{BP}$ 是簡短懲罰(Brevity Penalty)
  • $p_n$ 是 n-gram 精確率
  • $w_n$ 是每個 n-gram 精確率的權重
簡短懲罰(BP)#

BP 懲罰比參考翻譯短的候選翻譯:

$\text{BP}= \begin{cases}1 & \text { if } c>r \ e^{\left(1-\frac{r}{c}\right)} & \text { if } c \leq r\end{cases}$

其中:

  • $c$ 是候選翻譯長度
  • $r$ 是參考翻譯長度

若候選翻譯比參考翻譯長,BP = 1(不懲罰)。否則,根據長度比施加指數衰減。

精確率($p_n$)#

精確率衡量候選翻譯中有多少 n-gram 出現在參考翻譯中。計算方式為匹配的 n-gram 數除以候選翻譯中的 n-gram 總數。

Figure 23: Example of calculating precision for 2-grams (p2)

權重($w_n$)#

權重對應每個 n-gram 大小的精確率。通常均勻分配——對於最多 4-gram 的情況,每個 $w_n$ = 1/4。

BLEU 簡單且易於計算,但可能不公平地懲罰語意正確但措辭不同的翻譯。例如,若參考翻譯是 “The engineer discovered a new algorithm”,候選翻譯是 “The engineer found a new method”,BLEU 可能會懲罰候選翻譯,儘管語意相同。儘管有此限制,BLEU 在實務中仍被廣泛使用。

ROUGE#

ROUGERecall-Oriented Understudy for Gisting Evaluation)[17] 透過聚焦召回率而非精確率來補充 BLEU。它衡量候選文本與參考文本之間 n-gram 重疊的比例:

$\text { Recall }=\frac{\text { Number of matching n-grams }}{\text { Total number of n-grams in the reference }}$

更多關於 ROUGE 及其公式的細節,請參閱 [17]。

與 BLEU 類似,ROUGE 易於實作且計算效率高。然而,其主要缺點是缺乏上下文理解能力——使用語意相似但措辭不同的翻譯可能會得到低分。

METEOR#

METEORMetric for Evaluation of Translation with Explicit ORdering)[18] 同時計算精確率和召回率,再透過加權調和平均(Weighted Harmonic Mean) 結合兩者。

不同於 BLEU 和 ROUGE,METEOR 會考慮同義詞(Synonyms)詞形變化(Word Morphology)。例如,若參考翻譯使用 “run”,候選翻譯使用 “running”,METEOR 能辨識兩者為相關詞。同義詞透過 WordNet [19] 等語言資源識別。

Figure 24: Example of relationships between words

優點#
  • 語意理解: 考慮同義詞和詞幹提取,在不同措辭表達相同意思時能更準確地評估品質。
  • 平衡評估: 結合精確率和召回率,辨識既準確又完整的翻譯。
  • 與人類判斷的相關性: 比 BLEU 和 ROUGE 更能與人類判斷結果吻合。
缺點#
  • 計算複雜度: 因額外的同義詞和詞幹匹配步驟,實作更困難且計算較慢。
  • 資源依賴: 依賴語言資源(同義詞詞典、詞幹提取演算法),而這些資源可能不適用於所有語言。

三個指標各自提供模型效能的不同面向,實務中常被一起使用。綜合運用可以獲得更全面的評估。

線上評估指標#

在線上評估中,我們透過以下兩個指標衡量翻譯系統在生產環境中的表現:

  • 使用者回饋(User Feedback): 收集使用者對翻譯品質的評分或回饋。這直接反映使用者滿意度。

Figure 25: Collecting user feedback

  • 使用者參與度(User Engagement): 監測使用者使用翻譯功能的頻率、互動時長,以及回訪頻率。這有助於了解工具的實際價值。

結合離線和線上評估,能更完整地了解系統效能,確保模型同時符合技術標準和使用者期望。

整體機器學習系統設計#

語言翻譯系統有兩個關鍵組件:

  • 語言偵測器(Language Detector) — 辨識輸入語言
  • 翻譯服務(Translation Service) — 翻譯文字

Figure 26: Language translation overall design

語言偵測器#

語言偵測器辨識給定文字的語言,讓我們能選擇針對該語言對訓練的模型。這是一個序列分類任務(Sequence Classification Task),僅編碼器架構是良好的候選方案。

我們可以透過兩種方式修改僅編碼器 Transformer 來分類輸入句子:

  1. 平均池化(Average Pooling): 將 Transformer 的輸出傳入平均池化層,再傳入預測頭以獲得語言類別的機率。
  2. 最後詞元表示(Last Token Representation): 使用 Transformer 輸出中最後一個詞元的表示,將其輸入預測頭。

Figure 27: Two options for building a language detector using an encoder-only Transformer

翻譯服務#

翻譯服務根據偵測到的語言和期望的目標語言,與對應的模型互動。它使用束搜尋生成目標語言的詞元序列,將詞元轉換回文字,最後將翻譯結果呈現給使用者。

其他討論主題#

若面試尚有時間,可考慮討論以下主題:

  • 使用遷移學習(Transfer Learning)和多語言模型支援低資源語言(Low-resource Languages) 的翻譯 [20]
  • 使用僅解碼器 Transformer 進行語言翻譯的方法 [21]
  • 透過使用者回饋持續改善翻譯模型 [22]
  • 高效推論與裝置端翻譯的優化技術 [23]
  • 開發單一多語言模型 [24]
  • 其他自動化指標如 WER 及其計算方式 [25][26]
  • 如何建構語言偵測模型 [27]

總結#

Image represents a mind map summarizing the key aspects of a Generative AI system design.