はじめに:AI開発における「データ不足とプライバシー」の壁
AIモデルのファインチューニングや業務システムのパフォーマンステストにおいて、本番データには個人情報(PII)や機密情報が含まれるため、そのまま開発環境で使用できないケースが多々あります。
また、新サービス開発時や異常検知モデルの開発では、そもそも「データの実例が少なすぎる」というコールドスタート問題が発生します。
LLM(Gemini 3.7 Flash / Llama 3.3 70B)を用いて、本物と見分けがつかない高品質・多様な合成データ(Synthetic Data)を数万件規模で安全に自動生成し、品質フィルタリングを行うパイプラインを解説します。
1. 合成データ生成パイプラインの4ステップ
[ シード定義 (ペルソナ/業界/エッジケース) ]
│
▼
【第1フェーズ: バッチ多様性生成 (LLM)】
・温度(Temperature) 0.7〜0.9 で多様なバリエーションを生成
│
▼
【第2フェーズ: ルールベース整合性チェック】
・フォーマット検証 (JSON Schema / Pydantic)
・論理的整合性 (日付の前後関係、合計金額の計算一致)
│
▼
【第3フェーズ: 意味的重複排除 (Semantic De-duplication)】
・埋め込みベクトル (Sentence-Transformers) による類似度計算
・コサイン類似度 > 0.90 のデータを自動除外
│
▼
[ 厳選された高品質合成データセット (Parquet / JSONL) ]
2. 実践 Python 実装コード
import json
from pydantic import BaseModel, Field
from typing import List
import numpy as np
class CustomerFeedback(BaseModel):
user_id: str
age_group: str
satisfaction_score: int = Field(ge=1, le=5)
category: str
comment: str
device_type: str
def validate_feedback(data: dict) -> bool:
"""ルールベースによる整合性チェック"""
# スコアとコメントの感情の整合性チェック
score = data.get("satisfaction_score", 3)
comment = data.get("comment", "")
if score >= 4 and any(bad in comment for bad in ["最悪", "動かない", "返金して"]):
return False # 矛盾データとして除外
if score <= 2 and any(good in comment for good in ["最高", "満足", "素晴らしい"]):
return False
return True
def remove_duplicates_by_embedding(embeddings: np.ndarray, threshold=0.90):
"""コサイン類似度による重複排除"""
norm = np.linalg.norm(embeddings, axis=1, keepdims=True)
normalized = embeddings / norm
similarity_matrix = np.dot(normalized, normalized.T)
keep_indices = []
dropped = set()
for i in range(len(embeddings)):
if i in dropped:
continue
keep_indices.append(i)
for j in range(i + 1, len(embeddings)):
if similarity_matrix[i][j] > threshold:
dropped.add(j)
return keep_indices
まとめ
合成データ生成の成否は「生成すること」自体ではなく「論理矛盾と重複を徹底的にフィルタリングすること」にかかっています。
このパイプラインを導入することで、開発・テスト・AI学習用の高品質なデータを安全かつ無制限に入手できるようになります。