AI・機械学習
中級

LLMデータ重複除去(エルエルエムデータジュウフクジョキョ)

LLMの学習データセットから重複・類似テキストを検出・除去する技術。MinHash LSHやSuffix Arrayなどのアルゴリズムを用い、学習効率の向上とmemorization(暗記)リスクの軽減を実現する。

0 回閲覧
0 いいね

LLMデータ重複除去とは

LLMデータ重複除去(Data Deduplication for LLM)は、大規模学習データセット内の重複・準重複テキストを効率的に検出し除去する技術である。同じテキストが複数回学習されると、モデルがそのテキストを「暗記」してしまい、汎化性能の低下やプライバシーリスクの増大につながるため、重複除去はデータキュレーションの必須工程となっている。

なぜ重複除去が必要か

問題影響深刻度
Memorization学習データの逐語的な再生成高(プライバシー・著作権リスク)
学習効率低下同じデータの重複学習でトークンあたりの情報量減少中
評価汚染テスト/評価データが学習データに混入高(ベンチマーク不正)
バイアス増幅特定ソースの過剰代表中(公平性問題)

Leeら(2022)の研究では、C4データセットから重複を除去するだけでモデルのパープレキシティが改善し、memorization率が大幅に低下することが実証されている。

重複除去アルゴリズム

Exact Dedup(完全一致)

ハッシュ値(SHA-256等)の一致で完全重複を検出する。計算コストが最も低いが、1文字でも異なると検出できないため、前処理としての位置づけ。

MinHash LSH(Locality-Sensitive Hashing)

文書をn-gramの集合として表現し、MinHashで固定長シグネチャに圧縮。LSH(局所性鋭敏型ハッシュ)でJaccard類似度が閾値以上のペアを高速に検出する。

主要パラメータ:

  • n-gram サイズ: 5-gram が標準(文書レベル重複向け)
  • シグネチャ長: 128〜256 ハッシュ
  • バンド数/行数: 偽陽性・偽陰性のトレードオフを制御
  • Jaccard閾値: 0.7〜0.8 が一般的

SimHash

文書を単一のハッシュ値に圧縮し、ハミング距離で類似度を判定する。MinHashより高速だが精度は若干劣る。Google検索の重複排除で実用化された手法。

Suffix Array

全テキストを連結しSuffix Arrayを構築、共通部分文字列の長さで重複を検出する。段落・文レベルの部分重複検出に優れるが、メモリ使用量が大きい。

SemDeDup(セマンティック重複除去)

埋め込みベクトルの余弦類似度で意味的重複を検出する。表現が異なるが内容が同じテキスト(パラフレーズ)を除去できるが、計算コストが最も高い。

重複除去の粒度

粒度手法用途
文書レベルMinHash LSHWeb crawlデータの大域的重複除去
段落レベルSuffix Arrayボイラープレート・定型文除去
文レベルExact hashテンプレート文・引用文除去
セマンティックSemDeDupパラフレーズ・翻訳重複除去

実装ツール

  • datatrove: HuggingFace製、MinHash LSHをApache Spark上で分散実行
  • text-dedup: Google Research製、MinHash/SimHash/Suffix Arrayを統一API提供
  • NeMo Curator: NVIDIA製、GPU加速MinHash + fuzzy dedup
  • dolma deduper: AI2製、OLMoデータパイプラインの重複除去モジュール

FAQ

Q1: 重複除去の閾値はどう決める?

A1: Jaccard類似度0.7〜0.8が標準的な出発点。0.7未満にすると類似だが異なるトピックの文書まで除外されるリスクがある。小規模モデルでアブレーションスタディを行い、下流タスク性能を確認して最適値を決めるのが推奨される。

Q2: 重複除去でどれくらいデータが減る?

A2: Common Crawlの場合、MinHash LSH(閾値0.7)で約30〜50%のデータが重複として除去される。ソースの多様性が低い場合(単一サイトのクロールなど)は80%以上が除去されることもある。

Q3: 学習データとテストデータの重複除去は別に必要?

A3: 必須。学習データ内の重複除去とは別に、テスト/評価データとの重複(data contamination)チェックが必要。これを怠るとベンチマークスコアが不当に高くなり、モデルの真の性能を正しく評価できなくなる。