DBC Tech Academy / AI / 中級

AI テキストの電子透かしの仕組みSynthID Text とグリーンリスト方式で、検出できる長さと消える条件を見極める

LLM が書いた文章を、あとから「この文章は自社のモデルが書いた」と確かめる技術が電子透かし (Watermark) です。画像の透かしと違い、文章には印を書き込める余白がありません。LLM の透かしは、モデルが次の単語を選ぶときに、鍵で決めた側の単語をわずかに選びやすくし、その偏りを文章全体に散らします。人間には読み分けられず、鍵を持つ側だけが統計で検出できます。この講座では、透かしの方式を一覧したうえで、グリーンリスト方式、文章の質を変えない方式、Google が Gemini に実装した SynthID Text の 3 つを掘り下げ、何トークンあれば検出できるか、言い換えや翻訳でどこまで消えるか、AI 判定ツールと何が違うかを扱い、自社で透かしを入れるかを判断するところまで進みます。

transformers / WatermarkDetector
# 透かし入りで生成した文章を検出にかける detector = WatermarkDetector(model_config=model.config, device="cpu", watermarking_config=watermarking_config) detector(out, return_dict=True) # 1) 透かし入りの文章 WatermarkDetectorOutput( num_tokens_scored=[186], num_green_tokens=[98], green_fraction=[0.527], z_score=[8.72], p_value=[4.7e-22], prediction=[True]) # 2) 人間が書いた同じ話題の文章 WatermarkDetectorOutput( num_tokens_scored=[172], num_green_tokens=[41], green_fraction=[0.238], z_score=[-0.35], p_value=[0.54], prediction=[False])

緑の割合は、透かしなしなら設定した 25% 前後に留まり、透かし入りでは 50% を超えます。検出器が返すのは「印があるか」ではなく、偏りが偶然で起きる確率です。

呼び出し方と出力の形式は Hugging Face transformers のドキュメントに基づき、数値は既定の設定(緑の割合 0.25、強さ 2.0)での例です。p 値は検出器の実装どおり正規分布の近似式で計算しています

01 / Bottom line

結論

この講座で最初に据える軸を先に言い切ります。透かしの検出結果を読むときも、透かしを入れるかを決めるときも、この 1 文から判断が始まります。

偏り印ではない

透かしは、生成した側が鍵を持って入れたときにだけ、十分な長さとばらつきのある文章で、統計的な確からしさとして検出できる。

LLM の透かしは、文章の特定の場所に埋まった印ではありません。1 トークンごとの選び方のわずかな偏りが、文章全体に散らばっています。1 トークンだけを見ても何も分かりませんが、数十から数百トークンを数えると、偏りが偶然では説明できない大きさになります。検出器が返すのは「透かしがある」という事実ではなく、「透かしなしでこの偏りが起きる確率は 10 万分の 3 以下である」という確からしさです。

この軸から導ける 3 つの判断 長さ 短い文章・定型文・コードでは、確からしさが上がらない 言い換え 言い換え・翻訳・別モデルでの書き直しで、偏りは薄まる 不在 透かしが見つからないことは、人間が書いた証拠にならない

透かしを入れられるのは、モデルが次のトークンを選ぶ処理を握っている側だけで、検出できるのも鍵を持つ側だけです。API で他社のモデルを使っているなら、透かしの有無は提供者が決め、検出の手段も提供者が握っています。この前提が、09 各社の導入状況と11 自社で透かしを入れるかの判断の出発点になります。

鍵

どの単語を選びやすくするかは、秘密の鍵と直前のトークンで決まります。鍵がなければ、偏りがあることも分かりません。

長さ

偏りは 1 トークンあたりでは小さいので、数えるトークンが多いほど確からしさが上がります。必要な長さは方式と設定で変わります。

ばらつき

次の単語の候補が多い場面でしか、偏りは入りません。答えが 1 つに決まる事実や定型句では入らないので、エントロピーが効きます。

確からしさ

検出結果は z 値と p 値で表れます。閾値を上げると人間の文章を誤って判定する率が下がり、透かし入りを見逃す率が上がります。

02 / Method map

透かしの方式の全体像

テキストの透かしは 2022 年末から研究が急増し、方式は数十に分かれています。ここでは、透かしを入れる時点と仕組みで 8 つに分けて一覧します。実務で検討の対象になるのは、生成時に入れる方式です。

入れる時点と仕組み方式どう入れるか検出に要るもの言い換えへの強さ実用度
生成時: ロジットを偏らせるグリーンリスト方式
Kirchenbauer ら 2023、KGW とも呼ぶ
直前のトークンと鍵から語彙を緑と赤に分け、緑の単語の点数を底上げする鍵とトークナイザ。モデル本体は要らない中高(transformers に標準搭載)
生成時: ロジットを偏らせるUnigram 方式
Zhao ら 2023
緑と赤の分け方を直前のトークンによらず固定する鍵とトークナイザ強中(鍵が推定されやすい)
生成時: 乱数の引き方を決めるAaronson 方式
Aaronson 2022
次のトークンを選ぶときの乱数を、鍵と直前のトークンから作る鍵とトークナイザ中高(OpenAI の textGrain の土台)
生成時: 乱数の引き方を決めるKuditipudi らの方式
2023
鍵から作った乱数の列を、文章の先頭から順に使う鍵の乱数列と、ずれを許す照合の計算強中(検出の計算が重い)
生成時: 乱数の引き方を決める検出不能な透かし
Christ ら 2023
暗号の手法で、鍵なしでは出力の分布の違いを見分けられないように入れる鍵弱低(理論の研究)
生成時: 候補の選び方を決めるSynthID Text
Google DeepMind 2024
候補を複数引き、鍵つきの採点で勝ち抜き戦をさせて選ぶ鍵と、学習させた検出器中高(Gemini で本番運用)
生成時: 文の意味で入れる文単位の透かし
SemStamp(Hou ら 2023)など
文の意味を表すベクトルの空間を鍵で区切り、許した区画に入る文が出るまで生成し直す鍵と、文をベクトルにする埋め込みモデル強低(生成が数倍遅い)
生成後: 文字を埋める見えない文字の埋め込み幅ゼロの文字や、形の似た別の文字を文中に混ぜる文字コードを見るだけ極弱実用外

