Детектор ИИ-текста для русского языка
russian-ai-text-detector-lightgbm оценивает вероятность, что русский текст написала
нейросеть, а не человек. Обучен на текстах ChatGPT (GPT-3.5, GPT-4, GPT-4o, o1, o3), GigaChat, YandexGPT, Qwen, Llama, Gemma, DeepSeek, Mistral, Command R и других языковых
моделей из корпуса LLMTrace. Помогает проверить текст на ИИ: статью, новость,
отзыв, пост, ответ на вопрос.
Это LightGBM поверх \(100\) признаков детектора aiw-ru: штампы и канцелярит ИИ-текста («является», «играет ключевую роль», «в рамках»), длина и ритм предложений, разнообразие словаря, пунктуация, частоты служебных слов. Работает на CPU без GPU и трансформеров, файл модели около \(10\) МБ. На отложенной части корпуса ROC AUC \(0.943\), accuracy \(0.868\).
Модель необязательная: детектор и скиллы aiw-ru работают без неё, а ставится она, только если пользователь попросит.
In English
A Russian AI-generated text detector. It estimates the probability that a Russian text was written by a person or by an LLM such as ChatGPT (GPT-3.5, GPT-4, GPT-4o, o1, o3), GigaChat, YandexGPT, Qwen, Llama, Gemma, DeepSeek, Mistral, Command R and others, which makes it usable as an AI text detector, a ChatGPT detector or an "AI slop" filter for Russian. The model is a CPU-only LightGBM classifier over \(100\) interpretable stylometric and lexical features from aiw-ru, trained on the Russian part of the LLMTrace corpus. Test ROC AUC \(0.943\), accuracy \(0.868\). The rest of the card is in Russian; usage is below.
Данные
Русская часть LLMTrace classification (статья). Модель обучена на \(237,929\) текстах из train, число деревьев подобрано по потере на \(49,747\) текстах из valid, итоговые цифры посчитаны на \(52,521\) текстах из test, которые модель при обучении не видела. Подробный отчёт об обучении с командами для воспроизведения: docs/models/russian-ai-text-detector-lightgbm.md.
Результаты на test
Текст считается написанным ИИ, если вероятность не меньше \(0.5\).
| Класс | Precision | Recall | F1 | Текстов |
|---|---|---|---|---|
| люди | \(0.840\) | \(0.835\) | \(0.837\) | \(21,417\) |
| ИИ | \(0.887\) | \(0.890\) | \(0.889\) | \(31,104\) |
| accuracy | \(0.868\) | \(52,521\) | ||
| среднее по классам | \(0.863\) | \(0.863\) | \(0.863\) | \(52,521\) |
ROC AUC модели \(0.943\), у оценки правил детектора aiw-ru (от \(0\) до \(100\)) \(0.610\). Если оставить только тексты, которые модель написала с нуля, без правки человеческого текста, то \(0.946\) у модели и \(0.593\) у детектора. На valid accuracy \(0.867\), ROC AUC \(0.942\).
За ИИ модель принимает \(16.5%\) человеческих текстов.
По жанрам
| Жанр | Людей | ИИ | Accuracy | ROC AUC модели | ROC AUC детектора |
|---|---|---|---|---|---|
article |
\(5109\) | \(5343\) | \(0.893\) | \(0.963\) | \(0.705\) |
factual |
\(1383\) | \(2209\) | \(0.810\) | \(0.896\) | \(0.663\) |
news |
\(3326\) | \(3488\) | \(0.797\) | \(0.890\) | \(0.551\) |
poetry |
\(3561\) | \(3383\) | \(0.855\) | \(0.932\) | \(0.484\) |
question |
\(1932\) | \(5894\) | \(0.898\) | \(0.951\) | \(0.729\) |
review |
\(2678\) | \(4019\) | \(0.894\) | \(0.960\) | \(0.632\) |
short_form |
\(450\) | \(3000\) | \(0.840\) | \(0.942\) | \(0.553\) |
story |
\(2978\) | \(3768\) | \(0.899\) | \(0.967\) | \(0.566\) |
По длине текста
| Слов в тексте | Текстов | Accuracy | ROC AUC |
|---|---|---|---|
| \(0\text{–}49\) | \(14,742\) | \(0.819\) | \(0.902\) |
| \(50\text{–}149\) | \(17,766\) | \(0.849\) | \(0.924\) |
| \(150\text{–}399\) | \(16,327\) | \(0.913\) | \(0.968\) |
| \(400\) и больше | \(3686\) | \(0.952\) | \(0.970\) |
По типу задания генератору
create — текст с нуля; update, delete, expand — модель правила,
сокращала или дописывала человеческий текст.
| Задание генератору | ИИ-текстов | Recall |
|---|---|---|
create |
\(14,064\) | \(0.899\) |
delete |
\(5966\) | \(0.812\) |
expand |
\(4850\) | \(0.945\) |
update |
\(6224\) | \(0.903\) |
По моделям-генераторам
Самые частые генераторы в test.
| Модель-генератор | Текстов в test | Recall |
|---|---|---|
gpt-3.5 |
\(4772\) | \(0.929\) |
gpt-4o |
\(3884\) | \(0.908\) |
databricks/dbrx-instruct |
\(1513\) | \(0.859\) |
google/gemma-2-27b-it |
\(1498\) | \(0.888\) |
01-ai/Yi-1.5-34B-Chat |
\(1472\) | \(0.898\) |
yandex/YandexGPT-5-Lite-8B-instruct |
\(1469\) | \(0.853\) |
CohereForAI/c4ai-command-r-08-2024 |
\(1461\) | \(0.951\) |
unsloth/Llama-3.3-70B-Instruct |
\(1452\) | \(0.915\) |
Qwen/Qwen2.5-72B-Instruct |
\(1449\) | \(0.887\) |
mistralai/Ministral-8B-Instruct-2410 |
\(1396\) | \(0.829\) |
Qwen/QwQ-32B |
\(1386\) | \(0.885\) |
GigaChat-Max |
\(1266\) | \(0.931\) |
gigachat |
\(1181\) | \(0.831\) |
deepseek-ai/DeepSeek-R1-Distill-Qwen-32B |
\(942\) | \(0.869\) |
WizardLM-2-7B |
\(891\) | \(0.926\) |
Как пользоваться
Из командной строки:
uv tool install "aiw-ru[ml] @ git+https://github.com/ormeilu/avoid-ai-writing-russian"
aiw-ru models install lightgbm
aiw-ru classify --model lightgbm текст.md
aiw-ru models install без имени ставит её вместе с ModernBERT. Если других
моделей нет, aiw-ru scan и aiw-ru antiplagiat показывают её вероятность
рядом со своей оценкой. Из Python:
import lightgbm as lgb
from huggingface_hub import hf_hub_download
from aiw_ru.features import features
booster = lgb.Booster(model_file=hf_hub_download("toiletsandpaper/russian-ai-text-detector-lightgbm", "model.txt"))
text = open("текст.md", encoding="utf-8").read()
print(booster.predict([features(text)])[0]) # вероятность, что текст написала модель
Признаки считает aiw_ru.features той же версии, на которой модель обучена.
Номер версии признаков записан в features.json, сейчас это \(1\);
версия aiw-ru при обучении 1.0.0.
Признаки
Признаки считает aiw_ru.features: срабатывания правил детектора о словах
и фразах, средняя длина предложения и её разброс, MATTR, средняя длина слова,
доля длинных слов, частоты шести знаков препинания и служебных слов на 100 слов.
Оформление (переводы строк, списки, markdown, вид тире и кавычек, ё) и длина
текста в признаки не входят: в корпусах они говорят о том, откуда взят
человеческий текст, а не о том, кто его написал. «Люди» и «ИИ» в таблице —
средние значения признака на test.
Пятнадцать признаков с наибольшим вкладом:
| Признак | Что значит | Люди | ИИ | Доля прироста |
|---|---|---|---|---|
sentence-cv |
разброс длины предложений: стандартное отклонение, делённое на среднюю длину | \(0.44\) | \(0.36\) | \(9.9%\) |
word:и |
слово «и» на 100 слов, без учёта регистра, ё как е | \(2.87\) | \(4.11\) | \(9.5%\) |
word-length |
средняя длина слова в символах | \(5.64\) | \(6.10\) | \(7.4%\) |
comma |
запятых на 100 слов | \(8.72\) | \(9.68\) | \(5.3%\) |
sentence-mean |
средняя длина предложения в словах | \(16.72\) | \(17.12\) | \(4.4%\) |
mattr |
разнообразие словаря (MATTR): доля разных слов в скользящем окне из 100 слов | \(0.85\) | \(0.84\) | \(4.4%\) |
paren |
открывающих скобок на 100 слов | \(0.85\) | \(0.35\) | \(4.3%\) |
long-words |
слов из 10 символов и длиннее на 100 слов | \(12.78\) | \(17.07\) | \(2.8%\) |
word:это |
слово «это» на 100 слов, без учёта регистра, ё как е | \(0.47\) | \(0.75\) | \(2.4%\) |
colon |
двоеточий на 100 слов | \(0.89\) | \(0.79\) | \(2.4%\) |
word:очень |
слово «очень» на 100 слов, без учёта регистра, ё как е | \(0.22\) | \(0.07\) | \(2.2%\) |
word:не |
слово «не» на 100 слов, без учёта регистра, ё как е | \(1.57\) | \(0.95\) | \(2.1%\) |
word:в |
слово «в» на 100 слов, без учёта регистра, ё как е | \(3.49\) | \(3.32\) | \(2.1%\) |
question |
вопросительных знаков на 100 слов | \(0.34\) | \(0.19\) | \(2.0%\) |
word:важно |
слово «важно» на 100 слов, без учёта регистра, ё как е | \(0.01\) | \(0.09\) | \(1.6%\) |
Все \(100\) признаков описаны в отчёте об обучении.
Обучение
| Параметр | Значение |
|---|---|
| Деревьев | \(3000\): предел, logloss на valid ещё снижался |
| Листьев в дереве | \(31\) |
| Скорость обучения | \(0.05\) |
min_data_in_leaf |
\(50\) |
feature_fraction, bagging_fraction |
\(0.8\), \(0.8\) |
| L2-регуляризация | \(1.0\) |
seed |
\(1\), deterministic=True |
| Время обучения | \(36\) с, arm64, 8 ядер |
Размер model.txt |
\(10.0\) МБ |
| Обучено | 2026-09-25, коммит 8b641ee |
Ограничения
- Корпус один. На научных статьях, дипломах и диссертациях модель не проверялась, а жанры за пределами таблицы по жанрам она не видела.
- Вероятность — не доказательство авторства. Не используйте модель для решений о людях: на test она принимает за ИИ \(16.5%\) человеческих текстов.
- Правку человеческого текста моделью распознать труднее, чем текст с нуля, см. таблицу по типу задания.
- Короткие тексты ненадёжны: частоты слов и знаков на них шумят, см. таблицу по длине.
Лицензия и данные
Модель распространяется по MIT, как и aiw-ru. Корпус LLMTrace — Apache 2.0, человеческие тексты в нём собраны из сторонних источников со своими лицензиями.
@misc{tolstykh2025llmtrace,
title = {LLMTrace: A Corpus for Classification and Fine-Grained Localization of AI-Written Text},
author = {Tolstykh, Irina and Tsybina, Aleksandra and Yakubson, Sergey and Kuprashevich, Maksim},
year = {2025},
eprint = {2509.21269},
archivePrefix = {arXiv},
}