HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

「古典的」機械学習によるLLM生成テキストの検出

Detecting LLM-Generated Texts with “Classical” Machine Learning (blog.lyc8503.net)

220 pointsby uneven9434165 コメント

要約

この記事では、2026年初頭の時点で、主流のLLM生成テキストが人間が書いたコンテンツと統計的に大きく異なり、従来の機械学習モデルで効果的に区別できることを示しています。これは、多くの「AI剽窃チェッカー」が内部で機能している方法であると推測されています。実験では、TF-IDF特徴量と線形SVC(サポートベクター分類器)を用いた単語レベルの分類で約85%の精度が達成されました。

全文翻訳

この記事は現在、実験的な機械翻訳であり、誤りを含む可能性があります。不明な点がある場合は、元の中国語版を参照してください。翻訳の改善に継続的に取り組んでいます。 TL;DR & デモ 2026年初頭の時点で、主流のLLM生成テキストは、従来の機械学習モデルを使用して人間が書いたコンテンツと効果的に区別できる強い統計的パターンを示しています。私はこれが多くのいわゆる「AI剽窃チェッカー」が実際には内部でどのように機能しているかの方法であると推測しています。 オンラインデモ:https://lyc8503.github.io/AITextDetector/ このデモで使用されているモデルは、汎用データでトレーニングされたものではなく、厳密な最適化やイテレーションを経ていません。単一文の検出精度は、テストセットで約85%です。潜在的な制限を理解するために、使用前にこの記事をよくお読みください。 コアコード(ドラフト)とトレーニング済みモデルファイルはGitHubで入手可能です:lyc8503/AITextDetector 背景(無駄話) 半年前、学校でまだ論文を書いていた頃、AIGC(AI生成コンテンツ)をチェックすることに関する噂がすでに広まっていました。私はCNKI、Wanfang、およびいくつかのサードパーティのAIGC検出サービスをテストし、それらが私の手書きテキストとLLM生成テキストをかなりの精度で区別できることを発見しました。 それが、AIGC検出が実際にどのように機能するのか(そしてそれを回避する方法)についての私の好奇心を刺激しました。 しかし、当時は他の多くのことに追われていました—ラジオ、Minecraft、東方Projectに夢中でした—そして数回の失敗した試みの後、私はそのアイデアを棚上げしました。 結局、私は論文を何とか書き上げ、人生は進みました。しかし最近、Lofterを閲覧しているときに、低品質でキャラクター設定から大きく外れたAI生成ファンフィクションで溢れたタグ全体につまずきました。 一目でAIだとどうしてわかるのか?まあ、一部の人々(または女性たち)は、MarkdownフォーマットやAI生成の見出しをクリーンアップせずに投稿し、記事の半分をペイウォールの後ろに隠しています😓 しかし、ほとんどのAI生成テキストは発見が困難です—それらは多様な文章スタイル、さまざまなプロンプトの中に埋もれており、すぐに明らかではありません。何かがおかしいと気づいたときには、もう手遅れです。一部のテキストはAIであると証明することがほぼ不可能で、私をパラノイアにさせます。AI生成のゴミをいくつか飲み込んだ後、私はついに我慢できなくなりました。Lofterの閲覧はここで終了—VS Codeを開く時です! そう、週末プロジェクトのアイデアを復活させることになったのです:AI生成テキスト検出器の構築… 研究試行 – 成果なし AIGC検出を検索すると、インターネットは広告でほぼ完全に汚染されています。すべての結果は、別のエッセイ-AI書き換えサービスです。当時、私はノイズを掘り下げ、「テキストのパープレキシティ」と呼ばれるものを見つけました。 アイデアはシンプルです:既存のLLMを使用して、与えられた文に各単語が出現する確率を推定します。ほぼすべての単語がLLMの予測(Top-N)で高いランクにある場合、その文はAI生成である可能性が高いです。逆に、多くの単語が予期しないものであれば、人間が書いたものである可能性が高いです。 有望に聞こえますよね?私はこの方法を試すのに時間を費やしましたが、結果は残念でした—多くの偽陽性(false positives)と偽陰性(false negatives)があり、合理的な閾値を設定できませんでした。さらに、実用的な問題があります:高い推論コスト、モデル間の汎化性能の低さ、ローカルでの大規模モデルのデプロイの難しさ、およびクローズドウェイトモデルの統合の困難さ。全体として、このアプローチはエレガントでも信頼性もありません。 失敗した試み—たくさんのソフト広告の「チュートリアル」に騙された A(ある程度)成功した試み – scikit-learn SVM オンラインリソースが役に立たなかったので、昔ながらの錬金術に戻りました。 Scikit-learn、起動!そのロードマップに従って、分類タスクの良い出発点として線形SVCとナイーブベイズを直接選択できます。 (ささやき:これは私の直感とも一致しました—LLMには検出可能な単語選択パターンがあります;ナイーブベイズ分類器でさえそれを拾うはずです。信号がこれほど強いとは予想していませんでした。) データ生成 昔ながらの錬金術の伝統的な分類器にはラベル付きデータが必要です—だから、トレーニングのために人間が書いたテキストと確認済みのLLM生成テキストが必要です。 私の方法:2023年に特定のFord風およびRiver風のプラットフォームからスクレイピングしたデータを収集し、2010年から2022年(ChatGPT以前)の間に公開された記事をフィルタリングしました。非常にエンゲージメントが低い、または非常に短いピースを除外し、数千文字以上のマルチテキストを約10,000件ランダムにサンプリングして人間が書いたサンプルとしました。 次に、LLMを使用してこれらのテキストの章の要約を生成し、要約をLLMにフィードバックして、記事全体を再生成させました。これにより、ジャンルが多様で元の人間コンテンツに非常に近い、ほぼ同数のLLM生成サンプルが得られました。 理論上は、少なくとも。しかし、LLM APIは高価であり、週末プロジェクトに数千ドルを費やすつもりはありませんでした。そこで私は創造的になり—ルールを回避し、複数の低コストまたは無料のAPIチャネルを活用しました: Gemini:CLIProxyAPIを使用してAntigravity/Gemini CLIクォータをAPIアクセスに変換しました—AI Proアカウントに約20ドルを支払うだけでした。 Qwen:qwen-codeを使用すると、Qwen Plus APIをリバースエンジニアリングできます—無料。 GLM-5:幸運なタイミング—OpenRouterが無料のGLM-5パブリックベータ(Pony Alpha)を提供していました。 Kimi、Deepseek、Doubao、GLM-4.7:プロモーションコーディングプラン中にサインアップしました—最初の月8.9ドル、APIアクセスがアンロックされました。 免責事項:これは推奨ではありません。これらの行為はプラットフォームの利用規約に違反しており、禁止される可能性があります。しかし、プラットフォームはマーケティングの誇大広告で忙しすぎて気にしておらず、私は定価を支払うつもりはありませんでした。 多くのプログラミング中心のLLM APIは奇妙なことに呼び出しごとに課金されますが、タスクを大規模な入力にバッチ処理することでこれを悪用最適化できます。これにより、LLMは呼び出しごとにコンテンツをより多く生成せざるを得なくなります。そして… 私がフルプライスで2000ドル相当の3億以上のGeminiトークンを使用したとはどういうことですか?! 最終的に、gemini-3-flashを使用して要約を生成し、7つの異なるモデル(gemini-3-pro、qwen-coder-plus、glm-5、glm-4.7、kimi-k2.5、doubao-seed-code、deepseek-v3.2)を使用して7セットのLLM生成サンプルを生成しました。 生成されたファイル トレーニング データ生成の途中で、私は待てずにトレーニングを開始しました。 Claudeに分類器コードを書くように頼んだところ、それは無邪気に生のテキスト全体をモデルにダンプし、疑わしい99.45%の精度を達成しました…本当に? Claudeは役に立たない。自分でやろう。トレーニングのために、すべてのテキストを中国語の句読点で文に分割し、中国語/英語以外の文字をクリーンアップしてから、scikit-learnのTF-IDF → LinearSVCを適用しました。ノイズをいくつかクリーンアップした後、文レベルの分類で約85%の精度に達しました! このバグのある最初のバージョンでさえ88%の精度を達成しました(後に85%に最適化されました)。 個々の文は限られた情報しか持ちませんが、文あたりの85%の精度は、長い記事の場合、AI生成かどうかを判断する際に高い確信を持てることを意味します。このパフォーマンスは私の期待をはるかに超えていました。昔ながらのMLは依然として強力です—LLMに「ねえ、このテキストはAI生成ですか?」と尋ねるだけの、あの愚かなオンラインツールよりもはるかに優れています。 すべてのデータが完成した後、8クラスのモデル(人間+7つのAI)をトレーニングしようとしましたが、LLMはあまりにも似ているようです—おそらく互いに蒸留されているのでしょう—そのため分類は混乱し、精度は約50%でした。 マルチクラスの結果—分離できないようです。私のモデルが悪いのかもしれませんが、とにかく、重要ではありません。 最終的に、7つの個別のバイナリ分類器をトレーニングし、多数決を使用しました:≥2つのモデルが検出した場合、文はAIとしてフラグ付けされます。 1234567891011121314151617181920212223242526272829303132333435 8536サンプルをロードしました トレーニングチャプターサイズ:6820、テストチャプターサイズ:1716 [gemini] トレーニング:917,374 テスト:228,051 [gemini] フルTF-IDF + SVC ... 3,336,446 特徴 -> acc=0.8809 f1=0.8082 [tn=143688 fp=10650 fn=16503 tp=57210] [qwen] トレーニング:1,315,338 テスト:328,636 [qwen] フルTF-IDF + SVC ... 3,989,603 特徴 -> acc=0.8911 f1=0.8974 [tn=136293 fp=18045 fn=17739 tp=156559] [pony] トレーニング:1,128,044 テスト:278,663 [pony] フルTF-IDF + SVC ... 3,688,143 特徴 -> acc=0.8493 f1=0.8286 [tn=135085 fp=19253 fn=22755 tp=101570] [kimi25] トレーニング:1,088,007 テスト:269,567 [kimi25] フルTF-IDF + SVC ... 3,976,027 特徴 -> acc=0.8721 f1=0.8473 [tn=1393