表の読み方の要点は 3 つです。1 つ目は、生成時に入れる方式はどれも「次のトークンの選び方」に手を入れていることです。モデルは次のトークンの候補ごとに点数(ロジット (logit))を出し、それを確率に直して 1 つを選びます。グリーンリスト方式は点数を、文章の質を変えない方式は乱数を、SynthID Text は候補の選び方を、鍵で操作します。

2 つ目は、言い換えへの強さと鍵の守りやすさが引き換えになっていることです。Unigram 方式は緑の単語を固定することで言い換えに強くなりましたが、固定されているぶん、出力をたくさん集めれば緑の単語の一覧を推測できます。逆に、直前のトークンで緑が変わる方式は推測されにくい代わりに、言い換えで直前のトークンが変わると偏りが崩れます。

3 つ目は、方式を公開して本番で動いているものは限られることです。方式を論文とオープンソースで公開したうえで大規模に運用されているのは SynthID Text です。2026 年に導入を発表した Anthropic は方式を公開しておらず、OpenAI の textGrain は Aaronson 方式と同じ系統です(09 各社の導入状況)。グリーンリスト方式は Hugging Face transformers に標準で組み込まれ、自前のモデルで誰でも試せます。この 2 つと、品質を変えないという別の発想の方式を、03 グリーンリスト方式から 05 SynthID Textで掘り下げます。文単位の透かしは言い換えに強い一方で、1 文ごとに条件を満たすまで生成をやり直すため、応答の速さが求められる製品にはまだ向きません。

見えない文字を埋める方式

幅ゼロのスペース(U+200B)のような画面に表示されない文字を単語の間に混ぜたり、ラテン文字の a をキリル文字の а に置き換えたりして、目に見えない印を付ける方式です。仕組みが単純で、モデルに手を入れずに後から足せます。

実用に耐えないのは、消えやすく、消しやすいからです。テキストの正規化、プレーンテキストへの貼り付け、入力欄での不要な文字の除去で消え、存在が知られれば一括置換で消せます。文字コードを表示するエディタや grep -P '[\x{200B}-\x{200D}\x{FEFF}]' で誰でも見つけられます。

手元の文章にこの種の文字が見つかったときは、透かしの可能性と同時に、コピー元の Web ページや文書作成ツールが混ぜた可能性も考えます。

03 / Green list

グリーンリスト方式

LLM の透かしの基本形です。Kirchenbauer らが 2023 年に ICML で発表した方式で、著者の頭文字から KGW とも呼ばれます。仕組みが単純で、検出にモデル本体が要らず、以後の研究の多くがこの方式との比較で書かれています。

緑と赤に分けて、緑を選びやすくする

モデルが次のトークンを選ぶたびに、直前のトークンと秘密の鍵から乱数の種を作り、語彙全体を緑のリスト (green list) と赤のリストにランダムに分けます。緑に入れる割合を γ(ガンマ)と呼びます。γ = 0.25 なら、語彙の 4 分の 1 が緑です。

そのうえで、緑のトークンのロジットに一定の値 δ(デルタ)を足してから確率に直します。δ = 2 なら、緑のトークンは選ばれる重みが e² ≈ 7.4 倍になります。赤のトークンも選べるので、文脈上どうしても必要な単語が赤に入っていても、その単語は選ばれます。この「赤も選べる」形をソフト方式と呼び、赤を完全に禁じるハード方式より文章が崩れにくいため、実装ではソフト方式が使われます。

緑と赤の分け方は直前のトークンが変わるたびに変わるので、同じ単語でも、ある場所では緑、別の場所では赤になります。読み手から見ると、特定の単語が多いわけではなく、文章は自然なままです。

生成の 1 ステップ

  1. 直前のトークンと鍵から、乱数の種を作る
  2. 種から、語彙のうち γ の割合を緑に選ぶ
  3. 緑のトークンのロジットに δ を足す
  4. 確率に直して、通常どおり 1 トークンを選ぶ

鍵は 1 で使う乱数の種の材料です。鍵がなければ、どのトークンが緑だったかを誰も再現できません。

図: 候補が多い場面と、答えが決まっている場面

候補が多い場面(エントロピーが高い)

直前まで: 今日の午後は γ = 0.5、δ = 2

散歩22%5%
読書20%35%
買い物18%32%
昼寝16%4%
映画12%21%
掃除12%3%

緑が選ばれる確率の合計: 50% → 88%

答えが決まっている場面(エントロピーが低い)

直前まで: 日本の首都は東 γ = 0.5、δ = 2

京99%93%
北0.5%3.5%
側0.5%3.5%

緑が選ばれる確率の合計: 1% → 7%。「京」が赤でも、ほぼ確実に「京」が選ばれます。

