На днях я разбирал, что показывают детекторы машинного текста: корпус из 1882 текстов, четыре независимые процедуры оценки. Вывод оказался неудобным — оценку двигало форматирование и площадка, а снятие жирного шрифта переворачивало вердикт, хотя в тексте не менялось ни символа.

Оставался вопрос, который снаружи не решается. Перплексионные детекторы и метод log-likelihood — самое дешёвое и распространённое семейство — стоят на одной величине: средней неожиданности слова для языковой модели. Величину эту я тогда не измерял, детектор её не показывает. Чтобы посчитать её самому, нужны логиты: числа, которые модель выдаёт до того, как они превращаются в вероятности.

Я взял четыре языковые модели, посчитал вероятность каждого слова в корпусе из 3902 русских SEO-текстов и посмотрел, что эта величина измеряет.

Забегая вперёд: по дороге нашлась проблема поважнее самой метрики. Разные живые человеческие сайты отличаются друг от друга сильнее, чем средний человек отличается от машины. Из-за этого даже признак, который ведёт себя устойчиво, не превращается в вердикт по одному тексту — и это ограничение снять нечем.

3902
документа в корпусе
четыре слоя, от архива 2007 года до статей 2026-го
4
модели-скорера
разных эпох, языков и архитектур
3 из 4
моделей дали обратное направление
у самого простого признака — средней предсказуемости

Сразу про объёмы, потому что «3902» без оговорки вводит в заблуждение. Весь корпус посчитала только первая модель, вторая — 3899 документов, третья и четвёртая — по 1107. Все четыре колонки чисел ниже посчитаны на общей части: 468 человеческих документов против 80 машинных.

Что детектор считает, когда показывает процент

Представьте, что модель идёт по тексту и на каждом шаге закрывает следующее слово ладонью, пытаясь его угадать. «Продвижение сайта» — угадала легко. «Продвижение пельменя» — не ждала совсем. Чем чаще модель угадывает продолжение, тем предсказуемее для неё текст.

Перплексионные детекторы стоят на одном предположении: машина должна писать предсказуемее человека, потому что сама выбирает слова с высокой вероятностью. Именно это предположение я и проверял.

Теперь термины. Неожиданность одного слова называется surprisal — русского однословного эквивалента нет, поэтому дальше пользуюсь английским. Считается она как минус логарифм вероятности слова: чем менее вероятно слово, тем число больше. Среднее surprisal по всему тексту, возведённое в экспоненту, и есть перплексия. Модель, которой измеряют текст, дальше называется скорером.

Вот как выглядит настоящий ряд. Двенадцать слов подряд из машинного текста моего корпуса, под каждым — его неожиданность для ruGPT-3 в натах:

страницу0,1 в0,2 свою3,7 базу0,1 и2,1 показывать9,3 её0,6 в2,7 результатах0,4 поиска0,1 Это4,5 два2,9

«Базу» после «в свою» модель предсказывает почти наверняка — 0,1. «Показывать» в этом месте она не ждала совсем — 9,3. Ряд из таких чисел и есть материал, с которым дальше работает детектор.

Простым языком

Детектор не читает текст, а угадывает его. Он идёт по словам и каждый раз спрашивает себя: я бы поставил здесь это слово? Там, где угадал — ставит маленькое число, где промахнулся — большое. Логика такая: машина пишет предсказуемо, значит у машинного текста угадывается больше слов.

Так устроены классические перплексионные детекторы и метод log-likelihood. Есть и другие подходы — Rank, Entropy, GLTR, DetectGPT считают иначе, — но перплексия остаётся самой распространённой и самой дешёвой.

Одна оговорка, без которой дальше будет путаница. Обычная языковая перплексия считается по токенам. Я сначала суммирую неожиданности токенов внутри слова, получаю пословный surprisal, и уже по нему считаю среднее и форму распределения. Абсолютные значения этой работы поэтому нельзя подставлять в токенные пороги готовых детекторов: сравнивать можно поведение признака, а не его шкалу.

Что пришлось изменить для русского текста

Короткий ответ, зачем вообще нужен отдельный эксперимент: готовые пороги нельзя перенести с английского. Русские слова иначе дробятся внутри модели, а SEO-текстов почти нет в русских наборах данных для детекции. Поэтому я не переносил чужой порог, а смотрел, как ведёт себя один и тот же признак внутри русского корпуса. Дальше — почему это важно технически.

Модель работает не со словами, а с токенами — кусками слов. Английское слово в среднем это полтора токена, русское больше, и насколько больше, зависит от модели. По моему корпусу медиана идёт от 1,237 токена на слово у YandexGPT-5-Lite до 2,335 у RWKV-4-World.

