グリーン/レッドリスト方式(グリーンレッドリストホウシキ)
Kirchenbauer et al. 2023 が提案したLLMテキストウォーターマークの基本方式。直前トークンと秘密鍵のハッシュで語彙をグリーン(優先)とレッド(非優先)の2群に分割し、グリーントークンの選択確率を引き上げることで統計的な透かし信号を埋め込む。
グリーン/レッドリスト方式とは
グリーン/レッドリスト方式(Green/Red List Watermarking)とは、2023年にメリーランド大学のJohn Kirchenbauer、Jonas Geiping らが論文「A Watermark for Large Language Models」で提案した、LLMテキストウォーターマークの基礎的アルゴリズムである。この論文はICML 2023で発表され、LLMテキストウォーターマーク研究の出発点として広く引用されている(2026年6月時点で被引用数 1,200+)。
方式の名称は、語彙を「グリーンリスト(優先選択するトークン群)」と「レッドリスト(選択を抑制するトークン群)」に分割することに由来する。
アルゴリズムの詳細
埋め込みプロセス
Green/Red List方式の埋め込みは以下の5ステップで実行される。
Step 1: コンテキストハッシュ 直前の k 個のトークン列 (t_{i-k}, ..., t_{i-1}) と秘密鍵 sk を結合し、暗号学的ハッシュ関数(SHA-256等)を適用する。
Step 2: 疑似乱数シード ハッシュ値を疑似乱数生成器(PRNG)のシードとして設定。同じコンテキスト+秘密鍵の組み合わせからは常に同じ乱数列が生成されることが重要(検出時の再現性を保証)。
Step 3: 語彙分割 PRNGの出力でトークナイザの全語彙 V(例: GPT-2では50,257トークン)をランダムに2群に分割する。
- グリーンリスト G: |G| = γ|V| 個(γ は分割比率、通常 0.5)
- レッドリスト R: |R| = (1-γ)|V| 個
Step 4: ロジット修正 LLMが出力する次トークンの logit ベクトルに対して、グリーントークンの logit 値に定数 δ(バイアス強度)を加算する。
logit'[t] = logit[t] + δ(t ∈ G)logit'[t] = logit[t](t ∈ R)
Step 5: サンプリング 修正後のlogitにsoftmaxを適用して確率分布を算出し、通常通りトークンをサンプリングする。グリーントークンの選択確率が δ の分だけ引き上げられている。
ハイパーパラメータ設定ガイド
| パラメータ | 記号 | 推奨値 | 説明 |
|---|---|---|---|
| 分割比率 | γ | 0.25〜0.5 | グリーンリストの語彙に対する比率 |
| バイアス強度 | δ | 1.5〜2.5 | グリーントークンのlogit加算値 |
| コンテキスト長 | k | 1〜2 | ハッシュに使用する直前トークン数 |
| 検出閾値 | z_th | 4.0 | z統計量の判定閾値 |
γ = 0.25(語彙の25%のみがグリーン)にすると、グリーントークンの「希少性」が上がり検出感度は向上するが、生成テキストの多様性が低下する。γ = 0.5 が品質と検出のバランス点として最も広く採用されている。
Soft Watermark と Hard Watermark
Kirchenbauer論文では2つのバリエーションが提案された。
Soft Watermark(推奨)
グリーントークンのlogitに δ を加算する方式。全てのトークンが選択される可能性を残すため、テキスト品質への影響が小さい。
特に低エントロピーの位置(次のトークンがほぼ確定的な場合、例: 「東京」の後の「都」)では、δ の加算があっても元々最も確率の高いトークンが選ばれるため、品質劣化はほぼゼロである。
Hard Watermark(研究用途)
レッドトークンの logit を -∞ に設定し、完全にブロックする方式。検出精度は極めて高いが、テキスト品質が大幅に劣化する。特に固有名詞や専門用語がレッドリストに入った場合、不自然な同義語への置換が発生する。
| 比較項目 | Soft Watermark | Hard Watermark |
|---|---|---|
| グリーンlogit修正 | +δ(加算) | +δ(加算) |
| レッドlogit修正 | 変更なし | -∞(完全ブロック) |
| 品質影響 | 低(Δppl < 2%) | 高(Δppl 5〜20%) |
| 検出感度 | 高 | 最高 |
| 実用性 | 実用的 | 研究用 |
| 生成多様性 | 維持 | 低下 |
数学的基盤
z検定による検出
テキスト中の T トークンのうち、グリーントークン数を |s|_G とする。ウォーターマークが埋め込まれていない場合(帰無仮説 H0)、各トークンが独立にグリーンリストに入る確率は γ なので:
- 期待値: E[|s|_G | H0] = γT
- 標準偏差: σ = √(T·γ·(1-γ))
- z統計量: z = (|s|_G - γT) / σ
ウォーターマーク入りテキストでは、グリーントークンの出現比率が γ を大きく上回るため、z値が正に大きくなる。
検出力の計算例
γ = 0.5, δ = 2.0, T = 100 トークンの場合:
- H0 下の期待グリーン数: 50
- ウォーターマーク下の実測グリーン数: 約 75〜80
- z値: (75 - 50) / √(100 × 0.25) = 25 / 5 = 5.0
- p値: < 3 × 10^-7(極めて有意)
論文以降の発展
改良型 Green/Red List
Kirchenbauer の原論文以降、多数の改良版が提案されている。
- Unbiased Watermark(Hu et al. 2023): logit 修正後の期待値を元の分布と一致させることで、品質劣化をゼロに近づける方式
- Multi-key Watermark: 複数の秘密鍵を用いて複数のグリーンリスト分割を同時に適用し、頑健性を向上
- Adaptive δ: テキスト各位置のエントロピーに応じて δ を動的調整(高エントロピー位置で δ を増加、低エントロピー位置で δ を減少)
- Left-hash vs Self-hash: コンテキストハッシュに現在のトークン自身を含めるか否かの変種
SynthID-Text との関係
Google DeepMind の SynthID-Text は Green/Red List の発展型と位置づけられる。Tournament Sampling という独自のサンプリング手法を用いることで、logit 加算ではなく「複数のサンプル候補からスコアの高いものを選択する」形でバイアスを導入し、品質劣化をさらに低減している。
実装リポジトリ
| リポジトリ | 言語 | 方式 | メンテナンス状況 |
|---|---|---|---|
| jwkirchenbauer/lm-watermarking | Python | Green/Red List (原著) | 活発(2026年更新) |
| THU-BPM/MarkLLM | Python | 9方式統合 | 活発 |
| google-deepmind/synthid-text | Python | SynthID-Text | 活発 |
| ChanMinLee/WaterBench | Python | ベンチマーク | 中程度 |
よくある質問(FAQ)
Q1: Green/Red List方式はどのLLMにも適用できるか? A: トークナイザとlogitにアクセスできるモデルであれば適用可能。Hugging Face Transformers 互換のモデル(Llama, Mistral, Qwen, Phi等)には lm-watermarking ライブラリで直接適用できる。APIのみ提供のモデル(GPT-4, Claude等)にはユーザー側からの適用は不可能。
Q2: γ = 0.5 以外の分割比率を使う理由はあるか? A: γ = 0.25 にすると少数のグリーントークンで高い検出信号を得られるため、短いテキストでの検出精度が向上する。逆に γ = 0.75 では品質への影響がさらに低減するが、検出に必要なトークン数が増加する。用途に応じた調整が可能。
Q3: Green/Red List方式の特許状況はどうなっているか? A: Kirchenbauer論文の手法自体は学術論文として公開されており、コードもMITライセンスのOSSとして利用可能。ただしGoogleのSynthID-Textには関連特許が出願されている。商用利用の際はライセンス条件を確認する必要がある。
まとめ
- Green/Red List方式はKirchenbauer et al. 2023が提案したLLMウォーターマークの基本アルゴリズム
- 秘密鍵+コンテキストハッシュで語彙を2群に分割し、グリーン側のlogitに δ を加算
- γ = 0.5, δ = 2.0, k = 1 が標準ハイパーパラメータ
- z検定で検出(z > 4.0 で FPR 0.003%)
- Soft Watermark が実用推奨、Hard Watermark は研究用
- SynthID-Text 等の後続研究の基盤技術として広く参照されている