この場面では偏りがほとんど入らず、文章も壊れません。透かしは、候補が多い場面で稼いだ偏りの合計で検出されます。

透かしを入れる前入れた後(緑)入れた後(赤)

確率の値は仕組みを示すための例で、δ を足した後の確率は図の値から計算しています。実際のモデルの候補の数と確率は、文脈とモデルで変わります。

検出: 緑の数を数えて z 値にする

検出する側は、検査する文章をトークンに分け、各トークンについて直前のトークンと鍵から緑のリストを作り直し、そのトークンが緑だったかを数えます。モデル本体は要りません。透かしのない文章なら、緑の割合は偶然に任せて γ の付近に留まります。透かし入りなら γ を大きく超えます。

この差を、人間の文章で起きる偶然のばらつきと比べた値が z 値 (z-score) です。z 値が大きいほど、偶然では起きにくい偏りです。z 値を、透かしなしでその偏り以上が起きる確率に直したものが p 値 (p-value) です。

原論文は閾値を z = 4 に置いています。z = 4 を超える偏りが偶然で起きる確率は約 0.003%(10 万件に 3 件)で、これが人間の文章を誤って透かし入りと判定する偽陽性率 (false positive rate) の理論値になります。閾値を上げれば偽陽性は減り、そのぶん透かし入りの短い文章を見逃します。transformers の検出器は既定の閾値を z = 3 にしているので、使う場面に合わせて設定し直します。

z 値の計算

z = (緑の数 − γ × T) / √(T × γ × (1 − γ)) // T: 数えたトークン数 // 例: γ = 0.25、T = 186、緑 98 z = (98 − 46.5) / √(186 × 0.25 × 0.75) = 51.5 / 5.91 = 8.72 // 人間の文章: T = 172、緑 41 z = (41 − 43) / 5.68 = −0.35

ヒーローに置いた 2 つの出力は、この計算をそのまま返しています。分母が √T で増えるので、同じ偏りでも、長い文章ほど z 値が大きくなります。

γ と δ の決め方

δ を大きくすると偏りが強くなり、短い文章でも検出できるようになりますが、緑に寄せるために本来なら選ばれない単語が選ばれ、文章の不自然さを表す perplexity が上がります。原論文の実験では γ = 0.5、δ = 2 で、約 200 トークンの文章の 98.4% を z = 4 で検出しながら、perplexity の上昇は小さく抑えられていました。原論文は、強い設定なら 25 トークンほどの短い文章でも検出できるとしています。γ は小さいほど 1 トークンあたりの偏りの情報が増えますが、緑の候補が足りない場面が増えます。transformers の既定値は γ = 0.25、δ = 2.0 で、まずはこの値から自社の出力で測り始めます。

δ を上げすぎると出力が壊れます。コード、SQL、固有名詞、数値のように 1 文字違うと意味が変わる出力では、緑に寄せた結果として誤った識別子や関数名が選ばれます。こうした出力を返す製品で δ を上げるときは、透かしなしの出力と並べて、構文の誤りと事実の誤りの率を測ってから決めます。

検出のときは、同じ「直前のトークンとトークン」の組が繰り返し出てきたら 1 回だけ数えるようにします。定型句の繰り返しや引用で同じ組が何度も現れると、その組がたまたま緑だった場合に緑の数が水増しされ、人間の文章でも z 値が上がるからです。transformers の検出器では ignore_repeated_ngrams=True で指定します。

04 / Distortion-free

文章の質を変えない方式

グリーンリスト方式は確率そのものを書き換えるので、δ に応じて文章の質がわずかに落ちます。これに対し、確率には手を付けず、確率どおりに選ぶときの乱数の引き方だけを鍵で決める方式があります。英語の文献では distortion-free(分布を歪めない)方式と呼ばれます。

Aaronson 方式: 乱数を鍵で作る

通常の生成では、モデルが出した確率に従ってサイコロを振り、次のトークンを選びます。このサイコロを、鍵と直前のいくつかのトークンから作った疑似乱数に置き換えるのが、OpenAI に在籍していた Scott Aaronson が 2022 年に構想を公表し、のちの講演で式を示した方式です。

具体的には、語彙のトークンごとに鍵から 0 と 1 の間の乱数 r を作り、確率を p として r1/p が最大になるトークンを選びます。乱数が本当にでたらめなら、この選び方は確率 p どおりに選ぶのと数学的に同じになります(Gumbel トリックと呼ばれる性質です)。1 トークンごとに見れば、出力の分布は透かしなしのモデルとまったく同じです。

検出する側は、鍵から同じ乱数を作り直し、実際に選ばれたトークンの r が大きい側に偏っているかを数えます。透かし入りの文章では、選ばれたトークンの r が 1 に近い値に偏ります。

Aaronson 方式の要点

// 生成 r_i = 鍵つき乱数(直前の数トークン, トークン i) 選ぶトークン = argmax_i r_i ^ (1 / p_i) // 検出 スコア = Σ −ln(1 − r_選ばれたトークン) // 透かしなしなら平均 T、透かし入りなら T を大きく超える

乱数を作る材料に直前のトークンを使うので、グリーンリスト方式と同じく、直前のトークンが変わると偏りが崩れます。

代償: 同じ質問に同じ答えが返る

この方式では、直前のトークンが同じなら乱数も同じになるので、同じプロンプトには毎回同じ応答が返ります。1 回ごとの分布は変わらなくても、複数回の応答の多様性が失われます。ブレインストーミングや「別の案を出して」のような使い方では、この性質が品質の低下として表れます。文章の質を変えないという性質は「1 回の応答の分布」についての保証であり、「何度も呼んだときの振る舞い」まで含めた保証ではない点が判断の分かれ目になります。