Отсюда первая правка метода. Если строить ряд по токенам, как в оригинальной работе, на русском он будет мерить морфологию наравне с предсказуемостью: у слова с богатым окончанием токенов больше, и в ряд оно войдёт несколько раз. Поэтому ряд строится пословно: неожиданность слова — это сумма неожиданностей его токенов.

Одно и то же слово — от 1,2 до 2,3 токена медиана токенов на слово по документам скорера 1,369 ruGPT-3 2,103 Qwen2.5 1,237 YandexGPT 2,335 RWKV потокенный ряд на русском мерил бы морфологию наравне с предсказуемостью — поэтому ряд строится пословно
Пороги перплексионных детекторов измерены на английском слове длиной в полтора токена — на русском их подставлять не во что. Медиана у YandexGPT-5-Lite 1,237 токена на слово, у RWKV-4-World 2,335, и от выбора модели зависит, что именно мерил бы потокенный ряд. Поэтому ряд в этой работе пословный.

Третья — жанр. В русских корпусах детекции машинного текста SEO-статей нет: ни в CoAT и RuATD, ни в AINL-Eval 2025, ни в MULTITuDE. Тексты, ради которых детектор нужен практику, лежат вне выборок, на которых его мерили.

Девять признаков ряда surprisal я взял из работы DivEye (Basani & Chen, arXiv:2509.18880, TMLR, февраль 2026): четыре момента распределения, две характеристики первых разностей, три — вторых. Формулы оставлены без изменений, заменена единица ряда: токен на слово. Оригинал проверялся на английском и китайском, русского в нём нет.

Корпус и четыре прибора

Четыре слоя, собранные по разным правилам, потому что ни один из них по отдельности не закрывает вопрос происхождения.

Корпус и то, сколько успела посчитать каждая модель слева состав корпуса, справа покрытие: 3902 — только у первой модели контролируемая генерация 591 — 231 человек и 360 машина архив до 2020 1810 — ChatGPT ещё не существовал живые блоги 2023–2026 1485 — авторство неизвестно мой блог 16 — машинный черновик и моя правка посчитано документов: 3902 · ruGPT-3 3899 · Qwen2.5 1107 · YandexGPT-5-Lite 1107 · RWKV-4-World общая для всех четырёх пара «человек против машины» — 468 документов против 80
Цифра 3902 верна только для первой модели: третья и четвёртая посчитали по 1107 документов, и во всех таблицах их колонки стоят на меньшей выборке. Сопоставимые числа по четырём моделям берутся с общей части — 468 человеческих документов против 80 машинных. Авторство гарантировано в трёх слоях из четырёх; у живых блогов его не гарантирует ничто.

Третий слой я намеренно не размечал как человеческий. После 2023 года ни один публичный SEO-блог не даёт такой гарантии, и метка «человек» была бы выдумкой.

Четыре модели-скорера
МодельОбученаРазмерУстройство
ruGPT-3рунет до 2020760 млнтрансформер
Qwen2.5мультиязычный, 20241,5 млрдтрансформер
YandexGPT-5-Liteрусский, 20258 млрдтрансформер
RWKV-4-Worldмультиязычный1,5 млрдрекуррентная, без внимания

Модели различаются одновременно архитектурой, размером, языком обучения, датой и токенизатором. Это не факторный эксперимент: почему они расходятся между собой, такой дизайн не объясняет. Он отвечает на другой вопрос — переживёт ли признак смену прибора.

Отбор в корпус: фильтр тематики, откалиброванный на размеченных данных, точность 0,994 при полноте 0,684. Плюс отсев рекламы, переводов, служебных страниц, текстов короче 700 и длиннее 5000 слов, дублей по шинглам. Каждый отказ записан с причиной.

Ошибка, которая едва не дала красивый вывод. Первый прогон третьей модели дал асимметрию 0,563 — правдоподобное число, из которого напрашивался вывод: на свежей русской модели признак не работает. Насторожили не метрики, а сырые средние: семь-девятнадцать нат на слово там, где две другие модели давали 3,6–5,5. Причина оказалась в стартовом токене: токенизатор YandexGPT ставит <s> в начало текста, а моё скользящее окно резало документ с произвольной позиции. Один и тот же фрагмент: медиана 23,84 без стартового токена и 1,38 с ним. После правки корпус пересчитан целиком, испорченные данные лежат в логах.

Что было известно до пререгистрации

Асимметрию и эксцесс я нашёл на первом корпусе из 591 документа, в разведке. Только после этого, 4 августа 2026 года, записал гипотезы с числовыми порогами — и проверял их уже на слое 2023–2026, который на тот момент ещё не собрал.

Всё, что появилось позже — расстояние от медианы до девяносто девятого процентиля, индекс Хилла, пороги в натах, перебор окон и положений фрагмента, четвёртая модель, — это разведка, а не проверка гипотезы. Разделять эти вещи важнее, чем выглядеть последовательным.

Уровень не переносится

