使用 Transformers 和 Tokenizers 從頭開始訓練語言模型

Hugging Face 發布了一份詳細的技術指南,展示如何使用 transformerstokenizers 函式庫從頭開始訓練一個新的語言模型。透過為世界語(Esperanto)建立一個名為 "EsperBERTo" 的小型 RoBERTa 風格模型,該指南說明了從數據集收集到下游任務微調的端到端流程。

模型架構與規格

EsperBERTo 被設計為一個 "小型" 模型,以展示在沒有大量運算資源的情況下從頭開始訓練的可行性。其架構包含:

  • 參數: 84 million
  • 層數: 6
  • 隱藏層大小: 768
  • 注意力頭數: 12

此配置反映了 DistilBERT 的架構。該模型使用遮罩語言模型(Masked Language Modeling, MLM)進行訓練,模型學習預測數據集中隨機遮罩的 token。

訓練流程

1. 數據集獲取

EsperBERTo 的訓練語料庫包含約 3 GB 的文本。數據來源於兩個主要集合:

  • OSCAR corpus: 此多語言語料庫中的世界語部分,源自經過篩選的 Common Crawl 網絡轉儲。
  • Leipzig Corpora Collection: 一個包含來自新聞、文學和 Wikipedia 的多樣化文本子語料庫,用以補充 OSCAR 數據。

2. Tokenizer 訓練

Hugging Face 使用了與 GPT-2 類似的位元組級 Byte-pair encoding (BPE) tokenizer,詞彙表大小為 52,000。

位元組級 BPE 方法的主要技術優勢包括:

  • 消除 <unk> token: 因為 tokenizer 從單個位元組的字母表中構建其詞彙表,所以所有單詞都可以分解為 token。
  • 語言優化: 為世界語訓練原生 tokenizer 可以讓變音符號(如 ĉ, ĝ, ĥ, ĵ, ŝ, 和 ŭ)被原生編碼。
  • 效率: 指南指出,與使用預訓練的 GPT-2 tokenizer 相比,世界語語料庫的編碼序列平均長度縮小了約 30%。

3. 語言模型預訓練

該模型使用 transformers 函式庫中的 run_language_modeling.py 腳本進行訓練。為了從頭開始訓練而非從檢查點(checkpoint)開始,--model_name_or_path 參數被設置為 None

訓練超參數:

  • 學習率: 1e-4
  • Epochs: 5
  • Batch Size: 每 GPU 16
  • Seed: 42
  • Model Type: RoBERTa

4. 驗證與測試

為了驗證模型是否學習到了語言模式,Hugging Face 使用了 FillMaskPipeline。這允許用戶輸入帶有 <mask> token 的序列,並觀察最可能的補全結果。例如,提示詞 "La suno ." 的首選預測結果為 "brilis"(發光),證實了模型對基本語法和語法的掌握。

下游任務微調

預訓練完成後,模型會針對詞性(Part-of-speech, POS)標註進行微調。由於世界語是一種高度規則的語言,單詞結尾通常表示語法上的詞性,因此這項任務被視為一個 token 分類問題。

使用在 CoNLL-2003 格式下標註的世界語 POS 標籤數據集,該模型使用 run_ner.py 腳本進行了微調。該過程涉及在每 GPU batch size 為 64 的情況下訓練 3 個 epochs,最終成功分類了代詞、動詞、名詞和形容詞。

社群分享與分發

Hugging Face 鼓勵透過 transformers-cli upload 命令分享訓練好的模型。建議的模型分發做法包括提供一個模型卡片(README.md),其中詳細說明了:

  • 模型描述
  • 訓練參數(數據集、預處理和超參數)
  • 評估結果
  • 預期用途與限制性

Sources