Kuditipudi らの方式: 鍵の乱数列を先頭から使う

Stanford の Kuditipudi らは 2023 年に、乱数の材料から直前のトークンを外す方式を示しました。鍵から十分に長い乱数の列を作っておき、生成の 1 トークン目には列の 1 番目、2 トークン目には 2 番目、という順に使います。生成のたびに列の読み始めの位置をランダムにずらすので、同じプロンプトでも応答は毎回変わり、多様性の問題が解けます。

検出する側は、文章と鍵の乱数列を、ずれや挿入・削除を許しながら突き合わせます(編集距離の考え方を使った照合です)。直前のトークンに依存しないので、一部の単語を言い換えたり、文を挿入したりしても、残った部分が乱数列と対応していれば検出できます。論文では、トークンの 40〜50% を無作為に書き換えても、35 トークンの文章から有意水準 1% で検出できることを示しています。

判断の分かれ目

  • 多様性を保ちながら品質も変えたくないなら、Kuditipudi らの方式が候補になります。
  • 検出の計算が重いことが代償です。読み始めの位置が分からないので、ずれを許す照合を位置ごとに試し、偶然との比較には乱数列を入れ替えて何度も計算し直します。大量の文章を毎日検査する用途では、この計算量が運用費になります。
  • 鍵の乱数列の長さを超える文章には、列を繰り返して使うことになり、そのぶん推測されやすくなります。

この系統の延長に、Christ らが 2023 年に示した「検出不能な透かし」があります。暗号の手法を使い、鍵を持たない人には、どれだけ出力を集めても透かし入りと透かしなしの違いを見分けられないことを理論的に証明した方式です。ただし透かしを入れるにはエントロピーがある程度たまるまで待つ必要があり、言い換えへの強さは弱いため、現在は透かしで何が可能かの限界を示す研究として読まれています。

05 / SynthID Text

SynthID Text

Google DeepMind が開発し、Gemini アプリと Web 版の出力に実装している方式です。2024 年 10 月に Nature に論文が掲載され、同時に Hugging Face transformers と Google の Responsible Generative AI Toolkit でオープンソースとして公開されました。大規模な利用者向けサービスで本番運用されていることが公表された、最初のテキストの透かしです。

トーナメントサンプリング

SynthID Text の中心はトーナメントサンプリング (Tournament sampling) です。モデルの確率に従って次のトークンの候補を複数引き、その候補どうしで勝ち抜き戦をさせて、最後に残った 1 つを出力します。

各回戦では、鍵と直前の数トークンから作った採点関数 g が、候補のトークンに 0 か 1 の点を付け、点の高い方が勝ちます。同点なら無作為に決めます。回戦ごとに別の採点関数を使い、論文の既定の構成では 30 回戦を重ねます。勝ち残ったトークンは、多くの採点関数で 1 を取ったトークンなので、文章全体で見ると g の平均が 0.5 より高い側に偏ります。

候補はモデルの確率どおりに引いているので、確率の低い単語を無理に選ぶことは起きにくく、選ばれるのは、モデルがもともと選びうる候補の中の 1 つです。構成によっては、1 回の応答の分布を変えない形にも設定できます。

検出

検出する側は、鍵から同じ採点関数を作り直し、文章の各トークンが各回戦の採点関数で何点を取るかを集めます。最も簡単な検出は g の平均で、0.5 を大きく超えれば透かし入りです。

Google は、トークンごとの点の出方から透かし入りかどうかの確率を出すベイズ型の検出器 (Bayesian detector) も公開しています。こちらは自社のモデルで生成した透かし入りの文章と透かしなしの文章を用意して、検出器を学習させる必要があります。モデルと鍵の組み合わせごとに学習させるもので、出来合いの検出器はありません。

図: 8 つの候補から 1 つを選ぶ 3 回戦

候補(確率どおりに 8 回引く)
読書
散歩
読書
買い物
映画
昼寝
散歩
買い物
1 回戦(g1)
読書1 対 0
買い物1 対 1、同点で抽選
映画1 対 0
買い物1 対 0
2 回戦(g2)
買い物1 対 0
映画1 対 1、同点で抽選
3 回戦(g3)→ 出力
映画1 対 0

勝ち残った候補の下の数字は、その回戦の採点関数が勝者と敗者に付けた点です。同じトークンには、同じ回戦では常に同じ点が付きます。回戦の数を 3 に減らして、勝ち抜きの流れを示しています。候補の数は 2 の回戦数乗で、論文の既定の構成では回戦数がより多く、採点関数の材料にする直前のトークンの数も設定で決めます。

Gemini での実運用

Nature 論文では、Gemini の本番環境で約 2,000 万件の応答に SynthID Text を入れ、利用者が付ける高評価・低評価の率を透かしなしの応答と比べています。両者に有意な差は見られませんでした。透かしを入れても、利用者が品質の違いを感じないことを大規模に示した実験です。生成の遅延についても、候補を複数引く処理は推論の中で並列に行えるので、増加はわずかです。

同じ論文と Google の説明は、限界も明記しています。事実を問う質問への応答のように答えが 1 つに決まる文章では検出力が下がり、徹底的に書き直された文章や他の言語に翻訳された文章では検出の確からしさが大きく下がります。03 グリーンリスト方式で見たエントロピーの制約は、方式を変えても残ります。