Дальше пойдут числа вида 0,109 и 0,831 — это AUROC, и читать их надо не как проценты точности. AUROC показывает, насколько хорошо признак расставляет человеческие и машинные тексты по разные стороны шкалы: 0,5 — случайность, 1,0 — идеальный порядок, а значение ниже 0,5 означает, что признак работает, но в перевёрнутую сторону.

Средняя неожиданность слова, пара «человек против машины», по четырём моделям: 0,109 · 0,337 · 0,573 · 0,231. Трижды из четырёх признак смотрит в обратную сторону — человеческий текст оказывается предсказуемее машинного, хотя теория детектора обещает ровно наоборот.

Девять признаков, четыре прибора AUROC. Зелёное — признак выше у человека, терракота — у машины ruGPT-3 Qwen2.5 YandexGPT RWKV средний surprisal 0,109 0,337 0,573 0,231 дисперсия 0,420 0,669 0,747 0,629 асимметрия 0,697 0,831 0,696 0,807 эксцесс 0,612 0,772 0,700 0,733 среднее 1-х разностей 0,358 0,454 0,625 0,408 дисперсия 1-х разностей 0,324 0,549 0,680 0,527 дисперсия 2-х разностей 0,315 0,538 0,676 0,512 энтропия 2-х разностей 0,381 0,270 0,306 0,327 автокорреляция 0,566 0,556 0,562 0,617 строки со стабильным знаком: асимметрия, эксцесс, автокорреляция
Из девяти проверенных признаков устойчивыми оказались только характеристики формы распределения — они зелёные во всех четырёх столбцах. Строка средней предсказуемости трижды уходит в терракоту, то есть работает наоборот. Пять признаков меняют сторону при смене модели: веса, перенесённые с английского исследования без новой калибровки, часть сигналов прочитали бы задом наперёд. Колонки не независимы — все четыре модели считали одни и те же документы.

На третьей модели признак разворачивается, но осторожность здесь обязательна. При стандартной ошибке 0,036 значение 0,573 отстоит от монетки на два отклонения, а на полной доступной выборке та же модель даёт 0,526. Вот это уже ровно монетка: средние по классам расходятся на 0,009 — 3,230 у машины против 3,221 у человека.

Здесь нужна честность в обе стороны. AUROC 0,109 — это не отсутствие сигнала. Это сильная связь, только обратная: инвертируй оценку, и получишь 0,891.

Почему инверсия не спасает детектор. Zero-shot-детектор применяют вслепую, без размеченных данных — в этом весь смысл слова zero-shot. Направление признака, которое приходится подбирать по ответу, требует калибровки на размеченной выборке. Признаком surprisal при этом быть не перестаёт: его можно оставить входом обученного классификатора. Перестаёт работать именно тот режим, ради которого перплексию и берут.

Формулировка результата поэтому такая: общепринятое направление среднего surprisal между проверенными моделями и выборками не перенеслось, и без внешней калибровки признак для атрибуции без обучения непригоден. Разница с формулировкой «признак не работает» практическая: информация в нём есть, воспользоваться ею вслепую нельзя.

Форма распределения держит направление

Среднее оказалось плохим ориентиром, и я перестал спрашивать «насколько текст предсказуем в среднем». Вместо этого посмотрел, как разбросаны отдельные слова — и вот тут разница нашлась устойчивая.

У человеческих текстов чаще встречаются оба края сразу: и совсем банальные слова, которые модель угадывает с ходу, и слова, которых она не ждала вовсе. Машинный текст больше собирается посередине. Эту форму меряют тремя статистиками — асимметрией (насколько распределение вытянуто в сторону редких экстремальных слов), эксцессом (насколько тяжелы хвосты) и расстоянием от медианы до девяносто девятого процентиля. Все три смотрят в одну сторону на всех четырёх моделях.

Три меры формы распределения, пара «человек против машины»
МодельАсимметрияЭксцессМедиана — p99
ruGPT-30,6970,6120,624
Qwen2.50,8310,7720,805
YandexGPT-5-Lite0,6960,7000,821
RWKV-4-World0,8070,7330,767

Расстояние от медианы до девяносто девятого процентиля работает там, где асимметрия слабее всего: на фрагменте в 300 слов оно даёт 0,702 против 0,546 у асимметрии на русской модели, а между площадками гуляет в полтора раза против двух-трёх.

Признак пережил десять контролей: смену модели и архитектуры, ограничение по площадкам, выравнивание тем, сужение окна до пятидесяти слов, сравнение текстов одной эпохи со скорером, вычистку из ряда слов с латиницей, цифрами и заглавной буквы. Рекуррентная модель без механизма внимания даёт 0,807 — значит, эффект не ограничился протестированными трансформерами. Вклад архитектуры дизайн при этом не изолирует.

Обвязка страницы усиливала разделение, но не создавала его

