0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI検出器にAIを10本食わせたら、5本が「人間」で戻ってきた

0
Last updated at Posted at 2026-07-15

AIが書いた文章を10本、AI検出役のLLMに食わせた。5本は素のAI文、5本はAI臭さだけ消した文。全部AIが書いている。
結果、素のAIは100%見抜かれ、AI臭を消したAIは100%「人間が書いた」と判定された。判定者の平均確信度は90%。全員、自信満々で間違えた。
わかったのは残酷な事実だった。AI検出器は「AIかどうか」を見ていない。「文体がAI臭いかどうか」を見ているだけだった。

逆チューリングテストの結果(AIが書いた10文 × 判定者3体 = 30判定)

50%
全体の正答率
(AIをAIと見抜けた率)
100%
素のAI文が
「AI」とバレた率
100%
臭い消しAI文が
「人間」に化けた率
90
判定者の
平均確信度

結論の先出し: 検出しているのは出自ではなく、推敲したかどうか。

この記事でわかること

  • AI検出役のLLMに、AI生成文だけを10本食わせるとどう判定されるか(実測)
  • 「AI臭さを消す」加工だけで、検出をどれくらいすり抜けられるか
  • 判定者3体が全員そろって見ていた、たった1つの特徴
  • 「AI生成かどうか」でコンテンツを弾く運用が、なぜ原理的に空振りするか

対象読者

  • AI生成物の検出・判別に関心がある人(採用・教育・メディア運営など)
  • 「この文章AIっぽい」と言われて、その正体が気になっている書き手
  • LLMを判定器(LLM-as-a-judge)として使うことを検討している人

目次


きっかけは自分の禁止語ルールだった

自分の書き物には、AI臭い定型語を禁止するルールを1年効かせている。「まさに」「ぜひ」「〜と言えるでしょう」「させていただきます」あたりをハード禁止した禁止語リストで、文章の質を上げるために作ったものだ。

ある日ふと引っかかった。この「臭い消し」を通した文は人間らしく読める。じゃあ同じ加工をAIの生成文にかけたら、AI検出器を騙せるのか。もっと言うと、検出器は本当に「AIが書いたかどうか」を見ているのか、それとも「AIっぽい書き方かどうか」を見ているだけなのか。

これは手元で測れる。判定する側をLLMにして、被験者を全部AIが書いた文にすればいい。人間が一切書いていない土俵で「これは人間だ」という誤判定がどれだけ出るかを見る。出るなら、検出器が見ているのは出自ではないことになる。やってみた。

環境: Claude Code上でサブエージェントを使い、回答生成役・判定役を別々のエージェントに分離。判定役には文体の由来を一切伏せた。


逆チューリングテストの設計

普通のチューリングテストは、人間が判定者になって相手が人間かAIかを当てる。今回はそれをひっくり返して、AIを判定者にする。そして被験者は全員AIにする。人間らしく「見える」かどうかだけを測る装置になる。

手順はこう。

  1. 技術Q&Aを5問用意する(gitignore、datetime、並列処理、cron、MCPの定番どころ)
  2. 各問に2つの回答を作る。ひとつはわざとAIらしく書いた版、もうひとつはAI臭さを消して人間らしく書いた版。どちらも書いたのはAIで、指示の文体だけ変えた
  3. 合計10文を、由来を伏せてシャッフルし、独立した判定AI3体に「人間が書いたか、AIが書いたか」を確信度つきで判定させる
  4. 全10文の正解は「AI」。人間判定が出たら、それは検出器が騙された回数になる

判定者3体は互いの結果を知らない。回答を生成したエージェントとも切り離してある。判定の独立性はここで担保した。

tally.py
# 全10文はAIが書いた。truthが"ai"=素のAI、"human_mimic"=人間らしく偽装したAI
# 判定者から見た正解ラベルは、どちらも "ai"(書き手はAIだから)
def gold_label(truth: str) -> str:
    return "ai"

# human_mimic を "human" と誤判定した回数 = 検出器が騙された回数
mimic_fooled = sum(
    1 for r in verdicts
    if specimens[r["id"]]["truth"] == "human_mimic" and r["verdict"] == "human"
)

