Классическое машинное обучение поймало ИИ-текст с точностью 85%

Автор блога lyc8503.net (позже опубликовал код под ником lyc8503 на GitHub) написал дипломную работу, столкнулся с системами проверки на ИИ-контент (CNKI, Wanfang и сторонние сервисы) и заметил, что они неплохо отличают его собственный текст от текста, сгенерированного языковой моделью. Позже, листая китайскую платформу фанфиков Lofter, он обнаружил целые разделы, забитые низкокачественными ИИ-фанфиками, часть авторов даже не убирала за собой markdown-разметку и служебные заголовки, сгенерированные моделью. Это подтолкнуло его сделать детектор ИИ-текста своими руками.
Первая попытка, оценка перплексии (насколько предсказуемо каждое слово предложения для языковой модели): результат разочаровал, метод давал много ложных срабатываний и пропусков, требовал дорогих вызовов LLM и плохо переносился между моделями.
Вторая попытка оказалась удачной: классические алгоритмы scikit-learn, TF-IDF в связке с линейным SVM (LinearSVC) и наивным байесовским классификатором. Для обучения понадобились размеченные данные: автор взял около 10 000 текстов, написанных людьми в 2010, 2022 годах (собраны им ранее, до появления ChatGPT), и сгенерировал сопоставимое по объёму количество ИИ-версий тех же материалов, сначала LLM делала краткое содержание текста, затем по этому содержанию модель писала статью заново. Для генерации использовались семь разных моделей (gemini-3-pro, qwen-coder-plus, glm-5, glm-4.7, kimi-k2.5, doubao-seed-code, deepseek-v3.2), а краткие содержания готовила gemini-3-flash. Доступ к части моделей автор получил дёшево или бесплатно окольными путями, через реверс-инжиниринг API, бесплатные бета-программы и промо-тарифы, прямо признавая, что это нарушает условия использования сервисов.
Первая версия классификатора, которую по просьбе автора написал Claude, просто скормила модели сырой текст целиком и выдала подозрительные 99,45% точности, автор счёл результат недостоверным и переделал пайплайн сам: тексты разбивались на предложения, чистились от посторонних символов, после чего применялись TF-IDF и LinearSVC. После чистки точность классификации отдельных предложений составила около 85%. Попытка научить одну модель различать не только «человек/ИИ», а все восемь классов (человек + семь моделей) провалилась, LLM оказались слишком похожи друг на друга (возможно, из-за дистилляции), точность упала до ~50%. Поэтому автор обучил семь отдельных бинарных классификаторов (по одному на каждую ИИ-модель) и объединил их голосованием: предложение считается ИИ-сгенерированным, если так его пометили минимум два классификатора из семи. Все семь классификаторов показали точность выше 85% и F1-меру выше 80%. Другие подходы, MultinomialNB, SGDClassifier, BERT, AutoGluon, либо проигрывали по точности, либо требовали неоправданно много ресурсов (AutoGluon вообще дал лишь около 53%).
Чтобы не поднимать сервер, автор реализовал инференс прямо в браузере на JavaScript: изначально планировал экспортировать модель в ONNX и гонять её через ONNX Web Runtime на Wasm, но Claude по своей инициативе вместо этого экспортировал модель в JSON и реализовал TF-IDF и SVM целиком на JavaScript. Автору решение понравилось, обработка миллиона символов текста занимает около 10 секунд, обычный текст в несколько тысяч символов проверяется мгновенно. Полная модель использует 500 тысяч признаков и весит 107 МБ (около 38 МБ в сжатом виде); уменьшение числа признаков до 50, 80 тысяч экономит место, но снижает точность на 3, 4% и сильно увеличивает разброс ложных срабатываний на текстах, написанных людьми, поэтому автор оставил полную версию (итоговая потеря точности от урезания модели для веб-демо, около 1%).
При тестировании детектор классифицирует итоговый текст по доле «подозрительных» символов: ниже 50%, «человек», 50, 70%, «вероятно человек», выше 70%, «вероятно ИИ». Тексты моделей, присутствовавших в обучающей выборке (Doubao, Deepseek), детектор ловил уверенно; на незнакомых моделях (MiMo-V2, Doubao-Seed-2.0, GPT-4o) детектирование составило около 70%, местами выше 90%. Более сложный сценарий, модель дописывает 20 глав человеческого текста, имитируя стиль, снизил обнаружение до 67,8%. На десяти реальных, полностью написанных людьми веб-новеллах (до 2022 года) детектор показал 4,9, 29,1%, все результаты ниже порога «ИИ». На случайных фанфиках с Lofter обнаружение обычно было ниже 10%, а на текстах, которые автор заранее подозревал в использовании ИИ, показатель подскочил до 83,4%. В обновлении от 5 марта 2026 года автор протестировал детектор на 10 000 популярных фанфиков с Lofter, опубликованных до 2022 года: при пороге 60% доля ложных срабатываний составила 0,04%, при пороге 70%, менее 0,01%, при пороге 50%, 0,33% (единственные ложные срабатывания выше 60% оказались служебными страницами со списками ссылок, а не рассказами). Затем автор прогнал через детектор все статьи из топ-20 трендовых тегов Lofter Android за неделю: 32,22% материалов получили оценку выше 50% (то есть, вероятно, написаны ИИ полностью или частично), и ни один автор не указал использование ИИ.
Автор также проверил детектор на устойчивость к типичным способам обхода. Двойной перевод (китайский → английский → китайский) через Google Translate снизил показатель с 89,9% до 85,0%, через Youdao, до 79,2%, через Sogou, до 86,0%: детектор всё равно уверенно ловил текст. Просьба к LLM «переписать текст, убрав ИИ-стиль» снизила показатель до 83,0% (простой промпт) и 79,3% (более сложный промпт), тоже без реального успеха. Автор заключает, что метод устойчив к простым уловкам обхода, а по-настоящему сломать его можно было бы разве что дообучением модели на массиве человеческих текстов или созданием отдельного детектора-обходчика, но этим он заниматься не планирует.
Ключевые факты
- Классические алгоритмы (TF-IDF + LinearSVC из scikit-learn) распознают ИИ-текст на уровне отдельных предложений с точностью около 85%, это обошло и метод перплексии, и «спроси у LLM напрямую»
- Обучающая выборка: около 10 000 человеческих текстов 2010, 2022 годов плюс сопоставимый объём ИИ-версий тех же материалов от семи моделей (gemini-3-pro, qwen-coder-plus, glm-5, glm-4.7, kimi-k2.5, doubao-seed-code, deepseek-v3.2); финальный детектор, голосование семи бинарных классификаторов (нужно ≥2 голоса «за ИИ»)
- На выборке из 10 000 популярных фанфиков платформы Lofter, написанных до 2022 года, ложные срабатывания составили 0,04% при пороге 60%; при этом 32,22% свежих трендовых материалов с той же платформы детектор оценил как вероятно ИИ-сгенерированные, хотя ни один автор не указал это в описании
- Инференс полностью работает в браузере на JavaScript без сервера, весит около 38 МБ в сжатом виде, обрабатывает миллион символов текста примерно за 10 секунд; код и веб-демо выложены в открытый доступ
- Простые способы обхода (двойной перевод, просьба к LLM «убрать ИИ-стиль») снижают показатель детектора лишь на несколько процентных пунктов и не спасают текст от обнаружения
Почему это важно
Находка контринтуитивна: сложные подходы к детекции ИИ-текста (оценка перплексии через большую LLM, прямой вопрос к модели «это ИИ-текст?») работают хуже простой классической связки TF-IDF + линейный SVM, обученной на размеченных данных. Это показывает, что для практической задачи детекции ИИ-контента не нужна тяжёлая инфраструктура, работает лёгкая, дешёвая в инференсе модель, которую можно целиком запустить в браузере.
Кому это важно
В первую очередь, платформам с пользовательским контентом (фанфик-сайты вроде Lofter, форумы, блог-платформы), которые хотят маркировать или фильтровать ИИ-генерируемый спам; учебным заведениям и издательствам, проверяющим тексты на ИИ-происхождение; разработчикам антиплагиатных и модерационных инструментов, которым интересен лёгкий open-source детектор без серверной части.
Как это применить
Код и обученные модели выложены на GitHub (lyc8503/AITextDetector), есть работающее веб-демо, которое запускает детекцию полностью на стороне браузера без сервера. Любой желающий может проверить свой текст через демо или встроить готовую модель в свой проект. Автор прямо предупреждает: модель обучена в основном на китайскоязычных материалах и художественных текстах, поэтому для других языков и жанров точность не гарантирована.
Можно ли доверять
Это личный проект выходного дня, а не рецензируемое исследование, но автор прозрачно описал методологию: как собирались данные, как проверялась точность, какие альтернативные модели пробовались и почему отбрасывались. Показатель ложных срабатываний (0,04% при пороге 60%) проверен на отдельной выборке из 10 000 реальных текстов, не пересекающейся с обучающей, это придаёт результатам вес. Одновременно часть методологии вызывает вопросы: автор получил доступ к нескольким платным LLM-API дёшево или бесплатно способами, прямо нарушающими условия использования сервисов, а обучающие данные, это скрапинг чужого контента с платформы фанфиков.
Риски и подводные камни
Модель обучена преимущественно на китайском языке и художественных текстах, перенос на другие языки, стили и типы контента не проверялся. Точность 85% на уровне отдельного предложения означает заметную долю ошибок в чувствительных сценариях (учебные и юридические проверки), даже если на уровне целого текста результат надёжнее. Полная модель весит около 38 МБ в сжатом виде, что заметно для веб-страницы. Способ получения обучающих данных и доступа к части LLM-API нарушает условия использования сервисов, повторение этого подхода несёт юридические и репутационные риски. Наконец, простые способы обхода (двойной перевод, переписывание через LLM) хоть и не ломают детектор полностью, но заметно снижают показатель, более изощрённый противник (например, дообученная под обход модель) может оказаться эффективнее.
«Старая добрая классика в машинном обучении рвёт, куда лучше тупых онлайн-инструментов, которые просто спрашивают у ИИ: «Это текст сгенерирован ИИ?»»
— автор блога lyc8503.net (GitHub: lyc8503)