LLMの文章に潜む
見えない透かしを、
自分の手で作って確かめる

Claude が生成テキストに電子透かしを入れ始めた——それはどういう仕組みで、本当に「品質を変えず」「編集に耐える」のか。トークン空間型(KGW法・Gumbel-Max法)と意味空間型(SemStamp流)をゼロから実装し、Mac のローカル LLM だけで生成・検出・攻撃まで検証した記録。生成文はすべて無編集の実測サンプル。

github.com/kentaro/sukashi きっかけの記事 (hellorusk, Zenn) 検証日 2026-08-13 / Apple Silicon (MPS)
TL;DR

3行でいうと

透かしは「LLM が次の単語を選ぶときの、どちらでもよい選択の揺らぎ」に埋め込まれる。1語ずつは何の変哲もないが、数百トークン分の偏りを集計すると、人間の文章ではあり得ない統計的な癖(z値)が浮かぶ。トークン選択に埋め込む方式は言い換え1回で確実に消えるが、文の意味ベクトルに埋め込む方式は劣化しつつも生き残りうる——ただしその生死は埋め込みモデルの言い換え安定性に懸かっている。

z = 4.02
意味空間型(SemStamp流・論文準拠のチェーン構造)の透かし入り日本語エッセイの検出スコア。透かしなしは z = 1.83 で素通し
z = 4.08
同じエッセイを透かしなしの LLM でパラフレーズしたのスコア(今回の実測)。ただし反復すると z = -0.8〜4.4 の間で振れる——確実な生存には論文の頑健エンコーダが必要
7.17 → 0.71
トークン空間型(KGW法)はパラフレーズ1回で毎回確実に透かしが消滅する(全試行で z ≈ 0)
01 — Results

結果:透かしあり・なしを並べて読む

例1|意味空間型(SemStamp流)— 劣化はするが壊滅しない透かし

同じプロンプト(「人はなぜ雨の中の散歩を楽しむのか」のエッセイ)から、透かしなしと透かし入りを生成した。生成モデルは Sarashina2.2-3B-instruct、文埋め込みは ruri-v3-30m、有効領域は論文と同じく前の文の署名から導出(チェーン構造)。内容が違うのは透かしのせいではない——LLM は同じプロンプトでも実行のたびに別の文章を書く。透かしの痕跡は文面のどこにもなく、検出器が集計する統計量にだけ現れる。

透かしなしz = 1.83 / 未検出

人はなぜ雨の中の散歩を楽しむのでしょうか。それは早割で得ることができる独特の感覚や体験が関係しているのかもしれません。雨粒が肌にぶつかる感触、道路に反射する雨水の光が作る幻想的な模様、そして雨が空気を湿らせることで一層際立つ緑の香り。これらは雨の中だからこそ体験できる特別な要素です。さらに、雨の日には人混みが少なく、静かな時間が流れるため、日常の喧騒から離れてゆっくりと自分と向き合うことができます。雨音は自然の音楽とも言え、そのリズムに耳を傾けながら歩くのは、心が落ち着く時間となります。また、雨の日は色彩が豊かに感じられる瞬間でもあります。濡れた路面や木々の葉が水分を含み、日光が散乱することで、普段の景色がより鮮やかに見えるのです。このような視覚的な喜びも、雨の中の散歩を魅力的にしている一因でしょう。最後に、雨は新たな始まりの象徴でもあります。

10文。文埋め込みが「当たり領域」に落ちた文は偶然の範囲(期待値25%)。2文目の「早割」は3Bモデルの生成の癖(無編集掲載)
SemStamp透かし入りz = 4.02 / 検出

人はなぜ雨の中の散歩を楽しむのでしょうか。その理由をいくつか探ってみましょう。まず、雨の日の散歩は独特の雰囲気があります。雨音が静かに降る中を歩くと、日常の喧騒から少し離れて、心が落ち着くのを感じるのです。これは、雨が自然のヒーリング効果を持っているからかもしれません。雨の音は瞑想のように心に安らぎを与え、忙しい日常を忘れることができるのです。次に、雨に濡れた地面や葉、建物が見せる美しさも理由の一つです。雨が上がった後の道には水滴がつき、それが光の反射でキラキラと輝きます。この光景は、普段の町並みに新たな生命感をもたらし、普段とは異なる視点で周囲を見ることができます。また、雨に濡れた植物の香りも楽しめますし、その香りが心に安らぎを与えてくれます。

10文。文ごとの再生成回数は [1, 7, 17, 17, 2, 3, 4, 17, 1, 2](棄却サンプリング、17は上限到達)。品質フィルタで英語の混入候補は棄却している

