AI・機械学習
テキストAIのウォーターマークは常に簡単に削除できる
Text AI watermarks will always be trivial to remove (seangoedecke.com)
要約
EUのAI法(AI Act)は、AI生成コンテンツの検出を義務付けていますが、テキストAIのウォーターマークは本質的に脆弱であることが指摘されています。GoogleのSynthIDのような技術やUnicodeのトリックが提案されていますが、これらのウォーターマークは、テキストの言い換えや単純な文字置換によって容易に削除できるため、AI生成コンテンツの検出義務を満たすには不十分であると論じられています。AI生成コンテンツの検出には、ウォーターマーク以外の方法も検討されるべきだと示唆されています。
全文翻訳
EUのAI法は、2026年8月、つまり1ヶ月後から施行されるようになります¹。最大の新しい要件の一つは第50条で、すべてのAI出力が「人工的に生成されたものであることが検出可能」であることを要求しています。言い換えれば、LLMプロバイダーがEUで事業を行いたい場合、出力にウォーターマークを適用しなければなりません²。これは、AIコンテンツを識別するために使用できる隠された署名です。LLMテキストのウォーターマーキングは、魅力的な問題です。最高のエンジニアリング問題のように、理論的には完璧に解決するのは難しいですが、複数の部分的な解決策があります。例えば、GoogleのSynthIDや、(私が主張するように)OpenAIとAnthropicによるいくつかの静かなUnicodeトリックです。年末までにAIラボがこれらのトレードオフをどのように乗り越えるかを見るのは興味深いでしょう。
なぜテキストウォーターマーキングは難しいのか
昨年末、AI検出ツールはAIによって生成されたテキストを証明できないという記事で、AIウォーターマーキングについて書きました。デジタル画像には人間の目には見えない多くのノイズが含まれているため、画像をウォーターマークするのは簡単です。例えば、「これらの正確な場所にある20ピクセルは常に色を共有する」のようなウォーターマークを適用できます。テキストははるかに、はるかに困難です。画像とは異なり、テキストは非常に圧縮されたメディアです。人間が気づかないような文章の変更を加えることはできません(後述する例外が1つあります)。では、どのようにウォーターマークを付けるのでしょうか?それは基本的にテキストのステガノグラフィー問題(秘密のコードを隠すこと)であり、平文を任意に操作できないという点でさらに困難になります。ウォーターマークを適用するために加えるどんな変更も、出力の品質を損なうでしょう。例えば、「5文字ごとに'e'を入れる」というのは良いウォーターマークになりますが、単純に適用するとAI出力はタイプミスだらけになります。モデルにウォーターマークをどのように適合させるかを考えさせることはできますか?強力なAIモデルは、このような制約を処理するのに十分賢いですが³、それでもユーザーの問題に費やされるべき推論時間を消費し、モデルを本来よりも能力が低いように聞こえさせます⁴。
AIコンテンツを検出するためにウォーターマークが必要ですか?
本当にウォーターマークが必要ですか?もしあなたがAnthropicで、特定のテキストブロックがモデルによって生成されたかどうかを検証できる必要があるなら、そのテキストを各モデルで実行し、モデルが予測するトークンがテキストの各トークンにどれだけ近いかを測定するだけでいいのではないでしょうか?実際にはそうではありません。「質問に対するすべての可能なClaude Sonnetの回答」の空間は、「すべての可能なウォーターマーク付きの回答」の空間よりもはるかに大きいです。つまり、AIが書いたように見える人間のテキストに対して、多くの偽陽性が発生するでしょう。人間が偶然Claudeのように書くことは、人間が偶然ウォーターマークを再現することよりもはるかに可能性が高いです。また、ウォーターマークを付けるためにAnthropicのすべてのモデルをテキストに対して実行するのは、費用がかかりすぎます。EUのAI法は、最終的にAnthropicのようなラボに、すべてのEU市民に無料のウォーターマーキングサービスを提供するよう要求するでしょう(コミットメント2を参照)。「モデルを実行する」アプローチではそれはできません。
SynthIDの仕組み
私の知る限り、テキスト出力をウォーターマークすると公言している唯一のAIプロバイダーはGoogleであり、SynthIDというツールを使用しています。仕組みは以下の通りです。LLMがテキストを生成するとき、それは一連のトークン(単語または単語の断片)を生成しています。各ステップで、モデル自体は単一のトークンを出力するのではなく、その語彙にあるすべての(例えば)10万個のトークンのリストを出力し、それぞれにそのトークンが次になる確率を注釈付けします。ChatGPTやClaude Codeのようなツールは、出力結果を得るために、最も可能性の高いオプションから半ランダムに選択します。この半ランダムサンプリングプロセスは、検出可能な方法で影響を与えることができます。例えば、「2番目に可能性の高いトークンを選び、次に1番目、次に2番目、次に1番目、というように」というサンプリング戦略を選択することができます。それでも高品質な出力を生成できますが、モデルを生成されたテキストに対して再実行してパターンが保持されているかを確認することができます。しかし、それは検証を非常に高価にし、出力のわずかな変更でもパターンを壊し、したがってフィンガープリントを壊します。
もっと良い方法はありませんか?
はい。SynthIDは、各トークンにその前のトークンに基づいた「スコア」を割り当てるプロセスです(例えば、トークンのIDとその前の3つのトークンのIDを合計し、それを5で割った余りを得る)⁵。ウォーターマークを適用するために、モデルは「上位5つの最も可能性の高いトークンの中から、SynthIDスコアが最も高いものを選ぶ」のようなサンプリング戦略を採用します⁶。その後、テキストブロックの集計SynthIDスコアを計算することで、ウォーターマークを検出できます。もしそれが疑わしいほど高い場合、AIによって生成された可能性が非常に高いです。これは、emダッシュの使用によってLLMを識別できるという一般的なアドバイスのバージョンに似ていますが、キーワードのリストではなく、人間が識別できない単語間の微妙な数学的関係に依存しています。スコアを割り当てるプロセスは単純なので、ウォーターマーク検出を実行するのは非常に安価です。
Unicodeウォーターマーク(ホモグリフ経由)
Googleには、SynthIDがモデルを賢くなくしない理由について複雑な数学的根拠があります。SynthIDスコアリングは、検出可能なフィンガープリントを出力に残す、通常の擬似ランダムトークンサンプラーのように機能するのに十分ランダムであるはずです。しかし、もちろんこれは疑わしいです。例えば、温度をゼロに設定して推論を行うのは一般的ですが、これは常にモデルの最も可能性の高い次のトークンを選択します。その場合、フィンガープリントを残すことは全くできません(あるいは、ユーザーの好みを無視して2番目または3番目の選択肢を選ばなければなりません)。モデルの出力を変更できない場合、コンテンツにフィンガープリントを残すことはできますか?まあ、ある意味では。OpenAIとAnthropicが時々、高度なUnicodeトリックを適用していると私は確信しています。例えば、通常の「 」スペース(Unicode U+0020)を3分の1エームスペース(Unicode U+2004)やCJK表意文字スペース(Unicode U+3000)に置き換えることができます。これらは「ホモグリフ」と呼ばれ、ここでさらに見つけることができます。もちろん、人間の生成したテキストの多くはホモグリフを使用しています。しかし、ホモグリフのパターン(例えば、「3番目のスペースが3分の1エームになる」)をエンコードすることは、自然界では発生する可能性がはるかに低いので、非常に簡単です。SynthIDウォーターマークと同様に、ホモグリフベースのウォーターマークは非常に安価に検出できます。ホモグリフベースのウォーターマークは、SynthIDよりも適用が安価です。クライアント側で完全に実行することもできます。これは陰謀論ではないと思います。Claude Codeは、中国のユーザーからの疑わしいリクエストをタグ付けするために(「今日の」の日付の「」文字でホモグリフを悪用して)間違いなくこれを行っていました(その後、彼らはそれを撤回しましたが)。過去数年間、ChatGPTからテキストブロックをコピーしてVSCodeに貼り付けると、時々VSCodeがスペースの一部または全部を異常なUnicode文字としてマークすることに気づきました⁷。OpenAIとAnthropicは、AI生成ウォーターマークとしてホモグリフを使用しているのでしょうか?確信はありません。しかし、彼らは間違いなくホモグリフを使用しています。
テキストウォーターマークは簡単に削除できる
AI法(特に、関連する行動規範)は、ウォーターマークが「コンテンツから分離するのが困難な方法でコンテンツ内に埋め込まれる」ことを要求しています。しかし、テキストウォーターマークは簡単に削除できます。Unicodeホモグリフウォーターマークを削除するには、すべてのホモグリフを「実際の」文字の同等物に置き換えるだけです。比較的弱いウォーターマークなしのLLMにアクセスできる場合⁸、そのLLMにテキストコンテンツを言い換えさせることで、SynthIDウォーターマーキングを削除できます。ウォーターマークは微妙な語彙の選択に固有であるため、コンテンツの言い換えはウォーターマークを削除します。手作業で行うこともできますが、その時点ではもはやAI生成コンテンツとは言えません。無料の公開ウォーターマークテストツールが何らかの形で提供されるため、ネガティブな結果が出るまで調整し続けることができます。さらに、AI法はウォーターマーキング技術が「技術的に実行可能である限り、相互運用可能である」ことを要求しています。