在開始訓練模型之前,必須先擁有高品質的資料,才能孕育出精良的模型。這個過程就像是煉金術一樣,需要經過「尋找 Dataset、資料處理 (Data Processing)、基本去重 (Deduplication)、以及分析檢查」等繁雜的步驟,才能從龐雜的原始數據中,提煉出真正高品質的黃金語料。
而在著手處理這些技術細節之前,我認為必須先正視一個更核心、更基礎的前提:資料的合規性與倫理原則。
1. 資料合規性與 OECD AI 原則
隨著 AI 技術的普及,資料版權與法律爭議成為了不可忽視的問題。在我的專案 sfirew-ai-train 裡,我堅持在收集語料時遵循以下原則,以確保模型的合法性與安全性:
- 排除版權爭議資料:我僅採用授權明確且無爭議的公開資料集 (例如官方釋出的聯合國平行語料庫),主動排除任何存在潛在版權疑慮的散落文章或非官方翻譯。
- 遵循 OECD AI 原則:在資料清洗過程中,我注重經濟合作暨發展組織 (OECD) 所提出的 AI 價值觀與原則,特別是在透明性、穩健性與安全性上。這意味著必須在資料層面上,盡可能過濾掉含有極端暴力、歧視或具隱私侵犯風險的內容。
確保資料來源「乾淨且合規」,不僅是避免法律風險,更是負責任的 AI 開發者應盡的義務。
2. 尋找語料的寶庫:Hugging Face
在確定了合規的原則後,下一個問題是:「該去哪裡找這些合法的資料?」
答案是:Hugging Face。
Hugging Face 是目前全球最大的 AI 開源社群平台,被譽為「AI 界的 GitHub」。在上面不只有各種開源模型,還有成千上萬由研究機構與社群志工整理好的 Dataset(資料集)。透過這個平台,就不需要從零開始寫爬蟲程式去網路上違法抓取資料,只要設定好過濾條件(例如:開源授權類型、語言、資料標籤),就能輕鬆找到符合合規要求且高品質的原始語料庫。
本文後續提到的所有高品質翻譯資料,全都是從 Hugging Face 上開源釋出的 Dataset 中挖掘與篩選出來的。
3. 語料選擇:專注於高質量官方平行語料
在確保合規的前提下,由於我這次模型訓練的核心目標是「翻譯」,因此在語料的挑選上,我捨棄了來源複雜且容易有版權爭議的文本,而是專注於高品質的平行語料 (Parallel Corpus),並且特別選用了聯合國平行語料庫 (例如 Helsinki-NLP/multiun 資料集)。
為什麼選擇聯合國等官方語料?
- 語意精確與專業度:官方文件包含了大量經過專業譯者校對的雙語對照。比起網路上參差不齊的散落資料,這類語料能訓練出翻譯精確、文法嚴謹的模型。
- 領域廣泛度:從經濟、國際法到環境保護,聯合國會議紀錄涵蓋了各式各樣的正式語境,這對於提升模型在處理專業領域下的翻譯能力有極大幫助。
- 授權清晰與合規性:選用這類官方平行語料的另一大好處是其公開透明的授權方式,這完美符合前面提到的 OECD AI 合規原則,大大降低了模型訓練在版權上的疑慮。
💡 資料清洗的幕後實作細節
如果你好奇我具體是怎麼處理這類龐大平行語料的,我在自己的 dataset-processer 轉換腳本中加入了幾個關鍵的處理步驟:
- 簡繁轉換與語感統一:由於開源語料常混雜簡體中文,為了確保訓練出來的模型具備純正的繁體中文語感,我結合了 OpenCC (開放中文轉換) 工具,自動將偵測到的簡體資料精準轉換為標準的台灣繁體中文,藉此最大化保留了可用語料,而不是直接丟棄。
- 基於 Hash 的精準去重:我將每組「英文+中文」的純文字組合成字串,並使用 SHA-256 計算雜湊值 (Hash)。只要雜湊值出現過就直接過濾,確保不會讓模型浪費算力去死背重複的台詞。
- 雙向擴充與隨機排序:一個好的翻譯模型必須能中翻英,也能英翻中。因此每一筆過關的語料,腳本都會自動產生「中 英」和「英 中」兩種格式。同時,我還利用內容 Hash 的尾數來決定寫入順序(50% 機率對調),避免模型因為固定的輸入順序產生學習偏見。
4. 統一訓練格式
真實世界的原始資料格式五花八門(例如 XML、TXT,或不同結構的 JSON)。為了提升後續抽樣與訓練的效率,必須將所有的雙語對照轉換為統一的 JSONL 格式。
我採用的標準結構如下:
{
"messages": [
{
"role": "user",
"content": "Translate the following to Traditional Chinese: I'll be back."
},
{
"role": "assistant",
"content": "我會回來的。"
}
],
"metadata": {
"source_format": "un_parallel_corpus",
"source_file": "un_doc_001.xml"
}
} 統一格式的好處在於:無論後續需要按比例抽樣,或是進行除錯 (Debugging),都能透過自動化腳本輕鬆處理,並清楚追蹤每一筆翻譯的來源。
5. 切分訓練與驗證集
資料整理完畢後,我將資料按比例分層輸出為三個部分:
train_chat.jsonl:用於模型更新權重的正式翻譯訓練集。validation_chat.jsonl:用於訓練過程中持續監控損失函數 (Loss),防止模型對特定句型過擬合。test_chat.jsonl:保留至最後,用於客觀評估模型最終翻譯能力的測試集。
下一步:進入 Tokenizer 的世界
資料清洗與合規檢查完成後,就已經有了高品質的雙語翻譯庫。但在直接丟給 Transformer 模型之前,還需要先解決「模型如何閱讀這些文字」的問題。
下一篇文章,我將探討如何從這批整理好的雙語語料中,訓練出專屬於這個模型的 BPE Tokenizer(位元組對編碼分詞器)。