А вдруг признак отличил не человека от машины, а веб-страницу от чистого текста? Это возражение я сам себе задать не догадался — проверку сделал уже после публикации препринта.

Классы прошли разные конвейеры. Машинные тексты попали в корпус прямо из ответа модели, человеческие извлечены из HTML — и принесли с собой обвязку страницы. Типичный человеческий документ начинается так: «ул. Архитектора Ишунина д. 6», следом «пн-пт с 9:00 до 18:00». Скорер даёт слову «Ишунина» 22,50 нат — и оно идёт в тот самый правый хвост, на котором держится асимметрия.

Проверить это удалось без повторного прогона моделей: дампы хранят посимвольные границы каждого слова, значит ряд пересчитывается по нужному подмножеству. Правило я задал до расчёта и одинаковое для всех классов: строка засчитывается в прозу, если в ней от двенадцати слов и она заканчивается знаком конца предложения.

Что остаётся, если убрать обвязку страницы асимметрия, человек против машины: весь ряд → только связная проза весь ряд только проза 0,859 → 0,802 · Qwen2.5 0,846 → 0,782 · RWKV 0,726 → 0,677 · ruGPT-3 0,710 → 0,630 · YandexGPT фильтр снимает 5,7% ряда у машинных текстов, 22,3% у архивных, 29,0% у живых блогов
Обвязка страницы усиливала разделение, но не создавала его: после одинакового для всех классов отбора связной прозы асимметрия теряет от 0,049 до 0,080 и сохраняет направление везде. Проверка снимает прямой вклад служебных строк и не снимает контекстный — скоринг шёл на ненормализованном входе, и обвязка стояла в контекстном окне модели.

Подозрение оказалось обоснованным: служебных строк в человеческих страницах действительно много. Фильтр снимает 5,7% ряда у машинных текстов, 22,3% у архивных человеческих и 29,0% у живых блогов. В живых блогах почти треть извлечённого ряда оказалась не связной прозой. Средний surprisal, к слову, от чистки не выздоровел: 0,113 · 0,373 · 0,601 · 0,245.

Чего эти числа не говорят. Тема у классов разная: машинная часть написана по пятнадцати заданиям, человеческая — о чём писали её авторы. Выровнять это нечем, человеческого корпуса под те же задания не существует. Поэтому корректная формулировка положительного результата такая: форма распределения сохранила направление между группами корпуса, собранными разными путями. Вклад авторства как такового этот дизайн не выделяет.

Два края распределения

У человеческого текста тяжелее правый хвост — редкие сильные неожиданности. Это половина картины. Вторая половина неожиданная: у него же больше слов, которым модель даёт необычно высокую вероятность.

Речь о словах, чей surprisal ниже одного ната. Средняя доля таких слов — 0,233 у человека против 0,134 у машины на первой модели и 0,149 против 0,102 на четвёртой.

Сравнивать края корректно только на шкале, нормированной на собственное среднее класса — на ней и работает асимметрия.

Человек занимает оба края, машина сидит в середине доля слов; шкала нормирована на среднее своего класса 10⁻¹ 10⁻² 10⁻³ 0 1 среднее 2 средних 4 средних неожиданность слова в долях от среднего по классу человек машина выше трёх средних: 3,2% у человека против 1,4% в самом левом бине 21,7% слов у человека против 11,9%
Человеческий текст держит оба края сразу, машинный сжат к середине: в самом левом бине 21,7% слов против 11,9%, а в хвосте выше трёх средних — 3,2% против 1,4%. Шкала нормирована на среднее своего класса, иначе сравнение форм некорректно: на абсолютной шкале у машины среднее выше, поэтому больших значений там больше.

Один нат — это вероятность выше 36,8%, а не «почти наверняка», и обольщаться формулировкой не стоит. Признак к тому же слабее асимметрии: по четырём моделям он даёт 0,923 · 0,705 · 0,547 · 0,800, то есть на русской почти отказывает, требует фрагмента от трёхсот слов и сильнее зависит от площадки.

Посмотреть, из чего сделаны края, можно прямо по словам. Верхние пять процентов неожиданности, самые частые слова:

Что чаще всего попадает в правый хвост
КлассСлова
Человекdevaka, sosnovskij, sape, fasttrust, comparser, cmsmagazine, «алаичъ», «заслужившие», «известность»
Машинаcanonical, sitemap, user-agent, googlebot, lastmod, noindex, screaming, sitebulb, «краулинговый», «самоссылающийся»

У человека хвост набивают ники, домены и площадки рунета — модель их не знает. У машины те же англоязычные термины из технического словаря, которые она сама и расставляет.

