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:
[今,天,去,吃,午餐]
- LLaMA:
- Example (今天去吃午餐)
- 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