LLM Training Data Cleaning and Normalization(LLM 訓練データのクリーニングと正規化)
抽出 / LID / Unicode / 品質 / dedup / PII / 著作権 / コード / 多言語 / トークナイザ整合。raw CC の 65–70% を破棄し残り 30% が下流性能を決める。
article technology ja 抽出 / LID / Unicode / 品質 / dedup / PII / 著作権 / コード / 多言語 / トークナイザ整合。raw CC の 65–70% を破棄し残り 30% が下流性能を決める。LLM Training Data Cleaning and Normalization(LLM 訓練データのクリーニングと正規化)
生 web/コード/合成ダンプを 拡張 (tech-40) / 供給 (tech-39) の上流 で処理 (抽出→LID→Unicode→品質→dedup→PII→有害/著作権 の 7 段)。raw CC の 65–70% を破棄し残り ~30% が下流 MMLU/ARC を決める (Penedo 2024)。Rae 2021 は MassiveWeb で +8–12% MMLU、Penedo 2024 は 15T で C4/Dolma 凌駕、Suarez 2019 は KenLM 下位 90% 切捨でも品質維持 → quality > quantity (Chinchilla 比はフィルタ後で)。トークナイザ整合は tech-37。
テキスト抽出
| ツール | 手法 | 精度 | 速度 | 用途 |
|---|---|---|---|---|
| Trafilatura ≥1.9 | readability+XPath | 高 | 中 | ニュース/blog、表 markdown |
| jusText 3.x | 段落スコアリング | 中-高 | 中 | 多言語 stopword に強い |
| Resiliparse | C++ コア | 高 | Trafilatura の 5–10× | HPLT/FineWeb 採用 |
| CC-NET WET | CC 抽出済み | 低-中 | 最速 | 表/コードを失う |
| Llama 3 カスタム | HTML→Markdown | 高 | 非公開 | <pre> を fenced 化 |
WET は表が潰れインデント消失のためコード/数学重視は Trafilatura/Resiliparse で再パース、<pre><code> whitespace 保全はインデント別トークン化に必須。前段で chardet/charset-normalizer が要 (UTF-8 宣言で実体 latin-1 だと後段 ftfy で mojibake 爆発)。
言語識別
fastText LID-176 (Joulin 2017, 1708.02512、~93% macro)、CLD3 (短文弱)、GlotLID (Kargaran 2023、1,600+ スクリプト)。近接言語混同: Indonesian/Malay ~15–20% 取違、Hindi/Marathi は Devanagari 共有で Marathi 劣、Serbian/Croatian/Bosnian は Latin Serbian が Croatian に流出。実用 2 段: (1) fastText P ≥ 0.65 (mC4 は 0.7)、(2) Unicode スクリプト n-gram で支配ブロック再検証し transliteration 除外。mC4 は単段で Arabic 方言・Marathi 混同残り、CulturaX (Nguyen 2023) は人手 spot-check で中規模言語に 3–8% 誤ラベル修正、低資源は char n-gram LM + 最小 50 words 併用。
Unicode 正規化
| 形式 | 用途 | 効果 |
|---|---|---|
| NFC | 多言語 pre-train 既定 | リガチャ・上付・CJK 互換を保持 |
| NFKC | SentencePiece、SFT、コード | 全角 (A→A)、半角カナ (ア→ア)、上付 (²→2)、分数 (½→1/2) を畳む |
pre-train=NFC、SFT/コード/SentencePiece=NFKC (NFKC を pre-train に当てると CJK 互換領域の意味区別が消える)。ftfy ≥6.1 (Speer 2019) は mojibake (’→')・HTML エンティティ・制御文字整形 (ftfy.fix_text(text, normalization='NFC'))、二重 mojibake は復元不能。ゼロ幅 (U+200C/200D) は言語別、ソフトハイフン (U+00AD) 削除、BOM (U+FEFF) 文頭剥がし、OCR (l↔1、O↔0) は LM 再評価か除外。日本語固有: 波ダッシュ 〜(U+301C)/~(U+FF5E)/~(U+007E) は NFKC が U+FF5E のみ ASCII 化 → 明示マッピング表が要、半角カタカナ NFKC で語彙断片化防止、踊り字 々ゞヾ は NFKC 不分解で別パス、旧字体 國/国 は内容判断。
品質フィルタ
Gopher 8 ルール (英語想定): 単語 50–100k / 平均長 3–10 / stop-word ≥ 20% / 記号 ≤ 10% / … 行率 ≤ 10% / alpha ≥ 70–80% / bullet ≤ 90% / 反復 5-gram ≤ 0.1–0.2 — 第一関門、Llama 3 dirty-word は URL ドメイン で適用。2024 以降は モデルベース 主軸: FineWeb-Edu fastText (Penedo 2024) は GPT-4 注釈 ~500k 文書を 0–5 で蒸留、閾値 ≥ 3 で 1.3T 抽出し 5× 大の FineWeb 同等以上。DCLM-Baseline (Gadre 2024, 2406.11794) は 0.5B 比較器で curated vs random 判定、KenLM perplexity (CC-NET) は言語別 top 10–30% の第二関門。ヒューリスティクス単独 (C4 流) は過剰除去 → 保守的ヒューリスティクス + 軽量分類器併用が良い (Penedo 2024)。
重複排除
Exact: SHA-256/xxHash (~10 GB/s)、文書 ~1–5%・段落 ~3–8% 削減、ストリーミングは bloom filter。MinHash+LSH (Lee 2022, 2107.06499): J 0.7–0.8、256 hash、b×r (J ≥ 0.8 で r=9, b=13)、C4 で exact 1.9% + 近似 3.3%、Soboleva 2023 (SlimPajama, 2309.10700) は RedPajama-V1 を ~49% 削減 (1.2T→627B)。SemDeDup (Abbas 2023, 2303.09540) は埋め込み k-means + 内コサイン ≥ 0.8、MinHash 後 +10–15% 除去で C4 50% でも 1.3B perplexity 不変、1T tokens 級が実用上限。
記憶 vs 過剰 dedup: Carlini 2022 (2202.07646) は同一文書 ≥ 3 回で ~10%・≥ 10 回で ~50% 逐語抽出可、Carlini 2023 (2301.13188) は大モデルほど記憶増。一方 Penedo 2024 は MinHash J ≥ 0.7 で math/StackExchange の推論連鎖が構造類似なページ除去で ARC 低下 → 一般 web J ≥ 0.8、math/code Q&A は J ≥ 0.9 か skip の ドメイン別閾値。13-gram decontamination (tech-40) は dedup と別軸で独立適用。
PII / プライバシ
3 レイヤ: L1 regex (email/E.164/Luhn/SSN/IPv4、版数 1.2.3.4 と IPv4 の context 依存は拾えない)、L2 Microsoft Presidio ≥ 2.2 (SpaCy NER + 20+ 認識器、REPLACE/REDACT/MASK/HASH/ENCRYPT)、L3 k-anonymity (名前+住所が corpus 内 < k 回 (k=3/5) で [REDACTED]、Llama 3 採用)。コードは gitleaks 形式 secret 検出 必須 (AWS AKIA[0-9A-Z]{16}、GitHub PAT、OpenAI sk-...、Slack、JWT 50+)、Allal 2024 (StarCoder 2, 2402.19173) は明示組込。法的: GDPR Art. 17 / EU AI Act Art. 10 は GPAI に前処理文書化要求 — 各フィルタを版数+閾値+provenance で記録。
有害・著作権
| ツール | 手法 | 閾値 | 注意 |
|---|---|---|---|
| Perspective API | BERT 4 指標 | ≥ 0.7 | レート制限、15T 無理 |
| Llama Guard | Llama 6 カテゴリ | 調整可 | SFT 向き |
| fastText toxicity | 軽量バイナリ | ≥ 0.9 | 規模対応 |
NSFW は domain blocklist + classifier 二段、画像-テキストは CLIP 系。著作権: OpenWebMath (Paster 2023) は CC-BY/CC-BY-SA/PD のみで 60–70% 捨て、TheStack v2 (Allal 2024) は SPDX permissive (MIT/Apache 2/BSD) で ~45% 除去、opt-out registry am-i-in-the-stack.bigcode-project.org、Pile books3 撤去、Dolma は CC のみ。Dodge 2021 (C4 audit, 2104.08758) / Bender 2021: C4 “bad words” は LGBTQ+/健康/AAVE を不均衡除去し 表象害 → 二値ゲートでなく signal、デモグラフィプロキシ別除去率を監査し disparate impact 観測。
コード固有
licensee gem + GitHub API で SPDX permissive のみ (TheStack v2 ~45%)、自動生成 (“DO NOT EDIT”/“auto-generated”、minified JS 行長 > 200、commit 履歴ゼロ ~5–10%、StarCoder 2 は分類器)、重複 (SHA-256 で 30–50% リポが完全重複、AST 同型 near-dup は言語別)、依存 (requirements.txt/package.json/go.sum は near-dup 除外か 1 件残し)。エンコーディング: UTF-8 BOM 除去、CRLF→LF、binary 除外。
多言語 + 低資源
言語クォータ: Llama 3 非英語予算 ~5%、BLOOM/ROOTS (Laurencon 2022, 2303.03915) は 59 言語手動キュレーション。低資源は fastText 単体不可で (a) Unicode block check、(b) 言語別 char 3-gram LM で OOD 検出、(c) 最小 50 words の三段、mC4 の Arabic に Persian/Uyghur/Urdu Arabic-script 混入は GlotLID 二段で緩和。日本語: Unicode は §Unicode 正規化 参照、MeCab 前処理不要、半角/全角は NFKC、ローマ字/英数字は残す (ひらがな変換 NG)、Gopher stop-word ratio は stop 助詞 (は・が・を・に・で・と…) の出現比 に置換。
トークナイザ整合性
SentencePiece (Kudo 2018) は既定 nmt_nfkc を内部適用、コーパスを NFC で止めると訓練/推論で語彙不整合。byte-level BPE (Llama/GPT 系) はバイト列直視 → コーパス側で ftfy+NFC、WordPiece (BERT) は NFC。SP→NFKC、BPE→NFC+ftfy、WordPiece→NFC — コーパスとトークナイザで正規化必ず一致 (詳細 tech-37)。
落とし穴 Top 7
- 過剰 dedup: MinHash J ≥ 0.7 が ARC を下げる。math/code QA は J ≥ 0.9 か skip。
- ベンチ汚染: tech-40 の 13-gram decontamination を train/val 分割前 に適用、パラフレーズは SemDeDup で別パス。
- secret 漏れ: テキスト系は AWS/GitHub PAT を素通り、gitleaks をコード集合に別途。
- 不均衡増幅: 品質フィルタが低資源言語/方言を不均衡除去、言語別/方言別除去率を監査。
- 多言語アンダー: mC4 Arabic に Persian/Uyghur/Urdu 混入、GlotLID 二段 + 人手 spot-check 必須。
- KenLM register: Wikipedia 5-gram はフォーマル寄りで方言/口語を劣評価、SFT に当てず domain LM に差替。
- ftfy over-repair: 非ラテン正常テキストを「修正」する、確実な mojibake のみ
fix_encoding()選択的に。
2026 年の選択指針
| ユースケース | 推奨パイプライン |
|---|---|
| 15T pre-train (英語主) | Resiliparse → fastText 0.65 → ftfy NFC → Gopher → MinHash J ≥ 0.8 → FineWeb-Edu ≥ 3 → KenLM top 30% → Presidio → 13-gram decontam (tech-40) |
| 小規模 SFT (≤ 100k) | Trafilatura → ftfy NFKC → Gopher subset → LM-judge → Presidio。dedup 不要 |
| コード (TheStack 系) | SPDX permissive → BOM/CRLF → gitleaks → SHA-256 → AST/MinHash J ≥ 0.9 → 自動生成除外 → 依存除外 |
| 多言語 (60+ 言語) | Trafilatura → fastText+GlotLID 二段 → script n-gram → 言語別 NFKC/NFC → 言語別 Gopher → 言語別 MinHash → クォータ |
| 日本語特化 | Resiliparse → ftfy (mojibake のみ) → NFKC + 波ダッシュ表 → fastText ≥ 0.85 → 助詞比 Gopher → MinHash J ≥ 0.85 |
参考文献
- Suarez 2019 (CC-NET). https://arxiv.org/abs/1911.00359
- Rae 2021 (Gopher / MassiveWeb). https://arxiv.org/abs/2112.11446
- Joulin 2017 (fastText LID). https://arxiv.org/abs/1708.02512
- Lee 2022 (Deduplication / MinHash). https://arxiv.org/abs/2107.06499
- Carlini 2022 (Memorization extraction). https://arxiv.org/abs/2202.07646
- Carlini 2023 (Quantifying memorization). https://arxiv.org/abs/2301.13188
- Abbas 2023 (SemDeDup). https://arxiv.org/abs/2303.09540
- Penedo 2023 (RefinedWeb). https://arxiv.org/abs/2306.01116
- Soboleva 2023 (SlimPajama). https://arxiv.org/abs/2309.10700
- Dodge 2021 (C4 audit). https://arxiv.org/abs/2104.08758
- Penedo 2024 (FineWeb). https://arxiv.org/abs/2406.17557
- Gadre 2024 (DCLM). https://arxiv.org/abs/2406.11794
- Dubey 2024 (Llama 3). https://arxiv.org/abs/2407.21783
- Allal 2024 (StarCoder 2 / TheStack v2). https://arxiv.org/abs/2402.19173
- Laurencon 2022 (BLOOM / ROOTS). https://arxiv.org/abs/2303.03915