Введение
В 2026 году, когда генеративные языковые модели (LLM) стали неотъемлемой частью повседневной работы — от написания кода и создания контента до анализа данных и общения с клиентами — вопрос аутентичности текстов вышел на первый план. По данным отчёта Stanford Center for Research on Foundation Models (CRFM, 2025), около 18% всего англоязычного веб-контента в 2025 году было создано с помощью LLM, а к середине 2026 года эта цифра приблизилась к 30%. Парадокс «vibe coding» (термин, введённый Андреем Карпаты в 2024 году) — когда разработчики и авторы доверяют генерации текста модели, а затем лишь поверхностно его корректируют — породил волну плагиата, дезинформации и снижения качества контента.
Классические методы машинного обучения (ML), такие как логистическая регрессия, случайный лес, градиентный бустинг (XGBoost, LightGBM) и даже наивный байесовский классификатор, демонстрируют удивительную эффективность в задаче детектирования LLM-сгенерированного текста. В отличие от глубоких нейросетей, эти методы требуют значительно меньше вычислительных ресурсов, прозрачны для интерпретации и могут работать на устройствах с ограниченной памятью. В этой статье мы разберём, как и почему «классика» побеждает в задаче детекции, приведём конкретные архитектуры признаков и покажем примеры из практики.
1. Почему детектирование LLM-текстов — не тривиальная задача
LLM обучаются на огромных корпусах человеческого текста, и их выходы статистически неотличимы от человеческих на уровне отдельных предложений. Однако существуют тонкие, но устойчивые паттерны:
- Избыточная «гладкость»: LLM избегают редких слов, опечаток, нестандартных конструкций.
- Однообразие длины предложений: модели склонны генерировать предложения одинаковой длины (обычно 15-25 слов).
- Недостаток контекстной неожиданности: перплексия (perplexity) — мера «удивления» модели — для LLM-текстов часто ниже, чем для человеческих.
Классические ML-модели способны улавливать эти паттерны, если правильно спроектировать пространство признаков.
2. Архитектура признаков для классического ML
Для детектирования LLM-текстов мы используем не слова как таковые, а статистические и структурные метрики. Ниже — наиболее эффективные группы признаков, подтверждённые исследованиями (например, работами Guo et al., 2024, и Mitchell et al., 2023):
2.1. Лексическое разнообразие
- Type-Token Ratio (TTR): отношение уникальных слов к общему числу слов. Для LLM-текстов TTR часто ниже (0.45-0.55 против 0.60-0.75 у людей).
- Hapax Legomena Ratio: доля слов, встречающихся ровно один раз. У LLM — ниже.
- Средняя длина слова в символах: LLM реже используют очень короткие или очень длинные слова.
2.2. Синтаксическая структура
- Средняя длина предложения в словах: для LLM — менее вариативна.
- Доля простых предложений (без придаточных): LLM генерируют больше сложных конструкций, но с меньшим разнообразием типов связи.
- Частота знаков препинания: LLM склонны к избыточному использованию запятых и точек с запятой.
2.3. Статистические метрики на основе n-грамм
- Perplexity (PPL): вычисляется с помощью эталонной LLM (например, GPT-2). Для LLM-текстов PPL обычно ниже (80-120), для человеческих — выше (150-250).
- Burstiness: мера «взрывного» появления редких слов. LLM-тексты имеют низкую burstiness.
2.4. Ошибки и «человеческие» артефакты
- Частота опечаток: люди ошибаются в 2-5% слов; LLM — менее 0.1%.
- Наличие нестандартных сокращений: «не», «чё», «щас» — LLM избегают.
Таблица 1. Сравнение эффективности признаков (по данным исследования Guo et al., 2024, на датасете HC3)
| Признак | F1-score (логистическая регрессия) | F1-score (случайный лес) | Описание |
|---|---|---|---|
| Perplexity + Burstiness | 0.92 | 0.94 | Лучшая пара признаков |
| TTR + средняя длина предложения | 0.85 | 0.88 | Хорошо, но ниже |
| Все перечисленные (30 признаков) | 0.96 | 0.97 | Наилучший результат |
3. Построение детектора на практике
Рассмотрим пошаговый процесс на Python с использованием библиотек scikit-learn и Hugging Face Transformers.
3.1. Подготовка данных
Для обучения нужны размеченные датасеты. Популярные открытые источники на 2026 год:
- HC3 (Human ChatGPT Comparison Corpus) — 37 000 пар человеческих и ChatGPT-ответов (доступен на Hugging Face).
- M4 (Multi-model, Multi-domain) — 100 000 текстов от GPT-4, Claude 3, Gemini и людей.
- DeepfakeTextBench — 500 000 образцов, размеченных по модели-генератору.
3.2. Извлечение признаков
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from transformers import GPT2Tokenizer, GPT2LMHeadModel
import torch
# Инициализация GPT-2 для расчёта perplexity
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
def calc_perplexity(text):
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs, labels=inputs["input_ids"])
loss = outputs.loss
return torch.exp(loss).item()
def extract_features(text):
words = text.split()
sentences = text.split(".")
# TTR
unique_words = len(set(words))
ttr = unique_words / len(words) if words else 0
# Средняя длина предложения
avg_sent_len = np.mean([len(s.split()) for s in sentences if s.strip()]) if sentences else 0
# Perplexity
ppl = calc_perplexity(text)
return [ttr, avg_sent_len, ppl]
3.3. Обучение модели
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
# Предположим, X — матрица признаков, y — метки (0 — человек, 1 — LLM)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
clf = RandomForestClassifier(n_estimators=100, max_depth=10)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
Результат типичного эксперимента: F1-score = 0.96 на датасете HC3 при использовании 30 признаков.
4. Сравнение с глубокими нейросетями
Современные нейросетевые детекторы (например, DetectGPT, GPTZero) используют дообучение трансформеров и демонстрируют F1 до 0.99. Однако:
- Скорость: классический ML работает в 10-50 раз быстрее (миллисекунды против сотен миллисекунд на GPU).
- Интерпретируемость: можно понять, какой признак (например, низкий TTR) указывает на LLM.
- Ресурсы: классический ML работает на CPU, не требует GPU.
Таблица 2. Сравнение подходов
| Критерий | Классический ML (Random Forest) | Нейросетевой детектор (DetectGPT) |
|---|---|---|
| F1-score на HC3 | 0.96 | 0.98-0.99 |
| Время инференса (1 текст) | 0.01-0.05 с (CPU) | 0.5-2 с (GPU) |
| Потребление памяти | < 1 ГБ | 4-8 ГБ |
| Интерпретируемость | Высокая (важность признаков) | Низкая (черный ящик) |
| Устойчивость к атакам (обфускация) | Средняя | Выше (но падает при сильной модификации) |
5. Реальные кейсы и ограничения
Кейс 1: Модерация контента в социальной сети
Социальная сеть (анонимно, 2025) внедрила детектор на основе XGBoost для фильтрации спама, сгенерированного LLM. Система обрабатывала 50 000 сообщений в секунду на 100 CPU-ядрах, снизив количество жалоб на спам на 40%. Ошибка первого рода (ложное срабатывание) составляла 2%, что было приемлемо.
Кейс 2: Плагиат в академических работах
Университетская платформа Turnitin (версия 2026) использует гибридный подход: классический ML для быстрой предфильтрации (95% точность) и нейросеть для сложных случаев. Это позволило сократить время проверки одной работы с 5 минут до 10 секунд.
Ограничения
- Атаки обфускацией: если текст намеренно «зашумляется» (вставка опечаток, изменение длины предложений), точность классического ML падает до 0.70-0.80.
- Домен-специфичность: модель, обученная на новостях, плохо работает на поэзии или технической документации.
- Эволюция LLM: новые модели (GPT-5, Gemini 3) генерируют тексты с ещё более человеческими статистиками, что требует постоянного обновления признаков.
6. Будущее детектирования: гибридные системы
Ведущие исследовательские группы (MIT, Google DeepMind, OpenAI) в 2025-2026 годах предложили гибридные архитектуры:
- Слой 1: быстрый классификатор (случайный лес) на статистических признаках — отсеивает 80% очевидных случаев.
- Слой 2: нейросетевой детектор (например, дообученный BERT) для сложных текстов.
- Слой 3: watermarking (водяные знаки) — если модель поддерживает (например, GPT-4 с watermarking от OpenAI).
Такой подход сочетает скорость и точность. Например, система от компании Originality.ai (2026) использует именно эту архитектуру и достигает точности 99.2% при времени отклика 0.2 секунды.
Заключение
Детектирование LLM-сгенерированных текстов с помощью классического машинного обучения — не просто «олдскульный» трюк, а мощный, быстрый и интерпретируемый инструмент. Он идеально подходит для задач, где важна скорость (модерация в реальном времени), прозрачность (академическая проверка) или работа с ограниченными ресурсами (мобильные устройства).
Однако не стоит полагаться только на классические методы: их точность ниже при целенаправленных атаках и на новых поколениях LLM. Лучшая практика на 2026 год — гибридная система, сочетающая статистические признаки, нейросети и водяные знаки. Если вы разрабатываете собственную систему детекции, начните с классического ML как базовой линии — это даст вам понимание данных и быстрый прототип, который можно затем улучшать.
Как писал Андрей Карпаты в своём эссе «Vibe Coding and the Future of Software» (2025): «Лучший способ понять, написан ли текст человеком или машиной — это не смотреть на слова, а смотреть на статистику их появления». И классическое машинное обучение — идеальный инструмент для этого.
Комментарии