transformers での設定

from transformers import ( AutoModelForCausalLM, SynthIDTextWatermarkingConfig) cfg = SynthIDTextWatermarkingConfig( keys=[654, 400, 836, ...], # 回戦ごとの鍵 ngram_len=5) # 直前 4 + 自身 out = model.generate(**inputs, watermarking_config=cfg, do_sample=True, max_new_tokens=200)

keys は回戦の数だけ並べる整数で、これが鍵そのものです。サンプル実装の値をそのまま使うと、誰でも同じ採点関数を作れます。

鍵はシークレットとして管理します。ドキュメントやサンプルの鍵をそのまま本番に使うと、第三者が自社の透かしを検出・偽装できます。鍵はパスワードや API キーと同じ扱いでシークレット管理の仕組みに置き、ソースコードやリポジトリに書かないようにします。

06 / Simulator

検出力を決める 3 つのつまみ

透かしが検出できるかは、文章の長さ、文章のばらつき(エントロピー (entropy))、透かしの強さの 3 つで決まり、言い換えた割合で薄まります。グリーンリスト方式を例に、つまみを動かして判定が変わる分かれ目を確かめてみましょう。

-z 値(この 1 回)
-p 値
-検出率(同じ条件で生成を繰り返したとき)
-確実に検出するのに要る長さ

透かし入りの文章(1 マス = 1 トークン)-

緑赤言い換えで偏りが崩れた位置

同じ長さの人間の文章-

文章の不自然さの目安-

200
2.0
0.25

After generation

0%

判定の閾値は z = 4(偽陽性率 約 0.003%)に固定しています。言い換えたトークンは、そのトークン自身と、それを直前のトークンとして使う次のトークンの 2 か所で偏りを崩します。言い換えの割合を上げると、残る偏りが割合の 2 乗で減っていくのはこのためです。

この画面は、エントロピーの高い位置でだけ偏りが入り、言い換えた位置とその次の位置で偏りが消えるという仕組みを、確率のモデルで再現しています。検出に要るトークン数と文章の不自然さの値は、モデル・トークナイザ・文章の内容で変わるので、自社の出力で測って確かめます。日本語の 1 トークンあたりの文字数もトークナイザで異なります。

動かして確かめること

長さを短くする

長さを 40 トークン前後まで下げると、透かし入りでも z 値が 4 に届かない回が出てきます。問い合わせへの短い返信、見出し、1 行の要約が、透かしで判定しにくい理由です。

文章の種類をコードにする

同じ長さでも、偏りが入る位置が減るので z 値が下がります。必要な長さが自由な作文の 10 倍近くになることを確かめてみましょう。δ を上げて補うと、不自然さの目安が上がります。

言い換えを増やす

言い換えの割合を 30% にすると、200 トークンでは検出が揺らぎ、長さを 400 トークン以上に伸ばすと再び検出できます。言い換えで透かしは消えるのではなく、薄まります。

人間の文章を見る

人間の文章の緑の割合は、何度生成し直しても γ の付近に留まります。z 値がときどき 2 前後まで振れることも確かめてみましょう。閾値を低く置くと、この振れが誤判定になります。

07 / Robustness

言い換え・翻訳で透かしは消えるか

透かしを入れる側が最も気にするのは、利用者が文章に手を加えたときにどこまで残るかです。答えは06 検出力を決める 3 つのつまみで見たとおり「長さ次第で薄まる」で、攻撃の種類ごとに薄まり方が違います。

手の加え方何が起きるか透かしの残り方
人手による部分的な修正数語の差し替え、文の追加・削除修正が 1 割程度なら、数百トークンの文章では検出が残ります
別の LLM による言い換え言い換え専用のモデルや、別の LLM に「書き直して」と頼む。言い換え攻撃 (paraphrasing attack) と呼ぶ大半のトークンの組が入れ替わり、短い文章ではほぼ消えます。長い文章では、元の語順が残った部分から検出できることがあります
翻訳の往復日本語 → 英語 → 日本語のように訳し戻すトークンの並びがほぼすべて入れ替わるので、トークン単位の透かしは消えます
絵文字の挿入と削除モデルに「単語の間に絵文字を入れて」と頼み、あとで絵文字を消す生成時の直前のトークンが絵文字になるので、絵文字を消すと検出時の直前のトークンがずれ、直前のトークンを材料にする方式の透かしは消えます

言い換えへの強さを測った研究は、2 つの方向の結果を出しています。Krishna らは 2023 年に、言い換え専用のモデル DIPPER を使うと、偽陽性率 1% の条件でグリーンリスト方式の検出率が 100% から 57% に下がることを示しました。一方、グリーンリスト方式の著者らは同じ年に、人間が強く言い換えた文章でも、偽陽性率 10 万分の 1 の条件で、平均 800 トークンほどあれば検出できることを示しています。文章が十分に長ければ、言い換えの後でも検出が残ります。言い換えで偏りは薄まりますが、元の文章の一部の語順は残り、その部分の偏りは数えれば積み上がるからです。2 つの結果は矛盾しておらず、どちらも「短い文章では消え、長い文章では残る」という06 検出力を決める 3 つのつまみの分かれ目を、別の側から測っています。

翻訳の往復と絵文字の挿入は、言い換えより確実に透かしを消します。どちらも利用者が意図すれば簡単にでき、OpenAI が 2024 年に透かしの公開を見送った理由の 1 つにもなりました(09 各社の導入状況)。透かしは、手を加えるつもりのない利用者の出力を見分ける技術であり、消そうとする人から守る技術ではありません。

鍵の推定による偽装

逆方向の攻撃もあります。ETH Zürich の Jovanović らは 2024 年に、透かし入りの API に大量の質問を投げて出力を集めると、どの単語がどの文脈で緑になりやすいかを推定でき、その推定から人間が書いた文章を透かし入りに見せかける偽装 (spoofing) と、透かし入りの文章から透かしを抜く処理の両方が、高い成功率でできることを示しました。必要な費用は API の利用料で 50 ドル未満、偽装と除去の成功率は平均で 8 割を超えました。

偽装ができると、「この文章には当社の透かしがあるので当社のモデルが書いた」という主張が成り立たなくなります。直前のトークンの数を増やす、鍵を定期的に替えるといった対策で推定は難しくなりますが、なくなりはしません。

08 / Detectors

AI 判定ツールとの違い

「AI が書いた文章か」を見分けるもう 1 つの方法が、文章の癖からあとで推測する AI 判定ツール (AI text detector) です。GPTZero や Turnitin の AI 検出機能が代表例です。透かしとは、判定の根拠も精度もまったく違います。

電子透かしAI 判定ツール
判定の根拠生成時に鍵で入れた偏りAI の文章に多い言い回し・予測しやすさ(perplexity の低さ)などの癖
判定できる文章鍵を持つモデルが透かし入りで生成した文章だけどのモデルの文章でも判定を試みられる
偽陽性率閾値で理論的に決められる(z = 4 で約 0.003%)理論値はなく、文章の種類と書き手で大きく変わる
判定に必要な準備生成する側が透かしを入れておくこと不要。あとから誰でもかけられる
誤判定されやすい文章定型句の繰り返し(数え方で抑えられる)平易な語彙で書かれた文章、非ネイティブの書き手の文章

AI 判定ツールの精度の問題は、OpenAI 自身が示しています。OpenAI は 2023 年 1 月に AI 判定ツールを公開しましたが、AI が書いた文章のうち「AI が書いた可能性が高い」と判定できたのは 26% で、人間の文章の 9% を誤って AI 製と判定していました。OpenAI は同年 7 月に、精度が低いことを理由にこのツールを取り下げています。

Stanford の Liang らは 2023 年に、非ネイティブの書き手が書いた TOEFL の英作文 91 本を 7 つの AI 判定ツールにかけ、平均で 61% が AI 製と誤判定され、97% は少なくとも 1 つのツールで AI 製と判定されることを示しました。語彙が平易で予測しやすい文章ほど「AI らしい」と判定される仕組みなので、書き手の属性で誤判定の率が偏ります。

透かしの強みは、偽陽性率を閾値で指定できることです。z = 4 を閾値にすれば、人間の文章を誤って判定する率は書き手によらず約 0.003% に抑えられます。代わりに、透かしを入れたモデルの文章しか判定できません。2 つは置き換えの関係ではなく、答えられる問いが違います。透かしは「この文章は自社のモデルが書いたか」に答え、判定ツールは「この文章は AI が書いたらしいか」を推測します。

判定結果を人の評価に使うとき

検出結果だけで個人の不正を断定しないようにします。透かしの偽陽性は小さくてもゼロではなく、偽装も可能です。AI 判定ツールの誤判定はさらに大きく、書き手の属性で偏ります。学生の課題や応募書類、社員の報告書を判定にかけるときは、p 値と数えたトークン数を記録に添え、本人への確認や作成過程の記録と合わせて判断します。

判定にかけた文章、判定の設定(閾値、鍵の版、検出器の版)、結果、数えたトークン数は、あとから判定の根拠を説明できるようにすべて記録に残します。

09 / Adoption

各社の導入状況

2024 年までは、テキストの透かしを本番で入れていたのは Google だけでした。2026 年 8 月に EU AI Act の表示義務が適用されると、Anthropic と OpenAI が相次いで導入を発表し、主要な事業者の出力の多くに透かしが入る状態に変わりました。

事業者テキストの透かし対象検出器
GoogleSynthID Text(2024 年から運用)。方式を論文で公開し、オープンソースで配布Gemini アプリと Web 版の出力2025 年 5 月に、画像・動画・音声・テキストを判定する SynthID Detector を発表。早期テスターから順に提供
Anthropic2026 年 8 月 11 日に発表。方式は非公開。画像などのファイルには、来歴を示す業界標準 C2PA の署名つきメタデータを付ける(10 法規制の動向)2026 年 8 月 2 日以降に公開した Claude のモデルから。API、Claude、Claude Code などすべての提供経路で、全世界規制当局・法執行機関・研究者など、審査を通った組織向けの非公開プレビュー
OpenAItextGrain(2026 年 10 月 5 日に発表)ChatGPT と Codex は EU の利用者に順次展開。API は全世界で任意(既定はオフ)当面は承認された研究者と専門組織にだけ提供
Meta、Microsoft、Mistral ほかEU の表示の行動規範に署名。テキストの透かしの公式発表はなし(2026 年 10 月時点)--

OpenAI の経緯は、透かしの限界と事業上の判断が交わる例です。OpenAI は 2022 年から透かしを開発し、2024 年 8 月の Wall Street Journal の報道では、十分な長さの文章なら 99.9% の精度で検出できる段階にありました。それでも公開を見送った理由として、OpenAI は 3 つを挙げています。翻訳や別のモデルでの書き直し、単語ごとに特殊な文字を挟ませて後で消す操作で簡単に回避できること、透かしを入れると英語を母語としない利用者の AI の利用が不当に疑われかねないこと、そして利用者の約 3 割が「OpenAI だけが透かしを入れるなら利用を減らす」と答えたことです。

2026 年 10 月に発表した textGrain は、この判断を EU の規制を受けて改めたものです。04 文章の質を変えない方式の Aaronson 方式と同じ系統の選び方を土台に、文章のエントロピーに応じて透かしの強さを配分する方式です。公表された検出率は標準の条件で約 92% で、単語の 1 割を同義語に置き換えると 66% に下がり、短い文章、数学の解答、翻訳された文章では効きにくくなります。06 検出力を決める 3 つのつまみで確かめた分かれ目が、そのまま製品の数字に表れています。

Anthropic と OpenAI はどちらも、透かしが見つからないことは人間が書いた証拠にならないと明記しています。01 結論で据えた軸は、事業者自身の説明でもあります。

読者の判断に効く 2 つの事実

1 つ目は、検出器が手元にないことです。Claude の API で生成した文章には透かしが入っていますが、その文章が Claude の出力かを自社で確かめる手段は、2026 年 10 月時点では公開されていません。透かしは事業者と、事業者が認めた組織のための仕組みとして運用されています。

2 つ目は、オープンモデルには構造上の制約があることです。重みを配布したモデルは、配布先で透かしの処理を外して動かせます。透かしは生成の処理に入れるものであり、重みに焼き込むものではないからです。オープンモデルの出力を透かしで見分けることは、配布元が望んでも保証できません。

10 / Regulation

法規制の動向

各国の規制は「AI が生成したことを示す」ことを求めていて、テキストの透かしはその手段の 1 つという位置づけです。テキストは画像・音声より透かしが難しいため、多くの規制は人が読める表示やメタデータと組み合わせて要件を組んでいます。

地域規則適用テキストへの要求
EUAI Act 第 50 条 2 項2026-08-02テキストを含む合成コンテンツを生成する AI システムの提供者は、出力を機械が読める形でマークし、AI が生成したと検出できるようにする。技術的に可能な範囲で、効果的・相互運用可能・頑健・信頼できる方法で行う。2026 年 8 月 2 日より前に市場に出したシステムは、改正規則(Digital Omnibus)で 2026 年 12 月 2 日まで猶予
中国人工智能生成合成内容標識辦法、国家標準 GB 45438-20252025-09-01人が読める表示として、テキストの冒頭・末尾・途中に文字や記号で AI 生成であることを示す。機械が読める表示として、ファイルのメタデータへの埋め込みを義務づけ、内容そのものへの電子透かしを推奨する
韓国AI 基本法(第 31 条、施行令第 23 条)2026-01-22生成 AI の出力に AI 生成である旨を表示する。透かしのような機械が読める方法も認めるが、その場合も文字か音声での通知を少なくとも 1 回行う。罰則の適用には 1 年の猶予
米国カリフォルニア州AI Transparency Act(SB 942)2026-08-02透かしなどの表示の対象は画像・動画・音声で、テキストは対象外
日本AI 推進法、AI 事業者ガイドライン2025-09-01AI 推進法に透かしの義務と罰則はない。ガイドラインは、技術的に可能な場合に電子透かしなどの来歴の仕組みを導入することを、事業者の努力目標として挙げている

EU の第 50 条 2 項が、テキストの透かしを最も直接に求める規定です。欧州委員会は 2026 年 6 月に、表示の方法を具体化した行動規範 (Code of Practice) の最終版を公表し、AI の提供者を中心に約 190 の組織が署名しました。行動規範は、提供者がマーク付けと検出の仕組みを用意することと、導入者がディープフェイクと公共の関心事に関するテキストに表示を付けることを、別々の節で定めています。09 各社の導入状況の Anthropic と OpenAI の発表は、この適用日に合わせたものです。

テキストの来歴を示すもう 1 つの手段として、画像や動画の来歴(誰がどのツールで作り、どう編集したか)を署名つきのメタデータで示す業界標準 C2PA の仕様が 2025 年 12 月の版 2.3 でプレーンテキストに対応しました。Unicode の異体字セレクタという、表示に影響しない文字を使って来歴情報を文章に埋め込む方式です。02 透かしの方式の全体像で扱った見えない文字の方式と同じく、正規化や貼り付けで消えやすいので、生成時の透かしと組み合わせて使う前提で読みます。

自社が EU に製品を出すとき

第 50 条 2 項の義務を負うのは、テキストを生成する AI システムの提供者です。自社の名前で LLM を組み込んだ製品を EU の利用者に提供していれば、モデルの開発元でなくても、その AI システムの提供者に当たる場合があります。

そのときは、使っているモデルの出力に開発元の透かしが入っているか、それで自社製品の義務を満たせるかを、開発元の説明と行動規範に照らして確かめます。オープンモデルを自社で動かしているなら、透かしを入れる処理は自社で用意することになり、11 自社で透かしを入れるかの判断の手順がそのまま要件の確認になります。

11 / Decision

自社で透かしを入れるかの判断

ここまでの仕組みと限界を、自社の判断に落とします。軸は 3 つで、この順に確かめたうえで自社の出力で測ると、入れるか、入れるならどの方式で何を測るかが決まります。

  1. 出力の長さとばらつきを確かめる

    自社の製品が返す出力の長さの分布を、記録から集計します。中央値が 100 トークンを下回る、あるいは出力の多くがコード・SQL・定型の帳票であるなら、透かしは多くの出力で判定できません。06 検出力を決める 3 つのつまみのシミュレーターで、自社の典型的な長さと文章の種類を入れたときの検出率を見積もります。

  2. モデルを自社で動かしているかを確かめる

    透かしを入れられるのは、次のトークンを選ぶ処理を握っている側だけです。オープンモデルを自社のサーバーで動かしているなら、transformers の設定で入れられます。商用 API を使っているなら、透かしの有無は提供者が決めます。09 各社の導入状況のとおり Claude の出力には既に透かしが入り、OpenAI の API では任意で入れられますが、どちらも検出器は審査を通った組織にだけ提供されていて、自社で検出を回すことはできません。vLLM などの推論サーバーでは、ロジットを加工する処理を差し込めるかを確かめます。

  3. 鍵の管理と検出の運用を決める

    鍵をどこに保管し、誰が検出を実行でき、鍵を替えるときに古い出力の検出をどう続けるかを決めます。鍵を替えると、古い鍵で入れた透かしは新しい鍵では検出できないので、鍵には版を付けて検出時に全版を試すか、出力の記録に鍵の版を残します。

  4. 自社の出力で検出率と偽陽性率を測る

    透かし入りで生成した自社の典型的な出力と、透かしなしの出力、自社の領域で人間が書いた文章を、それぞれ数百件以上そろえます。同じ閾値で検出にかけ、透かし入りを検出できた率と、透かしなし・人間の文章を誤って判定した率を数えます。さらに透かし入りの出力を別の LLM で言い換え、検出率がどこまで下がるかを測ります。この 3 つの数字が、透かしを入れたことで何が言えるようになるかの実測値です。

判断の目安を整理すると、次のようになります。長い文章を生成する製品(記事、報告書、要約、メールの下書き)を自前のモデルで提供していて、自社の出力かどうかを後から確かめたい理由があるなら、透かしは役に立ちます。理由とは、自社のモデルの出力が不正に使われたときの調査、規制への対応、利用者や取引先への説明です。

出力が短い、コードが中心、あるいは商用 API を使っているなら、自社で透かしを入れて検出する運用は成り立たず、出力のログを全件残すことが「自社のモデルが書いたか」を確かめるより確実な手段になります。ログと照合すれば、言い換えられていても、元の出力との類似で確かめられます。

測定の記録に残すもの

  • 生成に使ったモデルの名前と版、透かしの方式と設定(γ・δ、回戦数、直前のトークン数)、鍵の版を残します。
  • 検査した文章の全文、トークン数、緑の数(または採点の平均)、z 値、p 値、判定を残します。
  • 文章の出どころの区分(透かし入り / 透かしなし / 人間 / 言い換え後)と、言い換えに使ったモデルを残します。
  • 検出を実行した日時、検出器の版、実行した環境を残します。

12 / Read the symptom

症例演習

透かしを入れたあとに持ち込まれる 3 例です。いずれも理解のための架空の状況で、設定は γ = 0.25、δ = 2.0、閾値 z = 4 です。 検出器の出力から、原因を当ててみましょう。

13 / Myth vs. reality

よくある勘違い

どれも画像の透かしや AI 判定ツールの経験から持ち込まれやすい判断です。

MISCONCEPTION 01

「透かしは文章のどこかに埋め込まれた印で、その部分を消せば外れる」

偏りは文章全体のトークンの選び方に散らばっていて、特定の場所はありません。一部を消しても残りの部分の偏りは残り、逆に、全体を少しずつ言い換えると印を探さなくても薄まります(07 言い換え・翻訳で透かしは消えるか)。

MISCONCEPTION 02

「透かしが見つからなければ、人間が書いた文章である」

透かしを検出できるのは、鍵を持つモデルが透かし入りで生成した文章だけです。他社のモデルや透かしのないオープンモデルの出力、言い換えや翻訳を経た文章は、AI が書いていても検出されません。不在は何の証拠にもなりません(01 結論)。

MISCONCEPTION 03

「透かしを入れると、文章の質が必ず落ちる」

グリーンリスト方式では δ に応じて質が下がりますが、文章の質を変えない方式は 1 回の応答の分布を変えず、SynthID Text は約 2,000 万件の本番応答で利用者の評価に差が出ませんでした(05 SynthID Text)。質の低下は、方式と設定で利用者が感じない水準に抑えられます。

14 / Knowledge check

理解度チェック

答えを当てるだけでなく、なぜそう判断できるのかを説明できれば合格です。

YOUR PROGRESS 01 / 10

選択肢を1つ選んでください。

Take it home

透かしは、長さと
ばらつきで検出力が決まる

方式を知る偏らせる場所の違い
検出力を見積もる長さとエントロピー
残り方を確かめる言い換え・翻訳
鍵と運用を決める保管・版・測定

LLM の透かしは、次のトークンの選び方に鍵で決めた偏りを入れ、その偏りを数えて検出します。グリーンリスト方式は点数を、文章の質を変えない方式は乱数を、SynthID Text は候補の選び方を操作し、どの方式でも、候補が多い場面で稼いだ偏りの合計が検出力になります。検出結果は z 値と p 値で読み、数えたトークン数を必ず添えます。

透かしは、手を加えるつもりのない出力が自社のモデルのものかを確かめる道具です。言い換えや翻訳で薄まり、鍵の推定で偽装され、透かしのないモデルの出力には何も言えません。この範囲を知ったうえで入れれば、出力のログと並ぶ、自社の出力を確かめる手段の 1 つになります。

ほかの講座を見る

参考資料