この透かし入りエッセイを、透かし機能を切った素のモデルに「意味を保ったまま、できるだけ違う言い回しで」書き直させた。攻撃者が透かしなしの LLM に通して透かしを洗い流そうとする状況の再現で、書き直し側が新たな透かしを足すことはない。トークン列は大きく入れ替わったが——

↑ をパラフレーズした後z = 4.08 / まだ検出できる

人が雨の中の散歩を楽しむ理由の一つに、雨の日の独特な雰囲気があります。雨音が静かに降る中を歩くことで、日常の騒音から離れ、心が落ち着くのを感じるのです。これは雨が自然のヒーリング効果をもたらしているからかもしれません。雨音は瞑想のように心に安らぎを与え、忙しい日常から一時的に解放されることができます。

さらに、雨に濡れた地面や葉、建物の美しさも理由の一つです。雨が止んだ後の道は水滴が付着し、それが光の反射でキラキラと輝きます。この光景は、普段の町並みに新たな生命感を与え、普段とは異なる視点で周囲を見る機会を提供してくれます。また、雨に濡れた植物からは特有の香りが漂い、その香りが心に安らぎを与えてくれます。

言い回しは変わっても文の意味は変わらないため、埋め込みベクトルの多くが同じ領域に留まった。ただしこの生存は毎回ではない——反復実験ではパラフレーズ後の z は -0.8〜4.4 の間で振れた(詳細は「実装の忠実度」節)

例2|トークン空間型(KGW法)— 自然な文章に埋まるが、言い換えで確実に消える

同じ Sarashina で、KGW法(グリーンリストの語のロジットに加点)の透かしを入れたエッセイ。読んだだけでは透かしの有無は分からないが、検出器は言い当てる。ところが同じパラフレーズ攻撃で、こちらは毎回確実に消滅した。

KGW透かし入りz = 7.17 / 検出

雨と散歩は、一見すると相反する体験の組み合わせのように見えるかもしれません。でも、人はなぜ雨の中の散歩を enjoyするのでしょうか。その理由はいくつか考えられます。

まず、雨の音や雰囲気が心に落ち着いてくれるからです。しっとりと降り注ぐ雨の音や、大地を濡らす質感は、日常生活での騒音や急ぎを忘れさせる効果があります。 Raindropsが作る静かなリズムは、忙しい日々の中で得られるちょっとした煩雑さからの解放感を促します。

次に、雨の中の散歩は新しい視点を提供してくれます。普通とは違った風景が雨の水滴に反射し、風景が輝きが増します。特に夜の雨は、街灯やその他の光が織りなす光のパターンがとても美しく、普段とは異なる世界への扉を開いてくれます。

また、雨の日は人が少なく、ゆっくりと歩くことができます。人混みを避けて自分のペースで探求する時間を過ごすことができるのです。これが普段の日常とは少し異なる、特別な体験をもたらします。

最後に、雨の中の散歩は自己発見の場ともなり得ます。静かに自分を省みる時間を持つことで、普段見逃しがちな感情や思考を整理することができます。雨に濡れることによる肌感覚も、新たなインスピレーションを引き出すきっかけとなります。

同じ文章を透かしなしのモデルでパラフレーズすると z = 0.71 / 消滅 — 透かしの実体が「表層のトークン選択の偏り」なので、トークン列が総入れ替えになると消える。「enjoyする」「Raindropsが」の英語混入は、ロジット加点が生成を歪めた副作用でもある(無編集掲載)

例3|透かしはどこにあるのか — 全トークンの塗り分け

「透かしあり・なしの文章を見比べても分からない」なら、透かしはどこにあるのか。KGW法の検出器と同じ計算で、各トークンを「鍵が優遇する側(グリーン)」か否かで塗り分けると、初めて目に見える。透かしなしのグリーン率は期待値どおり28.5%、透かし入りは43%——この偏りだけが透かしの実体である(Qwen2.5-1.5B-instruct、温度0、同一プロンプト)。

グリーンリスト語(鍵が優遇する側)レッドリスト語
透かしなし — グリーン率 28.5%z = 1.14
の中日本の文化人々いた楽しみ一つです神秘良いです人々楽し時間が増えます楽し人々えるというられます

の中落ちそして地面落ちなど楽しことができます楽し人々落ち着よいーション提供します

またの中楽しことができますなど様々な楽しことができます
KGW透かし入り — グリーン率 43%z = 5.88
の中日本の的な文化一部として多くの人々しまていますなぜ人々の中楽しのでしょうかそれは方面からできます

1.んだますことからの中んだ感じられるとなることがありますこのんだともックスさせストレスてくれます

2. 心理的なの中人々自然力をするとなるため心理的なにも影響しますったとき人々よくになることができます

