Data Pipeline Hands-on
この章では、ChatGPT級システムの最初にある data pipeline を小さく作ります。ここで扱うのは巨大データ収集ではなく、dataset を train/valid/test に分け、重複と contamination を目で確認できる最小実験です。
Status: Runnable now
1. raw corpus を cleaning する
uv run mini-transformer-prepare-data --input data/natural/tiny.txt --output-dir runs/data-natural --dedupe --splits 0.8,0.1,0.1出力:
runs/data-natural/cleaned.txtruns/data-natural/train.txtruns/data-natural/valid.txtruns/data-natural/test.txtruns/data-natural/manifest.json
見るポイント:
- 空行や前後の空白を落としたあとで何行残るか。
--dedupeによって同じ行が何件消えるか。- train / valid / test の分割比が manifest に残るか。
影響:
- validation loss を信頼できるか。
- 学習済みのように見える結果が、単なる重複や混入ではないか。
- dataset の癖が自然言語モデルとコードモデルの出力にどう出るか。
2. natural / code の mixture を見る
uv run mini-transformer-mixture-report --natural data/natural/tiny.txt --code data/code/tiny.py.txt --ratio 0.7,0.3 --target-total 20見るポイント:
- natural と code の行数。
- 目標 mixture ratio。
- target total に対する natural / code の目標サンプル数。
影響:
- 同じ model size でも、dataset mixture が文体とコード能力を変える。
- code を増やすと記号や構文に寄るが、自然言語の語り口は弱くなりやすい。
- 実運用では mixture design が model behavior の重要な設計変数になる。
3. contamination を検出する
uv run mini-transformer-contamination-check --train runs/data-natural/train.txt --eval data/eval/tiny_prompts.txtuv run mini-transformer-contamination-check --train runs/data-natural/train.txt --eval data/eval/tiny_prompts.txt --mode substring見るポイント:
- eval prompt が training split にそのまま入っていないか。
--mode substringで、短い評価語句が training text に含まれていないか。
影響:
- 評価が良く見えても、training data に答えや問題が混ざっているだけかもしれない。
- contamination を見ないと、model 改善と暗記を区別できない。
- downstream evaluation の信頼性は、dataset 分割と混入チェックに依存する。
ソース
src/mini_transformer_lab/data_pipeline.pysrc/mini_transformer_lab/dataset_mixture.pytests/test_data_pipeline.pydata/eval/tiny_prompts.txt