Первая мысль тут очевидная: значит, признак меряет плотность имён собственных, а не устройство письма. Мысль правильная, и проверена она была ещё до этой статьи. Если убрать из ряда все слова с латиницей и цифрами, а затем ещё и все слова с заглавной буквы — от ряда остаётся 80–82%, — асимметрия даёт 0,781 · 0,788 · 0,645 · 0,800. На первой модели она после чистки даже усиливается.

Левый край у обоих классов одинаковый и скучный: «что», «как», «для», «сайта», «это». Служебные слова русского языка модель предсказывает одинаково хорошо у всех. Разница не в том, какие слова попадают в левый край, а в том, сколько их.

Объяснять это устройством генерации я не буду, хотя объяснение напрашивается. Тексты генерировали одни модели, а вероятности считали другие: генератор не выбирал слова из распределения ruGPT или RWKV. Что здесь установлено — внешние модели видят у этой машинной выборки более сжатое распределение. Связано ли это с параметрами декодирования, промптами, темами или конвейером, эксперимент не говорит.

Где признак ломается

Теперь главное ограничение, из-за которого всё вышесказанное нельзя нести в приёмку текста.

Разные человеческие сайты отличаются друг от друга сильнее, чем в среднем человек отличается от машины. Это и есть причина, по которой хороший групповой результат не превращается в вердикт по одному тексту.

Двадцать восемь человеческих площадок на первой модели растянуты по средней асимметрии от 1,226 до 2,497 — ровно вдвое. Четыре машинных канала лежат от 0,999 до 1,985. Диапазоны перекрываются почти целиком, и три человеческие площадки из двадцати восьми стоят ниже среднего машинных каналов — 1,330. На русской модели 2025 года таких площадок уже одиннадцать из двадцати восьми.

Разброс между площадками шире зазора между классами каждая точка — площадка, вертикальная черта — среднее класса, ruGPT-3 1,0 1,4 1,8 2,2 2,6 средняя асимметрия площадки человек 2007–2021 28 площадок 2023–2026 13 площадок машина 4 канала мой блог 1 площадка выше 23 человеческих из 28
Хороший групповой AUROC не превращается в вердикт по одному тексту: человеческие площадки растянуты вдвое, три из двадцати восьми стоят ниже среднего машинных каналов, а один машинный канал забирается выше двадцати трёх человеческих. Разброс между площадками шире зазора между классами. Точки считаны по площадкам, давшим не меньше пяти документов в выборке.
Попробуйте сами

Поставьте порог: всё, что левее, детектор объявит машинным. Данные настоящие — асимметрия по документам, модель ruGPT-3, не больше двадцати документов с площадки. Потом переключите человеческую площадку и посмотрите, что станет с теми же процентами.

0,6 1,9 3,2 человеческая площадка машинные тексты
1,30
человеческих текстов объявлено машинными
машинных текстов пропущено

То есть существуют человеческие блоги, чьи тексты по этому признаку выглядят машиннее среднего машинного текста. Переносимость признака на новую площадку не подтверждена, а насколько тут виноват тип площадки, а насколько — конкретные авторы, темы и редакционный процесс, данные не разделяют.

Про AUROC надо сказать точно, иначе получится неправда. Эта величина оценивает ранжирование отдельных документов, а не групп. Но калиброванный классификатор, пороги, ошибку первого рода и перенос на новую площадку я не проверял. Значит, этими числами нельзя обосновывать вывод об авторстве конкретного текста. Это не то же самое, что «такой классификатор невозможен»: это значит, что здесь он не построен и не измерен.

Простым языком

Лучшее число работы — 0,831 — читается буквально так: если наугад взять один человеческий текст и один машинный, в 83 случаях из ста у человеческого асимметрия окажется выше. В семнадцати — ниже. И это в парном сравнении, где вы заранее знаете, что один текст человеческий, а другой машинный.

У практика такой пары нет. У него один текст и вопрос «кто это написал». Чтобы ответить, нужен порог — число, выше которого текст объявляется человеческим. А ставить его приходится на шкале, которая едет от площадки к площадке вдвое.

Что из этого следует практику

Чего работа не разрешает. Приёмку текста по метрике. Обвинение автора. Производственный скрининг подрядчика или потока. Порогов нет, калибровки нет, ошибка первого рода не измерена, перенос на новую площадку не проверен. Ограничение в двадцать документов с площадки — способ балансировки выборки, а не рекомендованный объём проверки.

Что она разрешает. Исследовательское сравнение групп текстов при протоколе, заданном заранее: модель, фрагмент, объём и направление признака выбраны до того, как посмотрели на результат.

Кандидатный протокол — именно кандидатный. Если вы всё же считаете: две модели разных эпох и архитектур, фрагмент из тела текста, 300 слов на документ. Он получен на тех же данных, на которых найден эффект, и до пререгистрированной проверки остаётся гипотезой. Оговорка про положение фрагмента: преимущество тела — это одна ячейка русской модели для асимметрии, 0,602 против 0,452 на первых пятидесяти словах, а у расстояния медиана — p99 на части моделей лучше работает как раз начало.

