N-gram汚染検出(エヌグラムオセンケンシュツ)
LLMの訓練データとベンチマークテストセット間でN-gram(連続N単語)が一致する割合を測定し、データ汚染を定量検出する統計的手法。8-gramオーバーラップ率10%超が汚染の目安とされる。
N-gram汚染検出 — 訓練データとテストデータの重複を定量化する
N-gram汚染検出(N-gram Contamination Detection)は、LLMの訓練コーパスにテストセットが混入しているかを統計的に検出するための手法群を指す。大規模モデルの評価信頼性確保に不可欠な技術として、2024-2025年に標準的な論文掲載項目となった。
N-gramの基本概念
N-gramとはN個の連続した単語(またはトークン)の列のこと。N値が大きいほどフレーズの特異性が高くなり、一致 = 記憶の証拠としての信頼性が上がる。
| N値 | 特徴 | 汚染検出での意味 |
|---|---|---|
| 3-gram | 汎用フレーズ多い | ノイズ多く信頼性低 |
| 5-gram | バランス | 概念的一致の検出 |
| 8-gram | 特異性高い | OpenAI標準、ほぼ記憶の証拠 |
| 13-gram | 高精度 | ほぼ確実な丸暗記検出 |
主要な実装手法
1. 完全一致スキャン(ブルートフォース) 計算量O(|test|×|train|)で大規模コーパスには非実用的。小規模検証向け。
2. MinHash / LSH(Locality-Sensitive Hashing) 文書をMinHashでスケッチし近似Jaccard類似度を高速計算。The BigCodeとThe PileのdeduplicationはMinHash-LSHを採用。計算量O(|corpus|)で数百億トークンにも対応。
3. Bloom Filter高速メンバーシップ確認 訓練データの全N-gramをBloom Filterに格納し、テストN-gramのメンバーシップをO(1)で確認。偽陽性率を考慮して閾値設定が必要。
4. Suffix Array(接尾辞配列) Lee et al. 2022「Deduplicating Training Data Makes Language Models Better」で提案。訓練コーパス全体を接尾辞配列に変換し任意のN-gramの出現を O(N log N)で検索。精度が高く、EleutherAIなどのオープンモデル訓練で使用。
汚染スコアの計算と閾値
OpenAIが採用するスコアリング方式:
contamination_score = |overlapping_8grams| / |total_8grams_in_sample|
一般的な閾値設定:
- < 5%: クリーン(許容範囲)
- 5-10%: 要注意(部分的汚染可能性)
-
10%: 汚染と判断(スコアから除外推奨)
2025年の標準ツールチェーン
| ツール | 方式 | 特徴 |
|---|---|---|
| text-dedup (ChenghaoMou) | MinHash/SimHash/SuffixArray | Python、HF Datasetsネイティブ |
| datasketch | MinHash | 汎用、カスタマイズ容易 |
| ROOTS dedup pipeline | SentenceTransformer+MinHash | 多言語対応 |
限界と注意点
- パラフレーズ汚染は未検出: 意味的に同一でも表現が変わるとN-gramは一致しない
- 言語依存性: 日本語などの分かち書き方式でN-gramの定義が変わる
- 閾値の恣意性: 10%という閾値に理論的根拠は薄く、タスク依存
よくある質問(FAQ)
Q1: N=8に設定する理由は? A: 8語以上の一致は一般的な自然言語では極めてまれで、ほぼ確実にコピー・記憶の証拠となる。GPT-4 Technical Report以来の業界標準値。
Q2: セマンティックな汚染は検出できるか? A: N-gram法では困難。埋め込みベースの類似度比較(Embedding Contamination Detection)が補完手法として研究されている。
Q3: 汚染が検出されたらどうすべきか? A: 汚染サンプルを除外したスコアと全サンプルスコアの両方を論文で報告し、影響の透明な開示が求められる。