Компьютерная автороведческая экспертиза опирается на предположение, что у каждого писателя есть устойчивый неосознаваемый речевой отпечаток. Он проявляется не столько в выборе сюжета или редких метафор, сколько в устойчивой частоте служебных слов, пунктуационных паттернов, префиксов и буквосочетаний. Метод n-грамм как раз фиксирует такие микроструктуры языка, переводя последовательность символов или слов в числовую матрицу признаков.

Подготовка текстового корпуса и предобработка данных

Первая техническая задача работы заключается в формировании сбалансированного обучающего набора. Тебе потребуется собрать корпус текстов трёх выбранных авторов, например Михаила Булгакова («Мастер и Маргарита», «Белая гвардия»), Владимира Набокова («Защита Лужина», «Приглашение на казнь») и Виктора Пелевина («Generation П», «Чапаев и Пустота»). Тексты необходимо нарезать на фрагменты одинаковой длины, скажем, по 1000 или 2000 слов, чтобы избежать смещения частот из-за разного объёма отрывков.

На этапе очистки нужно принять строгое алгоритмическое решение относительно нормализации. Для выявления идиостиля часто используют символьные 3-граммы или 4-граммы, сохраняя пунктуацию и регистр, либо приводят текст к нижнему регистру и удаляют цифры. Если ты анализируешь словесные n-граммы, важно сознательно решить судьбу стоп-слов. В задачах поиска смысла предлоги и союзы обычно выбрасывают, но в стилеметрии именно частота союзов и предлогов выдаёт синтаксические привычки писателя.

Векторизация текстов через подсчёт частот n-грамм

После очистки текстовые отрывки преобразуются в векторы признаков. Если выбрать размерность n равной трём для символов, то фраза «вечерний свет» распадается на тройки «веч», «ече», «чер», «ерн» и так далее. Программа подсчитывает абсолютную частоту каждой комбинации, а затем выполняет нормализацию, вычисляя относительную частоту n-грамм относительно общей длины текста или применяя формулу TF-IDF.

Словарь всех уникальных n-грамм в трёх романах легко разрастается до десятков тысяч элементов. Чтобы классификатор работал стабильно и не перегружал оперативную память, следует ограничить признаковое пространство, отобрав от 300 до 1000 самых частотных n-грамм корпуса с помощью библиотеки scikit-learn и её модуля CountVectorizer или TfidfVectorizer.

Классификация методом k-ближайших соседей

Каждый текстовый фрагмент превращается в точку в многомерном пространстве признаков. Алгоритм k-NN (k-Nearest Neighbors) относит тестовый фрагмент к тому автору, чьих размеченных точек больше среди k ближайших соседей. Здесь критически важно описать метрику расстояния: евклидово расстояние хуже подходит для разреженных текстовых данных высокой размерности, поэтому стандартным выбором в NLP выступает косинусное сходство (cosine distance).

В практической части проекта нужно протестировать работу классификатора при разных значениях гиперпараметра k (обычно берут нечётные числа 1, 3, 5, 7, чтобы избежать ситуации равенства голосов) и сравнить результаты классификации символьных биграмм, триграмм и словесных пар.

Что преподаватель оценивает в проекте

На защите внимание комиссии сосредоточено не на объёме прочитанных книг, а на корректности вычислительного эксперимента и чистоте математического аппарата:

  • Корректное деление выборки на обучающую (train) и тестовую (test) в пропорции 70 на 30 или 80 на 20 процентов без утечки данных из одного набора в другой.
  • Математическая строгость обоснования метрики расстояния и формулы расчёта частоты n-грамм в коде.
  • Наличие объективных численных метрик качества работы модели, включая общую точность (accuracy), матрицу ошибок (confusion matrix) и полноту классификации для каждого автора.
  • Анализ граничных случаев, когда программа ошиблась и приписала текст Набокова раннему Пелевину, с объяснением причин сбоя признакового пространства.

Где брать данные и библиотеки для кода

Исходные тексты произведений берут в открытых электронных библиотеках вроде проекта «Гутенберг» или библиотеки Максима Мошкова (lib.ru) в кодировке UTF-8 без разметки HTML и служебных аннотаций издательств. Для технической реализации на языке Python понадобятся базовые библиотеки научного стека: pandas для хранения таблиц признаков, numpy для матричных вычислений, scikit-learn для векторизации и самого класса KNeighborsClassifier, а также matplotlib или seaborn для визуализации матрицы ошибок.

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

Какой размер n-грамм оптимален для русского языка?

Для задачи атрибуции авторства наилучшие результаты показывают символьные 3-граммы и 4-граммы. Они устойчивы к опечаткам, учитывают типичные падежные окончания, приставки и часто встречающиеся сочетания предлогов со следующими словами.

Нужно ли делать стемминг или лемматизацию слов перед анализом?

В традиционной стилеметрии при использовании символьных n-грамм приведение к начальной форме (лемматизация) не требуется, так как суффиксы и грамматические окончания сами по себе служат маркерами синтаксической сложности авторской речи.