Пятидесяти слов для самого эффекта уже достаточно, но положение фрагмента важнее его длины: на русской модели начало текста даёт 0,452, середина — 0,602.

Пятидесяти слов хватает, но место важнее длины асимметрия на окне в 50 слов: серое — от начала текста, зелёное — из середины 0,5 0,703 0,700 ruGPT-3 0,665 0,648 Qwen2.5 0,452 0,602 YandexGPT 0,716 0,738 RWKV единственная ячейка работы, где признак разворачивается — первые пятьдесят слов на YandexGPT-5-Lite
Пятидесяти слов достаточно, но фрагмент лучше брать из тела текста: на русской модели лид уходит под монетку — 0,452 против 0,602 из середины. Разделение на коротком фрагменте не набирается постепенно, оно там сразу есть. Оговорка: это одна ячейка одной модели, у RWKV начало текста работает не хуже середины.
Как читать чужой вердикт
Что видитеЧто это значит
«Текст на 87% написан ИИ»Это оценка детектора, а не вероятность авторства. Вероятностью её можно называть только после калибровки — а если детектор такую калибровку не показывает, число остаётся оценкой
Вердикт по одному текстуМоя работа атрибуцию отдельного русского SEO-текста не подтверждает: порогов и переноса на новую площадку в ней нет
Детектор на перплексии не назвал модель-скорерДля этого семейства результат от свойств конкретной модели не отличим: направление признака меняется вместе с ней
Метрика посчитана на одной площадке, вывод перенесён на другуюРазброс между площадками в моих данных двукратный, переносимость не проверена
Текст правил человек после моделиСлепая зона: на моём классе гибридов направление признака меняется от того, что оставили в ряду

Требование «0% AI по детектору» я разбирал в прошлой статье — там же лежит формулировка, которую можно поставить в договор вместо него.

Дальше — кухня исследования

Главный практический вывод уже выше, и на нём статью можно закончить. Ниже три результата, которые для применения не нужны, зато показывают, почему красивому числу нельзя верить до того, как проверены альтернативные объяснения.

Шестнадцать текстов моего блога перекрылись с машинной группой

Класс M — статьи, где машинный черновик прошёл мою правку и раунды критики другими моделями. По асимметрии он примыкает к машинным: на русской модели среднее уходит даже за них, 1,348 против 1,550. Но AUROC пары 0,498: по этому признаку два класса практически не ранжируются. Расходятся средние, а порядок документов — нет.

Дальше интереснее, и здесь я едва не наступил на грабли, которые сам разложил двумя разделами выше. После вычистки имён и латиницы пара «гибрид против машины» даёт 0,385 · 0,338 · 0,209 · 0,468 против 0,562 · 0,573 · 0,498 · 0,649 на полном ряду. Читать это как «разделение исчезло» нельзя: 0,209 при инверсии — это 0,791, сильное ранжирование в обратную сторону. После чистки асимметрия моих текстов оказывается систематически ниже машинной на трёх моделях из четырёх.

Вклад конкретики, которую вносит правка, тут явно есть. Но вывод «форма письма ни при чём» из этих чисел не следует — следует другой: у класса в шестнадцать документов направление метрики неустойчиво, и как характеристику происхождения его брать нельзя.

Уберите имена и латиницу — и направление перевернётся асимметрия, мои статьи против машинных: весь ряд → без имён, латиницы и цифр 0,5 весь ряд без имён и латиницы 0,562 → 0,385 · ruGPT-3 0,573 → 0,338 · Qwen2.5 0,498 → 0,209 · YandexGPT 0,649 → 0,468 · RWKV 0,209 — это 0,791 при инверсии: после чистки мои тексты по форме уходят дальше от человеческих, чем машинные
Направление признака для моих статей зависит от того, что оставили в ряду: без имён и латиницы оно переворачивается на трёх моделях из четырёх, и 0,209 при инверсии читается как 0,791. Слабое превышение на полном ряду держалось на конкретике, которую вносит правка. Шестнадцать документов одного автора и одного пайплайна — иллюстрация неустойчивости, а не вывод о гибридном письме.

По производственным версиям — 35 версий тринадцати статей, из них десять входят в класс M — видно, что правка поднимает средний surprisal. Вывод держится на рабочем окне 900 слов, вклад роста длины не отделён, а у двух коротких цепочек знак меняется при окне 300–600 слов. Форме правка направления не задаёт: сдвиг асимметрии зависит от модели.

Наклон различал эпохи сильнее, чем классы

По ходу текста асимметрия человеческого письма растёт, машинного падает. Медианы по площадкам: +0,032 · +0,034 · +0,020 · +0,032 у человека против −0,010 · −0,014 · +0,000 · −0,025 у машины.

