KGWウォーターマーク(ケイジーダブリューウォーターマーク)
Kirchenbauer・Geiping・Wenらが提案したLLMテキストへの統計的透かし手法。トークンをgreen/redリストに分割し生成時にgreenリストを優遇、z検定で検出する。
KGWウォーターマーク
KGW(Kirchenbauer-Geiping-Wen)ウォーターマークは、ICML 2023で発表されたLLMテキスト認証の先駆的手法。生成テキストに人間が知覚できない統計的なパターンを埋め込み、後から機械的に検出できる仕組みを提供する。
仕組み
トークン分割: 各トークン生成時に直前のトークン(シード)に基づいてハッシュ関数で語彙をgreenリスト(約50%)とredリスト(約50%)に分割する。
生成バイアス: greenリストのトークンのlogitをδ(デフォルト2.0)だけ加算する。結果としてgreenトークンが選ばれやすくなり、生成テキストのgreenトークン比率が自然言語の50%を上回る。
検出: テキスト中のgreenトークン比率をz検定で検定する。z > 4(p < 0.00003)でウォーターマーク入りと判定。
検定式
z = (|s_G| - γT) / sqrt(T * γ(1-γ))
|s_G|はgreenトークン数、γは比率(~0.5)、Tはトークン総数。
特性
- δ(greenバイアス): 2.0(デフォルト)
- γ(greenリスト比率): 0.5
- 検出閾値 z: 4.0
- テキスト品質劣化: 軽微(PPL増加 ~1%)
- パラフレーズ耐性: 中程度(50%語置換で検出失敗)
実装例
from watermark import WatermarkLogitsProcessor, WatermarkDetector
watermark_processor = WatermarkLogitsProcessor(
vocab=list(tokenizer.get_vocab().values()),
gamma=0.5,
delta=2.0,
seeding_scheme="simple_1"
)
outputs = model.generate(input_ids, logits_processor=[watermark_processor])
detector = WatermarkDetector(
vocab=list(tokenizer.get_vocab().values()),
gamma=0.5,
seeding_scheme="simple_1",
tokenizer=tokenizer
)
result = detector.detect(generated_text)
# z_score と prediction キーを確認して判定
限界と改善
KGW-v1はパラフレーズ攻撃に脆弱で、50%語置換で検出率が大幅に低下する。KGW-v2(Unigram)はgreenリストを固定化してパラフレーズ耐性を改善。EXP/Gumbelウォーターマークは最適検出理論に基づきKGWより理論的に洗練されている。また短文(50トークン未満)では統計的有意性が出にくい問題もある。
2025年の動向
GoogleのSynthID-Text(Gemini 1.5/2.0で展開)、Meta AIのMarkMyWords評価フレームワーク、Anthropicのモデル透かし研究など主要AIラボがKGWを拡張・改良した手法を開発している。EU AI ActではAI生成コンテンツへのウォーターマーキング義務化が議論されており、KGWは標準的な参照手法として国際的な研究コミュニティで広く引用されている。