2026年8月現在、Claudeが生成するテキストブロックには、目視や一般的なスペルチェックでは検出できない統計的ウォーターマークが付与されています。この信号はコピー&ペースト後も残り、テキストの単語選択に分散しています。本記事では、所有するコンテンツのプライバシーおよびファイル衛生管理を目的に、watermarks-remover を使って不可視Unicode文字やファイルメタデータを検査・削除する手順を説明します。
出所マークの削除を、学術的不正、契約上の開示義務の回避、またはAI作業を人間による作業と偽る目的で使ってはいけません。所属組織、契約、プラットフォームの規約を確認してください。
要約
- Claudeのテキストウォーターマークは、隠し文字ではなく単語選択の統計的な偏りです。
- コピー&ペーストでは消えませんが、大幅な編集・言い換え・翻訳では信号が弱まります。
- watermarks-remover は、Python 3.10+ で動作するMITライセンスのツールキットです。
- レイヤーAは、ゼロ幅文字・特殊スペース・双方向制御文字などを決定論的に削除します。
- レイヤーBは、統計的な信号を弱めるためにテキストを書き換えます。ただし品質や意味を損なう可能性があります。
- PNG、JPEG、SVG、PDF、DOCX、ODT、HTML、MarkdownからC2PA、EXIF、XMP、文書プロパティを削除できます。
Claudeのウォーターマークの正体
Claudeのテキストウォーターマークは、単語の間に挿入されたゼロ幅スペースや特殊文字ではありません。検索・置換で見つけられる特定の文字列やグリフではなく、生成時のトークン選択に偏りを与える統計的な信号です。
Claudeはテキストを生成する際、複数の候補から次のトークンを選びます。ウォーターマークは秘密鍵に従ってその選択をわずかに調整します。長文ではその偏りが積み重なり、鍵を持つ検出器が統計的特徴として識別できます。
この仕組みには2つの重要な性質があります。
- コピー&ペースト後も残る: 信号はファイルメタデータではなく、単語の選択に含まれるためです。
- 編集で弱くなる: 言い換え、翻訳、大幅な加筆・修正により統計パターンが壊れます。
Anthropicは2026年8月2日からこの仕組みをモデルレベルで展開しており、Claudeアプリ、API、Claude Code、AWS、Google Cloud、Microsoft Foundry経由のアクセスに適用されています。モデルの提供形態やアクセスポリシーに関する背景は、Fable 5 Is Down for Everyoneも参照してください。
なお、ウォーターマークの陽性検出は「そのテキストがClaudeを通過した可能性」を示すだけです。校正、翻訳、要約でも痕跡が残る可能性があり、不正行為を直接証明するものではありません。
2種類のマークを分けて扱う
watermarks-remover は、対象を次のレイヤーに分けて処理します。
レイヤーA: 決定論的な文字クリーニング
レイヤーAは、以下のような不可視・特殊Unicode文字を削除します。
- ゼロ幅スペース
- 特殊な空白文字
- 双方向テキスト制御文字
- Unicodeタグ文字
この処理は標準ライブラリ中心のPython実装で、モデルを使いません。そのため、結果が決定論的で、テストしやすく、可視テキストを変更せずに実行できます。
レイヤーB: 統計的ウォーターマークへの書き換え
Claudeのように単語選択に信号を埋め込む仕組みには、文字削除は効きません。統計パターンを変えるには、文章そのものを書き換える必要があります。
この処理には次のトレードオフがあります。
- 文体やトーンが変わる
- 技術的な表現の精度が落ちる可能性がある
- 高品質な書き換えには追加のモデルコストがかかる
ファイルメタデータの削除
テキスト信号とは別に、ファイルには以下のようなメタデータが付与されることがあります。
- C2PAマニフェスト
- EXIF
- XMP
- PDF、DOCX、ODTなどの文書プロパティ
C2PAはContent Provenance and Authenticity Coalitionの標準で、ファイルに紐付く署名付きマニフェストです。統計的テキストウォーターマークとは異なり、ファイルの再保存や形式変換で失われる場合があります。
このツールはClaude、Gemini/SynthID-Text、OpenAI、Kirchenbauerスタイルのオープンソース方式を同じアーキテクチャで扱います。ただし、SynthIDのようなピクセル領域に埋め込まれた画像ウォーターマークは削除対象ではありません。外部のreverse-SynthIDチェックアウトを使ったスコアリングには対応します。
検出が弱くなりやすいケース
実行前に、そもそも統計的信号が十分に残っているかを確認してください。
- 短い文章: 数文では検出に必要な統計量が不足しやすくなります。
- コード: トークン選択の自由度が低く、フォーマッター、リンター、リファクタリングにより信号がさらに弱まります。
- 大幅に編集済みのテキスト: すでに言い換えや加筆をしている場合、統計パターンが壊れている可能性があります。
- C2PA付きファイル: 再保存やフォーマット変換で削除されることがあります。
実務上、検査・クリーニングの対象になりやすいのは、変更せずに保持している長文テキストと、公開前に整理したいファイルメタデータです。
watermarks-removerをインストールする
プロジェクトはエージェントスキルとスタンドアロンPythonスクリプトとして提供されています。Python 3.10以上が必要です。
git clone https://github.com/guillaumemeyer/watermarks-remover.git
cd watermarks-remover
コアスクリプトは標準ライブラリを使うため、基本的なテキスト・メタデータ操作だけなら追加のpip installは不要です。
エージェントスキルとして使う場合は、スキルディレクトリをリンクします。
mkdir -p ~/.grok/skills
ln -sfn "$(pwd)/skills/remove-ai-marks" ~/.grok/skills/remove-ai-marks
スクリプトを直接実行する場合は、パスを変数に保存しておくと便利です。
export SCRIPTS="$(pwd)/skills/remove-ai-marks/scripts"
必要に応じて、次のCLIツールも導入してください。
-
c2patool: C2PAマニフェストを詳細に検査する -
exiftool: 残っている画像メタデータを追加で削除する
これらはコアワークフローの必須要件ではありません。
まずファイルを検査する
削除前に、ファイルに何が含まれているかを確認します。
python3 "$SCRIPTS/inspect_file.py" draft.md
このコマンドはファイルを変更せず、不可視文字、メタデータブロック、出所マニフェストなどを報告します。
実装では、次の流れを基本にしてください。
- 元ファイルを検査する
- 出力先を指定してクリーニングする
- クリーニング後のファイルを再検査する
- 問題がなければ成果物を採用する
元ファイルを直接上書きしないことが重要です。
テキストから不可視文字を削除する
レイヤーAのクリーニングにはclean_text.pyを使います。
python3 "$SCRIPTS/clean_text.py" draft.md -o draft.cleaned.md --stats
--statsを指定すると、検出・削除された項目の概要が出力されます。
このコマンドは、以下を削除します。
- 目に見えないUnicode文字
- 特殊スペース
- 双方向制御文字
- Unicodeタグ文字
-oで別ファイルに出力するため、元のdraft.mdを保持したまま結果をレビューできます。可視テキストを変更しないレイヤーAは、追跡用の不可視文字を除去したいケースで最も再現性の高い処理です。
ファイルメタデータを削除する
画像や文書ファイルにはclean_file.pyを使用します。
python3 "$SCRIPTS/clean_file.py" photo.png -o photo.cleaned.png
対応形式は次のとおりです。
- PNG
- JPEG
- SVG
- DOCX
- ODT
- HTML
- Markdown
画像に対して追加のメタデータ除去を行う場合は、exiftoolを実行します。
exiftool -all= photo.cleaned.png
C2PAだけが対象なら、ファイルの再保存や形式変換でもマニフェストが失われる場合があります。ただし、再現可能な手順として管理するなら、専用のクリーナーをパイプラインに組み込む方が予測しやすくなります。
レイヤーB: 書き換えを使う前に確認すること
統計的テキストウォーターマークは、単語の選択に含まれます。そのため、信号を変えるには文章の言い換えが必要です。
rewrite_text.pyは書き換え用プロンプトを準備できます。
python3 "$SCRIPTS/rewrite_text.py" draft.md --backend print-prompt --strength paraphrase
--backend print-promptはモデルを直接呼び出さず、書き換えプロンプトだけを出力します。どのモデルやワークフローで書き換えるかを自分で管理したい場合に使えます。
--strengthは言い換えの強さを調整します。
ただし、技術文書では書き換えによる副作用を必ず確認してください。
- API名、CLIオプション、バージョン番号が変わっていないか
- 否定条件や例外条件が落ちていないか
- コードブロック、JSON、YAML、SQLが変更されていないか
- 元の意図やトーンが保たれているか
多くのケースでは、レイヤーAの文字クリーニングとファイルメタデータ削除だけで十分です。レイヤーBは、正当な用途があり、レビューコストと品質低下を受け入れられる場合に限定してください。
結果を検証する
クリーニング後は、必ずインスペクターを再実行します。
python3 "$SCRIPTS/inspect_file.py" draft.cleaned.md
C2PAマニフェストについては、c2patoolで確認できます。
c2patool photo.cleaned.png
レイヤーAの不可視文字削除とC2PA削除は、インスペクターやc2patoolで検証できます。一方、Claudeの統計的なテキストマークはAnthropicの秘密鍵に依存するため、現時点では独自検証が困難です。Anthropicが公開予定としている検出APIが、この種の信号を確認するための基準になります。
チームで検査を自動化する場合は、検証コマンドをCIに組み込むとよいでしょう。たとえば、APIテストツールのApidogを使ってコンテンツ検査・モデル検査エンドポイントをテストし、チェック手順を毎回同じ条件で実行できます。AIエージェントAPIのテスト設計については、API経由でAIエージェントをテストする方法も参照してください。
法的・倫理的なガードレール
このツールの適切な用途は、所有するコンテンツのプライバシーと衛生管理です。
たとえば、次のような用途があります。
- 自分のドラフトから不可視の追跡文字を削除する
- 公開前の画像から位置情報や撮影情報を削除する
- 所有するファイルから不要なメタデータを整理する
一方、次の用途は避けるべきです。
- 学術ポリシーで禁止・開示義務があるAI生成物を隠す
- クライアント契約やプラットフォーム規約のAI開示義務を回避する
- AIによる作業を人間だけの作業として虚偽に帰属させる
ウォーターマークの検出は著者性の決定的な証明ではなく、マークがないことも人間作成の証明にはなりません。判断に迷う場合は、削除ではなく適切な開示を優先してください。
ベンダーの出所ポリシーではなく、自分の運用条件でモデルを扱いたい場合は、セルフホスティングも選択肢になります。ローカル実行の選択肢は、2026年に実行すべき最高のローカルLLMで確認できます。
よくある質問
Claudeのテキストからウォーターマーク文字だけを削除できますか?
いいえ。Claudeの統計的ウォーターマークは隠し文字ではなく、単語選択の偏りです。検索・置換で削除できる特定の文字列はありません。
ただし、一部のツールはゼロ幅文字などを注入します。そのような文字はwatermarks-removerのレイヤーAで削除できます。
Claudeの出力をコピー&ペーストするとウォーターマークは消えますか?
いいえ。統計的信号は単語選択に組み込まれているため、アプリ間のコピー&ペーストでは残ります。
watermarks-removerは無料ですか?
はい。MITライセンスのオープンソースです。コアのテキスト・メタデータ処理には、Python 3.10+と標準ライブラリを使用します。
Claude Codeの出力にも使えますか?
実行はできますが、コードでは統計的信号が弱いことが多いです。ソースコードはトークン選択の制約が強く、フォーマッターやリンターにより残った信号も変化しやすいためです。
SynthIDのような画像ウォーターマークも削除できますか?
ピクセル領域に埋め込まれたウォーターマークは対象外です。C2PA、EXIF、XMPなどのファイルレベルメタデータは削除できます。また、外部のreverse-SynthID構成を使ったスコアリングには対応します。
ウォーターマークを削除することは合法ですか?
所有するコンテンツのメタデータや出所マークを削除すること自体が本質的に違法とは限りません。ただし、学術ポリシー、契約、プラットフォーム規約のAI開示義務に違反する可能性があります。適用される規約を確認してください。
統計的なマークがなくなったことを確認する方法はありますか?
Anthropicの秘密鍵がないため、現時点で独自に完全な検証を行うことは困難です。公開予定の検出APIが利用可能になれば、それが確認手段になります。不可視Unicode文字とC2PAメタデータについては、inspect_file.pyとc2patoolで検証できます。

Top comments (0)