大規模言語モデルの学習データに対して行うテキスト正規化・クリーニング・言語判定・エンコーディング修正などの初期処理工程。生データを後続の品質フィルタリングやトークン化に適した形式に変換する。
LLMデータ前処理は、Webクロールや書籍・論文などから収集した生テキストデータを、言語モデルの学習に適した形式に変換する初期処理工程である。HTMLタグの除去、文字エンコーディングの統一、言語の判定、不要な定型文(ボイラープレート)の除去などを行い、後続の重複排除や品質フィルタリングの精度を高める役割を担う。
Webページからの本文抽出は前処理の最初のステップである。
| 処理 | 内容 | 主要ツール |
|---|---|---|
| HTML→テキスト変換 | タグ除去、本文抽出 | Trafilatura, Resiliparse, jusText |
| エンコーディング修正 | UTF-8統一、文字化け修正 | ftfy, chardet |
| Unicode正規化 | NFC/NFKC正規化、制御文字除去 | unicodedata (Python) |
| 空白正規化 | 連続空白・改行の統一 | 正規表現 |
| URL/メール除去 | プライバシー保護とノイズ低減 | 正規表現 |
Trafilatura は Webページからの本文抽出において高い精度を持つライブラリで、FineWeb の構築にも使用された。HTML のナビゲーション、フッター、広告領域を自動判別し、本文のみを抽出する。
多言語コーパスを扱う場合、各文書の言語を正確に判定する必要がある。
| ツール | 開発元 | 対応言語数 | 精度(Top-1) | 速度 |
|---|
| fastText lid.176 | Meta | 176言語 | 約 97% | 非常に高速 |
| CLD3 | 107言語 | 約 95% | 高速 | |
| langdetect | Shuyo | 55言語 | 約 93% | 中速 |
| GlotLID | GlotScript | 2,000+言語 | 約 90% | 中速 |
fastText の lid.176.bin モデルが業界標準で、FineWeb・RefinedWeb・RedPajama のいずれでも採用されている。文書レベルと段落レベルの2段階で判定を行うのが精度向上のベストプラクティスである。
Webページに含まれるナビゲーション、Cookie同意バナー、著作権表示、広告テキストなどの定型文を除去する。
ftfy(fixes text for you)は、エンコーディングの二重変換や不正な文字置換を修正するPythonライブラリである。
’ → '(UTF-8をLatin-1として読んだ場合の典型的な文字化け)é → é(フランス語の文字化け)A → A(全角文字のエンコーディング問題)\x00〜\x1f)の除去大規模コーパスでは、Webページの約 3〜5% に何らかのエンコーディング問題が存在するとされ、ftfy の適用は必須の前処理ステップとなっている。
Datatrove では、各前処理ステップをブロック(Block)として定義し、パイプラインに組み込む。
各ブロックは独立して動作するため、処理順序の変更や新しいフィルタの追加が容易である。
| データ規模 | CPU(64コア) | GPU(A100×8) |
|---|---|---|
| 1TB(圧縮) | 約 12時間 | 約 2時間 |
| 10TB(圧縮) | 約 5日 | 約 20時間 |
| 100TB(圧縮) | 約 50日 | 約 8日 |
GPU加速は主に言語判定やニューラルベースの品質分類で効果を発揮する。テキスト正規化などのルールベース処理はCPUで十分な速度が得られる。
日本語テキストには英語とは異なる前処理が必要となる。
<ruby> タグ内のルビテキストの処理Q1: 前処理でデータ量はどれくらい減少するか? A: 一般的にWebクロールデータの 30〜50% が前処理段階で除去される。HTMLタグ・ボイラープレートの除去で約 20〜30%、言語フィルタで約 5〜10%、文字クリーニングで約 2〜5% が削減される。FineWeb では Common Crawl の約 85% を最終的に除去しているが、これは品質フィルタリングまで含めた数値。
Q2: 前処理の品質をどう検証するか? A: サンプリング検証が最も信頼性が高い。各処理段階で 1,000〜10,000 ドキュメントをランダム抽出し、人手で品質を確認する。さらに、前処理前後での平均文長、語彙サイズ、言語分布のメトリクスを比較し、異常な変動がないか監視する。
Q3: 前処理は毎回やり直す必要があるか? A: データソースが同一であれば、前処理結果をキャッシュして再利用できる。ただし、フィルタルールを変更した場合や新しいクロールデータを追加した場合は再処理が必要。Datatrove はチェックポイント機能を提供しており、途中段階からの再開が可能。