Data Pipeline Hands-on

この章では、ChatGPT級システムの最初にある data pipeline を小さく作ります。ここで扱うのは巨大データ収集ではなく、dataset を train/valid/test に分け、重複と contamination を目で確認できる最小実験です。

Status: Runnable now

1. raw corpus を cleaning する

Terminal window
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.txt
  • runs/data-natural/train.txt
  • runs/data-natural/valid.txt
  • runs/data-natural/test.txt
  • runs/data-natural/manifest.json

見るポイント:

  • 空行や前後の空白を落としたあとで何行残るか。
  • --dedupe によって同じ行が何件消えるか。
  • train / valid / test の分割比が manifest に残るか。

影響:

  • validation loss を信頼できるか。
  • 学習済みのように見える結果が、単なる重複や混入ではないか。
  • dataset の癖が自然言語モデルとコードモデルの出力にどう出るか。

2. natural / code の mixture を見る

Terminal window
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 を検出する

Terminal window
uv run mini-transformer-contamination-check --train runs/data-natural/train.txt --eval data/eval/tiny_prompts.txt
uv 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.py
src/mini_transformer_lab/dataset_mixture.py
tests/test_data_pipeline.py
data/eval/tiny_prompts.txt