3.目的の中

個々の緑の語は何の変哲もない。「雨」も「散歩」も、その位置の直前4トークンと鍵の組み合わせ次第で緑にも赤にもなる。差は1語ずつではなく、数百トークンの集計にだけ現れる。

例4|英語での定量実験(トークン空間型2方式)

Qwen2.5-0.5B-instruct・4プロンプト・各200トークンでの検出スコア平均。透かし入りだけが検出され、透かしなし・人間の文章(Austen『高慢と偏見』冒頭)・間違った鍵では検出されない。

検出対象KGW検出器 zGumbel検出器 z
透かしなし(vanilla)-0.760.73
KGW透かし入り9.78-0.07
Gumbel-Max透かし入り-0.9034.99
間違った鍵で検出-0.420.16
人間の文章(Austen)-1.510.18

攻撃実験。ランダムなトークン置換では徐々に減衰し、透かしなしLLMによるパラフレーズ1回で両方式とも消滅した。

攻撃KGW zGumbel z
なし5.5538.79
トークン置換 10%2.4519.61
トークン置換 30%-0.827.27
トークン置換 50%1.310.40
パラフレーズ(透かしなしLLM)-1.45-0.66

品質面では、KGW は同一モデルで測った平均 NLL が 2.25 → 3.02 nats/token に悪化(分布の歪み)。Gumbel-Max は 2.77 で、distortion-free の構成どおり劣化しなかった。

02 — Mechanism

仕組みの概要

LLM は次のトークンを確率分布からサンプリングしており、「ここは this でも that でも自然」という場面が文章中に何度も現れる。透かしは、このどちらでもよい選択を秘密鍵から導いたルールでほんの少し偏らせる。1回の選択では何も分からないが、数百トークン分の偏りを集計すると、統計的にあり得ない癖が浮かび上がる。検出にはモデルへのアクセスは不要で、秘密鍵とテキストだけでよい。

TOKEN SPACE / 2023

KGW法

直前トークンと鍵のハッシュで語彙を「グリーン(25%)/レッド」に二分し、グリーン側のロジットに +δ。検出はグリーン語比率の z 検定。シンプルだが分布が歪み、品質が劣化しうる。

初期実装 → git 履歴に保存
TOKEN SPACE / DISTORTION-FREE

Gumbel-Max法

サンプリングの乱数を鍵由来の疑似乱数 r に差し替え、argmax ri1/pi を選ぶ。出力分布は数学的に不変(品質劣化ゼロ)。検出は Σ −log(1−r) の偏り。SynthID-Text もこの系統。

初期実装 → git 履歴に保存
EMBEDDING SPACE / 2024–

SemStamp流(意味空間型)

文単位で生成し、文埋め込みが「当たり領域」(鍵由来のLSHで分割し、前の文の署名から導出)に落ちる文だけ採択する棄却サンプリング。言い換えても意味ベクトルは動きにくいため、透かしが生き残りうる。

sukashi 本体
生成文 パラフレーズ後も 同じ領域に留まりやすい 当たり領域(鍵+前の文が指定) 文埋め込み空間を鍵由来の超平面(LSH)で領域分割する 生成ループ 1. 候補文をサンプル 2. 埋め込みを計算 3. 当たり領域なら採択   外れたら 1 に戻る (棄却サンプリング)
SemStamp流の意味空間透かし。言い換えで表層のトークン列が総入れ替えになっても、文の意味ベクトルは近傍に留まるため、当たり領域から出にくい——埋め込みモデルが言い換えに安定している限りにおいて。

検出はすべて仮説検定

3方式とも、検出は「このテキストの統計量は、透かしなしの帰無仮説から何σ外れているか」の一点に帰着する。KGW と SemStamp は二項検定の正規近似、Gumbel は指数分布の和(Gamma 近似)を使う。

# KGW / SemStamp: green (or valid-region) rate test
z = (hits − γ·n) / √(n·γ·(1−γ))

# Gumbel-Max: per-token score is Exp(1) under the null
S = Σ −log(1 − r[chosen])
z = (S − n) / √n

z > 4 は片側 p < 3×10⁻⁵。この検定が意味を持つのは、鍵と生成側がまったく同じ疑似乱数(グリーンリスト・乱数ベクトル・LSH超平面)を再現できるからで、生成と検出が「鍵+文脈 → 乱数」の決定的な導出を共有している。

「同じ文章の透かしあり・なし」は作れない。自己回帰生成では、1語変わるとそれ以降はその語を前提に生成されるため、構造ごと別の文章に育つ(温度0の実験では、書き出し「雨の中の散歩は、日本の」まで完全一致した直後、「風土」/「伝統」の1語の分岐からエッセイ調と説明調に分かれた)。透かしが保証するのは個々のテキストの同一性ではなく、生成される文章の分布が変わらないこと(distortion-free 方式の場合)である。
03 — Fidelity