被験者を並べてみる

同じ問い(cronでcommand not foundになる理由)への2つの回答を並べる。どちらもAIが書いた。

素のAI版(S07):

まず、cronで実行した際に「command not found」となる主な原因は、cron実行時の環境変数、とりわけPATHが対話的なシェルとは異なることにあります。cronは最小限の環境で動作するため、ログイン時に設定される.bashrcや.zshrcが読み込まれず、普段使えるコマンドのパスが通っていないケースが多く見られます。(中略)実行前に環境を確認することが重要です。

AI臭を消した版(S08):

cron が持ってる PATH が、ログインシェルのそれと別物だから。ターミナルで動くのは .zshrc や .bashrc が読み込まれて PATH が育ってるおかげで、cron はそれをほぼ読まない。(中略)自分は node が command not found で3回踏んでるので、cron に書くスクリプトは頭で PATH を宣言する癖がついた。

内容はほぼ同じ。違うのは書き方だけ。S08には「3回踏んでる」という失敗の手触りが入っている。ただ、これも含めてAIが生成した文だ。人間は一文字も書いていない。


結果、判定者は真っ二つに割れた

30判定(10文 × 3体)の集計がこれ。

被験者グループ 文数×判定者 判定結果
素のAI文 5文 × 3体 = 15 全部「AI」と判定 100%見抜き
AI臭を消したAI文 5文 × 3体 = 15 全部「人間」と判定 100%誤判定
全体 30 AIをAIと当てた 50%

判定者別に見ても、A・B・Cの3体とも10問中ちょうど5問正解。5問はずれ。しかも、はずした5問は3体とも完全に一致した。同じ5文(臭い消しAI)を、3体そろって「人間」と答えている。

偶然ではない。同じトピックのペアで、素のAI版を「AI」、臭い消し版を「人間」と、全判定者がきれいに割った。判定は文体だけに反応していて、内容の出自には一切反応していなかった。

そして確信度。誤判定した15件の平均確信度は約90だった。judgeたちは「これは人間だ、確信度90」と言いながら、AIが書いた文を人間認定していた。迷って外したのではない。自信を持って外した。ここがいちばん怖い。


判定の根拠を読むと、全員が同じ所を見ていた

判定者に理由も書かせておいた。並べると、3体がまったく同じ特徴を見ていたのがわかる。

AIと判定した根拠(素のAI文に対して):

  • 「『〜が重要です』で締める定型、『注意が必要です』『推奨されます』、体験談ゼロ」
  • 「『まず』開始+一般論の教科書構成」
  • 「NG語『言えるでしょう』+『重要』の2連発」

人間と判定した根拠(臭い消しAI文に対して):

  • 「『3回踏んでる』『癖がついた』の実体験と口語」
  • 「『2時間溶かした』の失敗談、『まずここ見ると早い』の締め」
  • 「『数字は大きけりゃいいってもんじゃない』の地声」

見ての通り、判定の軸は2つしかない。定型接続語(まず・また・〜と言えるでしょう・重要です)があるか。そして具体的な失敗談と口語のリズムがあるか。この2点だけで人間/AIを振り分けていた。

皮肉なのは、後者の「3回踏んでる」も「2時間溶かした」も、AIに「実体験っぽい具体を入れろ」と指示して生成させた作り物だという点だ。作り物の失敗談で、検出器は100%「人間」と判断した。


検出しているのは出自ではなく怠惰さ

ここから言えることは、わりと重い。

AI検出器(少なくともLLM-as-a-judge型の素朴なそれ)は、「AIが生成したか」を判定できていない。判定しているのは「AIのデフォルト文体か、それとも推敲された文体か」だ。この2つは全然ちがう。

素のAI文が持つ「まず」「また」「〜と言えるでしょう」「〜が重要です」は、AIの出自マーカーではなく、推敲されていないことのマーカーだ。人間だって、急いで書いた説明文はこの手の定型で埋まる。逆にAIでも、文体を指定して推敲させれば消える。今回の実験は、その消えることを100%の再現性で見せた。