Соблазн назвать это признаком машинности сильный, и он ошибочный. Наклон отличает статьи 2023–2026 от архивных с 0,597–0,648, а от машинных — всего с 0,533–0,570. То есть по динамике хвоста современный человеческий текст стоит ближе к машинному, чем к человеческому тексту пятнадцатилетней давности.

По ходу текста человек и машина расходятся средняя асимметрия окна в 100 слов, ruGPT-3, от начала статьи к концу 1,2 1,4 1,6 1,8 начало конец архив до 2020 2023–2026 машина современные человеческие статьи идут ровно — по этой динамике они ближе к машинным, чем к архивным
Наклон разделяет эпохи, а не происхождение: у архивных статей асимметрия растёт к концу текста, у машинных падает, а современные человеческие идут почти горизонтально между ними. Признаком машинности такая динамика служить не может — по ней современный человеческий текст ближе к машинному, чем к архивному.

Пять объяснений я проверил, и ни одно не объяснило эффект в этих контролях: формат, словарь, синтаксис по позициям, правка после публикации и конкретика по позициям. Внутри слоёв с одинаковой длиной абзаца и плотностью подзаголовков наклон разделяет эпохи так же, как без слоёв. Чем именно современный человеческий текст отличается по динамике хвоста, осталось открытым. Шестого объяснения у меня нет.

Сегмент 2009–2011 оказался эффектом архивного отбора

Две человеческие группы — архив до 2020 и статьи 2023–2026 — по асимметрии почти не различаются. Почти: разделение целиком сидело в сорока четырёх архивных документах 2009–2011 годов.

Выглядело это как открытие: письмо той эпохи устроено иначе. Проверка вышла другой. Живая выборка тех же лет и тех же доноров, собранная мимо веб-архива, разделение роняет. Из 306 архивных документов одного блога за эти годы автор удалил со своего сайта сто девяносто два — и удалённые страницы отделяются от выживших сильнее, чем архив отделяется от современных статей.

Признак поймал не чистый эффект эпохи, а архивный отбор: удалённые и сохранившиеся страницы этого донора резко различаются по метрике.

Закономерность держалась на страницах, которых больше нет асимметрия, ruGPT-3: что сравнивается 0,5 0,745 сегмент 2009–2011 0,414 архив без него 0,856 удалённые против против статей 2023–2026 выживших, тот же блог
Закономерность объяснилась происхождением данных: без сорока четырёх архивных документов 2009–2011 годов разделение двух человеческих групп падает до 0,414, то есть исчезает. А внутри одного блога удалённые автором страницы отделяются от выживших с 0,856 при равной длине. Признак поймал архивный отбор, а не эпоху письма.

Стартовый токен

Артефакт кода создал правдоподобный ложный вывод. Проверка его уничтожила.

Сегмент 2009–2011

Закономерность объяснилась происхождением данных: тем, что автор удалил, а архив сохранил.

Обвязка страницы

Альтернативное объяснение подтвердилось по масштабу, ослабило эффект — и эффект его пережил.

Три проверки — три разных исхода. Так выглядит нормальная процедура, а не набор ошибок.

Чего эта работа не утверждает

Один жанр, один язык, четыре канала генерации, модель-скорер не крупнее восьми миллиардов параметров. Тематический конфаунд между классами не снят.

Две разные оговорки про неопределённость, которые легко слить в одну. Первая: интервалы внутри каждой модели считались по формуле, предполагающей независимость документов, а документы сгруппированы по площадкам и каналам генерации — значит, интервалы оптимистичны, и слово «устояла» надо читать с поправкой. Вторая: все четыре модели считали одни и те же тексты, поэтому четыре колонки — не четыре независимых повторения опыта, и сравнивать модели между собой по этим числам можно только как описание, а не как проверку.

Что стоит сделать дальше, я перечислю сам, потому что рецензент перечислит то же самое, но не от моего имени. Перескорить корпус после одинаковой нормализации разметки у всех классов. Посчитать кластерно-устойчивые интервалы с пересемплированием площадок и каналов. Проверить устойчивость через исключение доноров по одному. Собрать современный человеческий корпус по тем же заданиям — без него причинное чтение результата останется невозможным.

Рецензирования у работы нет: это препринт.

Как проверить и что воспроизвести нельзя

Статистику пересчитать можно: в пакете лежат метрики уровня документа, признаковые таблицы, код скорера и анализа, 23 находки с полными числами — включая опровергнутые гипотезы и проверку обвязки страницы, сделанную уже после публикации препринта, — реестры всех слоёв с адресами и хешами, 360 машинных текстов, 16 статей класса M с 35 производственными версиями и лабораторный журнал со всеми ошибками по датам.

