發布於 

Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca

本文為 “Efficient and Effective Text Encoding for Chinese LLaMA and Alpaca” (2023.04) 的技術報告重點摘要

論文全文參考

Open Source

Description

Goal

  • 擴展 LLaMA & Alpaca 模型的應用到中文
    • 在 LLaMA 1.4T tokens 的 pre-train data 中並沒有中文相關的語料
    • 在 LLaMA 的中文 tokenizer 結果是以 bytes 形式來輸出中文

Contributions

  • 開源了一套機制從 LLaMA → Chinese LLaMA → Chinese Alpaca
  • Note: 項目本身是從 LLaMA 轉化而來, 所以 Chinese Alpaca 非商用模型

Methodology

  • LLaMA → Chinese LLaMA
    • Step 0: LLaMA 架構為 embedding layer + transformer block * N + LM head
    • Step 1: 增加中文詞表, 透過 word piece (Google 所提出) 增加中文常用詞, 細節詳見 huggingface 教學
      • Example (今天去吃午餐)
        • LLaMA: [今,天,去,<0xE5>,<0x90>,<0x83>,<0xE5>,<0x8D>,<0x88>,<0xE9>,<0xA4>,<0x90>]
        • Chinese LLaMA: [今,天,去,吃,午餐]
    • Step 2: 由於對原始 LLaMA 的詞表新增了 20000 個詞, 需要擴增 embedding layer size
    • Step 3: 固定 transformer block, 只訓練 embedding layer, 論文有提到 13B 的模型部用作這部, 個人猜測是 7B 模型不夠大也許會把 transformer block train 壞
    • Step 4: 對所有 layer 使用 LoRA 繼續 pre-training 的 task
      • 使用 LoRA 的好處是不用 fine-tune 所有 weight, 採用一種擴增的機制來訓練外加的 weight, 這外加的 weight 可以被分解為兩個較小的矩陣相乘, 舉例來說原本要訓練 10000*10000 個參數, 現在透過 10000* {lora rank=8} + {lora rank=8} * 10000 來實現
  • Chinese LLaMA → Chinese Alpaca
    • Step 1: 仿造 Alpaca 使用 self-instruction 生資料的方式, 並加上額外開源的 QA pair 資料 (e.g., pCLUE, translation, …)
    • Step 2: 調整 instruction data, 用換行符號(\n)合併原有 Alpaca 的 instruction, input, output 三元組中的 instruction & input
    • Step 3: 使用 LoRA 訓練 instruction training 的 task
Training recipes
Training recipes

Conclusion

  • 此篇論文實作了中文版本的 LLaMA & Alpaca model, 比較有價值的是開源 code 的部分, 現階段有少數可商用模型 (e.g., OpenLLaMA, MPT) 但訓練資料絕大多數只有英文, 在中文商用模型未釋出的期間利用此方法訓練是一個不錯的選擇
  • 如果要訓練 domain based 的 LLM 勢必要經過 domain 的 tokenizer 去切詞才會事半功倍, 這點在過去 BERT 時代非常常見



本"頁面"訪問 次 | 👀總訪問 次 | 🎎總訪客


本站由 @yifor 使用 Stellar 主題創建。
本 Blog 所有文章除特別聲明外,均采用 CC BY-NC-SA 4.0 許可協議,轉載請注明出處。