だから「AIっぽい文章」の正体は「AIが書いた文章」ではない。「手を入れていない文章」だ。この区別は実務で効いてくる。

  • 採用でAI生成の職務経歴書を弾きたい: 弾けるのは「加工していない応募者」だけ。少し推敲する応募者はすり抜ける。検出しているのは能力ではなく手間のかけ方になる
  • 学校でAIレポートを検出したい: 同上。検出器を通す=文体を整える、という新しい作業を課しているだけになりかねない
  • メディアがAI記事を排除したい: 排除できるのは雑なAI記事だけ。丁寧なAI記事は人間記事と区別できない

「AI生成物かどうか」を機械的なゲートにするのは、原理的に空振りする。ゲートが見ているのは出自ではなく、通す側の丁寧さだから。


自分のNG語リストが、検出器の特徴量そのものだった

この実験、自分にとってのオチは別のところにあった。

冒頭に書いた、1年運用している禁止語ルール。あれの狙いは文章をよくすることだった。

今回、判定者3体が「AI」判定の根拠に挙げた語を並べたら、自分のNG語リストとほぼ完全に一致していた。自分が「ダサいから使うな」と禁止していた語は、AI検出器が「AIの証拠」として唯一見ている特徴量だった

つまり自分は1年かけて、無意識にAI検出をすり抜ける訓練をしていたことになる。文章をよくしようとしていただけなのに、副産物として「AIっぽさの指紋」を消していた。検出器から見れば、自分の書き物はどんどん判別不能に近づいていたわけだ。

これは書き手全員に起きることだと思う。AI臭さを抜く努力と、AI検出をすり抜ける行為は、技術的に完全に同じことをしている。前者を推奨して後者を検出しようとするのは、同じコインの裏表を別々に扱おうとしている。


注意点・この実験で言えないこと

正直に限界を書く。ここを飛ばすと実験がただの釣りになる。

「人間サンプル」が本物の人間ではない。今回の被験者は10文とも生成物で、片方を「人間らしく書いたAI」にしただけ。厳密には人間対AIの判別ではなく、文体Aと文体Bの判別を測っている。本物の人間が推敲せず殴り書いた文を入れたら、逆に「AI」と誤判定される可能性が高い。むしろそっちのほうが実害のある悲劇だ。

判定者も同系統のLLMだった。専用に訓練されたAI検出モデル(分類器)を使えば、統計的な特徴量で結果は変わりうる。今回言えるのは「LLMをそのまま判定器に使うと文体しか見ない」までで、検出技術全般の否定ではない。

サンプルが小さい。10文、3判定者、Q&Aという1ジャンル。長文のエッセイや、専門性の高い技術解説では分離の効き方が変わるかもしれない。100文規模でやり直す価値はある。

「推敲で騙せる」のは短文だからかもしれない。200〜300字なら文体の偽装は効きやすい。数千字の一貫性、事実の正確さ、独自の視点まで含めると、雑なAI長文はまた別の綻び方をする可能性がある。

これらを踏まえても、「LLM判定器は文体で人間/AIを振り分けていて、文体は加工で消せる」という中心の結果は動かないと思っている。


まとめ

AIが書いた10文を、AI判定者3体に食わせた。素のAIは100%バレて、AI臭を消したAIは100%人間に化けた。検出器が見ていたのは出自ではなく、推敲したかどうかだった。

「AIっぽい」は「AIが書いた」の証拠ではない。「手を入れていない」の証拠だ。ここを取り違えると、AI検出を軸にした運用は静かに空振りし続ける。

今日からやること

  1. 今日(10分): 手元のLLMに、自分がAIに書かせた文と自分で推敲した文を由来を伏せて判定させてみる。たぶん推敲した文は「人間」と返ってくる
  2. 今週: AI生成物を弾く運用を持っているなら、それが「出自」を見ているのか「丁寧さ」を見ているのかを一度確かめる。後者なら基準を作り直す
  3. 今月: 「AIっぽい文章」という指摘を受けたら、出自の話ではなく推敲不足の話として受け取る。直すべきは書いた主体ではなく、手の入れ方

参考ソース:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?