Полностью повторить сбор и скоринг нельзя, и это надо сказать прямо. Текстов человеческих слоёв в пакете нет — права принадлежат их авторам. Восстановить выборку можно по адресам и хешам, но страницы меняются и исчезают, и совпадение байт в байт никто не гарантирует.

Источники

  1. Кириченко С. Пословный surprisal на русском SEO-тексте: что на самом деле измеряют перплексионные признаки детекции машинного текста. Zenodo, версия 1.0.0, 10 августа 2026. DOI 10.5281/zenodo.21878973.
  2. Basani A., Chen B. DivEye: Divergence-based detection of machine-generated text. arXiv:2509.18880, TMLR, февраль 2026. Отсюда взяты формулы девяти признаков.
  3. Кириченко С. Условия производства текста как конфаундер оценки машинности. Zenodo, версия 1.0.2, 2 августа 2026. Предыдущая работа серии.
  4. Профиль автора в ORCID: 0009-0001-2914-9541.

Частые вопросы

Нет. AUROC 0,109 — это сильная связь, только обратная: при инверсии оценки получится 0,891. Работа показывает другое — общепринятое направление признака не переносится между моделями-скорерами и выборками. Заранее, вслепую, вы не знаете, в какую сторону признак сработает на новой модели и новом домене, а подбор направления по ответу требует размеченных данных и убивает сам режим детекции без обучения.

Surprisal — это неожиданность одного слова, минус логарифм его вероятности в контексте. Перплексия — экспонента среднего surprisal по всему тексту, то есть одно число на документ. В работе я не усредняю ряд сразу, а смотрю на его форму: асимметрию, эксцесс, расстояние от медианы до девяносто девятого процентиля. Именно форма пережила смену модели, а среднее — нет.

Потому что результат одной модели от свойств этой модели не отличим. Я взял ruGPT-3, обученную на рунете до 2020 года, мультиязычную Qwen2.5, русскую YandexGPT-5-Lite 2025 года и рекуррентную RWKV-4-World без механизма внимания. Средний surprisal развернулся между ними, форма распределения направление сохранила. Оговорка: модели различаются сразу по нескольким осям, поэтому объяснить, почему они расходятся, этот дизайн не может.

Не проверено. Корпус — русские SEO-статьи, один жанр и один язык, четыре канала генерации, модель-скорер не крупнее восьми миллиардов параметров. Тематический конфаунд между классами не снят: машинная часть написана по пятнадцати заданиям, человеческая — о чём писали её авторы. Все выводы относятся к этому корпусу.

На моих шестнадцати статьях, где машинный черновик прошёл правку человеком, направление признака оказалось неустойчивым. На полном ряду асимметрия гибрида чуть выше машинной, а после вычистки имён и латиницы — заметно ниже, до 0,209 на русской модели. То есть результат зависит от того, что осталось в ряду. Один автор и один пайплайн: это иллюстрация, а не вывод о гибридном письме вообще.

В записи препринта на Zenodo, DOI 10.5281/zenodo.21878973, лицензия CC BY 4.0. Там статья, код скорера и анализа, реестры всех слоёв корпуса с адресами и хешами, метрики уровня документа, 360 машинных текстов и лабораторный журнал. Текстов человеческих слоёв в пакете нет: права принадлежат их авторам, поэтому выборка восстанавливается по адресам и хешам.

Итог

Средняя неожиданность слова — величина, на которой стоят перплексионные детекторы — на русском SEO-тексте направления между моделями не сохранила: 0,109 · 0,337 · 0,573 · 0,231.

Форма распределения направление держит на всех четырёх моделях: 0,697 · 0,831 · 0,696 · 0,807. Обвязка страницы её усиливала, но не создавала — после одинакового отбора связной прозы разделение теряет от 0,049 до 0,080 на паре «человек против машины», до 0,112 на паре с живыми блогами, и сохраняет знак везде.

Разброс между площадками двукратный, и три человеческие площадки из двадцати восьми стоят ниже среднего машинных каналов. Порогов, калибровки и проверки переноса на новую площадку в работе нет.

Отсюда единственный практический вывод, который я готов подписать: сравнивать этой метрикой можно группы текстов при заранее заданном протоколе. Выносить по ней приговор автору нельзя — ни мне, ни детектору, ни заказчику, который требует ноль процентов ИИ.

Нужен разбор контента без гадания по проценту машинности

Проверяю фактуру, источники и структуру материала, разбираю, что в тексте держится на данных, а что на пересказе выдачи. Если нужен second opinion по чужому контент-процессу или критерии приёмки, которые выдержат спор с подрядчиком — можно обсудить напрямую. Прогнать конкретный текст и увидеть разбор по признакам можно в детекторе ИИ-текста.

Как та же метрика ведёт себя на живых текстах разных сервисов, видно в сравнении восемнадцати ИИ-сервисов, а на медицинской теме — в тесте двенадцати моделей.

Обсудить проект