# LLM生成テキストの統計的検知: TF-IDF+SVMによるAIGC分類器の構築 個人ブログ記事(著者: [[lyc8503]])。2026年初頭時点の主流 LLM が生成するテキストには強い統計的パターンが残っており、伝統的な機械学習モデル(TF-IDF + Linear SVC)で人間執筆テキストと十分に区別できることを、週末プロジェクトとして実証した。オンラインデモとコードは [[AITextDetector]] として GitHub に公開されている。 ## 背景 著者は卒業論文執筆時に、CNKI・万方(Wanfang)などの学術 AIGC(AI-generated content)検知プラットフォームが人間執筆と LLM 生成テキストをかなりの精度で判別できることに気づき、その仕組みに関心を持った。その後、中国の小説投稿プラットフォーム Lofter で低品質な AI 生成二次創作(ファンフィクション)が氾濫しているのを見て、AI生成テキスト検知器を自作するに至った。 ## 試行1: パープレキシティベース検知(失敗) 既存 LLM を用いて文中の各単語の出現確率を推定し、ほぼ全単語が Top-N 予測内に収まっていれば AI 生成と判定する[[パープレキシティ]]ベースの手法を試したが、次の理由で断念した(Source: [[AI生成テキスト分類器]])。 - 偽陽性・偽陰性が多く、実用的な閾値を設定できない - 推論コストが高い - モデル間の汎化性能が低い - 大規模モデルのローカル配備が困難、closed-weight モデルとの統合も難しい ## 試行2: scikit-learn による TF-IDF + Linear SVC(成功) ### データ生成 2023年にスクレイピングした中国の小説投稿系プラットフォーム(2010〜2022年、ChatGPT登場以前)から約1万件の人間執筆テキストをサンプリング。各テキストの章要約を LLM に生成させ、その要約から LLM に本文を再生成させることで、ジャンルが揃った LLM 生成サンプルを同数用意した。 低コスト API を確保するため、以下のような手段でモデルアクセスを調達している(倫理的にはグレーな手法として著者自身が明記している点に留意)。 - Gemini: CLIProxyAPI 経由で Antigravity/Gemini CLI のクォータを API アクセスに転用 - Qwen: qwen-code 経由で Qwen Plus API を利用 - GLM-5: OpenRouter の無料ベータ提供(Pony Alpha)を利用 - Kimi・Deepseek・Doubao・GLM-4.7: プロモーション課金プランで API アクセスを取得 要約生成には `gemini-3-flash`、本文生成には `gemini-3-pro`・`qwen-coder-plus`・`glm-5`・`glm-4.7`・`kimi-k2.5`・`doubao-seed-code`・`deepseek-v3.2` の7モデルを使用し、モデルごとに7セットの LLM 生成サンプルを作成した。 ### 学習 全テキストを中国語の句読点で文単位に分割し、非中国語/英語文字を除去した上で `TF-IDF` → `LinearSVC` を適用。文単位分類で約85%の精度を達成した(全文をそのままモデルに投入した初期実装では99.45%という疑わしい精度が出たため、この前処理を導入した)。 人間 + 7種類の AI を判別する8クラスモデルも試したが、各 LLM の出力が(相互蒸留の影響か)似すぎており精度は約50%に留まった。最終的にモデルごとに7つの二値分類器を個別に学習し、**2票以上が AI と判定した文を AI 生成とみなす多数決方式**を採用した。 各モデル単体での二値分類精度(文単位、TF-IDF全次元): | モデル | acc | f1 | |---|---|---| | gemini | 0.8809 | 0.8082 | | qwen | 0.8911 | 0.8974 | | pony (GLM-5) | 0.8493 | 0.8286 | | kimi25 | 0.8721 | 0.8473 | | glm47 | 0.8436 | 0.8222 | | doubao | 0.8940 | 0.8700 | | deepseekv32 | 0.8529 | 0.8403 | `MultinomialNB`・`SGDClassifier` は精度がやや低下、BERT は精度向上したが GPU コストが見合わず断念、`AutoGluon` は二値分類で53%程度と不振だった。 ### ブラウザ推論用 JS 実装 Python API のサーバー運用を避けるため(著者曰く "Serverless philosophy")、Claude にモデルの ONNX 変換を依頼したところ、Claude が独自判断で TF-IDF + SVM をまるごと JavaScript に移植する実装を作成した。100万文字のテキストでも約10秒で推論可能。 特徴量数は性能と精度のトレードオフを検証した上で50万次元を採用(JSON で107MB、gzip後約38MB)。5〜8万次元まで削ると精度低下は3〜4%だが、人間テキストでの誤検知率のばらつきが±50%相対誤差まで拡大したため、50万次元を維持した。50万次元でのフル精度からの低下は約1%(平均acc 0.8592、平均f1 0.8348)。 ## 評価結果 判定ロジック: 入力テキストを文単位に分割し、7モデルで多数決。フラグが立った文字数の割合を AI スコアとし、50%未満=human、50〜70%=maybe human、70%超=maybe AI と分類する。 - 訓練データに含まれるモデル(Doubao・Deepseek)で3000語ストーリー生成を指示 → Deepseek V3.2: 78.4%、Doubao Seed Code: 93.0% で検知 - **訓練データに含まれない未知モデル**でも検知: Claude Sonnet 4.6: 71.9%、GPT 5.2: 73.3%(MiMo-V2・Doubao-Seed-2.0・GPT-4oも約70%、一部90%超) - 人間執筆テキストへの模倣継続プロンプト(20章分の人間文体を模倣して続き生成)では検知率が67.8%まで低下するが依然検知可能 - 2022年以前完結のWeb小説10作品(訓練データに含まれない)は全て検知率30%未満 - Lofter の高閲覧数(5000超)・長文(2000字超)ファンフィクション1万件のサンプルでは、閾値60%で偽陽性率0.04%、70%で0.01%未満(誤検知した4件は全てリンク過多の目次ページ) - Lofter Android 週間トレンドタグ上位20件の全記事(長さでフィルタ)を検知したところ、**32.22%が AI スコア50%超**となり、うち AI 生成の事前開示があった記事は皆無だった ## 検知回避の試行(攻撃と防御) いくつかの回避手法を試したが、いずれも検知率を大きく下げるには至らなかった(基準値89.9%からの変化)。 | 手法 | AI スコア変化 | |---|---| | Google翻訳往復(中→英→中) | 89.9% → 85.0% | | 有道翻訳往復 | 89.9% → 79.2% | | 搜狗翻訳往復 | 89.9% → 86.0% | | 単純プロンプト("AI感を最小化して書き直せ") | 89.9% → 83.0% | | 複雑な脱AI感プロンプト([ai-flavor-remover](https://github.com/hylarucoder/ai-flavor-remover)) | 89.9% → 79.3% | 著者は、有効な回避には大量の人間文で LLM を fine-tuning するか、SVM がマッチした特徴量を的確に破壊するルールベースシステムの構築が必要だろうと推測しているが、検証はしていない。 ## 著者の見解 著者は AI 生成の創作コンテンツを正当な創作行為として認めておらず、AI コーディングツールが肥大化した保守困難なコードを生む現象になぞらえ、AI 生成テキストは「一見良さそうだが、反復的・表層的で、単語頻度統計だけでも見破れるほど予測可能」と評している。 ## 出典 - URL: https://blog.lyc8503.net/en/post/llm-classifier/ - 著者: [[lyc8503]] - 公開: 2026-03-05(記事内の "[Mar 5, 2026 Update]" セクションの日付を採用。初出日は記事内に明記なし) - Raw: `.raw/articles/llm-classifier-2026-07-20.md` - コード・モデル: [[AITextDetector]](https://github.com/lyc8503/AITextDetector) - デモ: https://lyc8503.github.io/AITextDetector/ - ライセンス: CC BY-NC-SA 4.0