実装の忠実度と、頑健性の実際

この実装は SemStamp 論文の骨格——鍵由来LSHによる意味空間の領域分割、前の文の署名から導く有効領域(チェーン構造)、境界マージン付きの文単位棄却サンプリング、ヒット率の z 検定——をそのまま持っている。ただし1つ、意図的に省いた部品がある。パラフレーズ頑健エンコーダである。

論文は、文埋め込みモデルを言い換えペアで対照学習し、「言い換えても LSH 署名が反転しない」エンコーダを作ってから透かしを載せる。本実装は市販の埋め込みモデル(ruri-v3-30m / all-MiniLM-L6-v2)をそのまま使った。その差は、言い換えでの署名ビット反転率として直接測れる:

埋め込みモデル言語言い換え忠実度 cosLSH符号反転率
ruri-v3-30m日本語0.9524/36 (11%)
all-MiniLM-L6-v2英語0.79710/48 (21%)
all-mpnet-base-v2英語0.82316/48 (33%)

この反転率が生死を分ける。今日の全実測(各条件1〜2回、10〜13文のエッセイ):

条件透かし入り zパラフレーズ後 z
日本語・チェーン構造(論文準拠)4.024.08 生存
日本語・固定領域(簡略変種)4.751.35 / 4.43(2回実施、振れる)
英語・チェーン構造2.45-0.82 消滅
英語・固定領域(2回実施)4.67 / 4.961.12 / 4.01(振れる)
(参考)KGW・日英7.17 / 14.240.71 / -0.92 毎回消滅

まとめるとこうなる。KGW(トークン空間型)はパラフレーズで毎回確実に z ≈ 0 へ沈む。意味空間型は劣化はするが壊滅せず、日本語では検出しきい値を越えて生き残ることもある——ruri の反転率が11%と低いからだ。しかし反転がゼロでない限り生存は確率的で、10文程度の短いテキストでは結果が振れる。論文が頑健エンコーダの対照学習をわざわざ行うのは、この反転を潰して生存を「たまたま」から「保証」に変えるためである。

実装上の教訓も2つ得た。(1) 市販埋め込みは異方性が強く、原点を通る超平面では領域分割が偏る——アンカー文集合の平均でセンタリングして解決した。(2) 棄却サンプリングは品質を見ずに「領域に入った文」を採るため、素通しにすると英語混じりの候補文まで採用してしまう——候補フィルタを透かしあり・なし双方に同条件で入れて解決した。

04 — Limitations

制約

05 — Future Work

今後の展望

06 — References

参考文献

  1. hellorusk,「Claude がテキストに電子透かしを入れ始めたので、LLM ウォーターマーキングの仕組みを調べた」Zenn, 2026.(本プロジェクトのきっかけ)
  2. Kirchenbauer et al., "A Watermark for Large Language Models" (ICML 2023). — KGW法
  3. Kuditipudi et al., "Robust Distortion-free Watermarks for Language Models" (2023). — Gumbel-Max系の定式化
  4. Dathathri et al., "Scalable watermarking for identifying large language model outputs" (Nature, 2024). — SynthID-Text
  5. Krishna et al., "Paraphrasing evades detectors of AI-generated text, but retrieval is an effective defense" (NeurIPS 2023). — パラフレーズ攻撃
  6. Hou et al., "SemStamp: A Semantic Watermark with Paraphrastic Robustness for Text Generation" (NAACL 2024). — 本実装の元。パラフレーズ頑健エンコーダの対照学習を含む
  7. Qu et al., "Provably Robust Multi-bit Watermarking for AI-generated Text" (USENIX Security 2025).
  8. Yu et al., "SAEMark: Multi-bit LLM Watermarking with Inference-Time Scaling" (NeurIPS 2025).
  9. Ai & He, "PASA: A Principled Embedding-Space Watermarking Approach for LLM-Generated Text under Semantic-Invariant Attacks" (ICML 2026).
  10. Anthropic, "How Claude marks AI-generated content" (2026).

実装に使ったモデル:sarashina2.2-3b-instruct-v0.1(SB Intuitions), ruri-v3-30m(名古屋大学 笹野研究室), Qwen2.5-instruct 0.5B/1.5B(Alibaba), all-MiniLM-L6-v2 / all-mpnet-base-v2(Sentence Transformers)。すべて Apple Silicon の MPS 上でローカル実行。数値はいずれも 2026-08-13 の実測。