Добавлены итоговый отчёт и архив лабораторной работы

This commit is contained in:
2026-11-01 01:25:15 +03:00
parent 09fc05c327
commit 32b61750bf
26 changed files with 2081 additions and 9 deletions

BIN
lab1/report/REPORT.docx Normal file

Binary file not shown.

652
lab1/report/REPORT.md Normal file
View File

@@ -0,0 +1,652 @@
---
title: "Отчёт по лабораторной работе №1"
subtitle: "Классификация текстов на основе стилометрических характеристик"
author: "А. А. Аладьина, В. Н. Копнин, М. В. Савостиков"
date: "01.11.2026"
lang: ru-RU
---
# Аннотация
Работа посвящена стилометрической классификации реплик персонажей игры
Stardew Valley. Корпус содержит 2005 реплик, принадлежащих 34 персонажам;
все реплики написаны одним автором. Проверяется, различимы ли речевые маски
персонажей по отдельной реплике, если исключить авторскую атрибуцию как
таковую.
Построены 454 ручных стилометрических признака, символьные и частеречные
n-граммы, а также несколько вариантов латентно-семантического анализа.
Сравнивались логистическая регрессия, линейный метод опорных векторов,
наивный байесовский классификатор, случайный лес, сверхслучайные деревья,
метод ближайших соседей и дельта Барроуза. Использована повторная
стратифицированная перекрёстная проверка, вложенная настройка параметров и
отдельная отложенная выборка.
Лучший наблюдаемый результат — мягкое голосование трёх моделей: macro-F1
около **0,304** при перекрёстной проверке и **0,333** на отложенной выборке.
Консервативная оценка при вложенном выборе конфигурации — **0,275**.
Случайный уровень для 34 классов — **0,029**. Основной вклад дают
лексико-тематические признаки и символьные n-граммы; после замены
содержательных слов нейтральным маркером качество падает с 0,248 до 0,113.
Следовательно, результат корректно интерпретировать как различимость речевых
масок по лексико-тематическому профилю, а не как доказательство «чистого»
идиолекта.
# 1. Постановка задачи
## 1.1. Направление исследования
Направление работы — классификация текстов по стилометрическим
характеристикам. В отличие от классической авторской атрибуции, все тексты
корпуса принадлежат одному автору. Исследуется другой вопрос:
> различаются ли речевые маски 34 персонажей по стилометрическим признакам
> отдельных реплик, если автор у них общий?
Такая постановка позволяет проверить, насколько автор намеренно создаёт
разные голоса персонажей, и какие признаки несут этот сигнал.
## 1.2. Гипотезы
| Обозначение | Гипотеза |
|---|---|
| H1 | Функциональные слова, части речи и символьные n-граммы различают персонажей выше случайного уровня |
| H2 | На коротких репликах частеречные и символьные признаки устойчивее словарного богатства и читаемости |
| H3 | LSA по всем словам отражает тему, а LSA по частям речи и функциональным словам — стиль |
| H4 | Качество зависит от длины реплики |
| H5 | Ошибки группируются вокруг персонажей со сходным возрастом, полом, ролью или видом |
## 1.3. Формальная постановка
Пусть \(D=\{(x_i,y_i)\}_{i=1}^{n}\) — корпус, где \(n=2005\),
\(x_i\) — одна реплика, \(y_i\in Y\) — имя персонажа,
\(|Y|=34\). Каждый объект относится ровно к одному классу.
Требуется построить классификатор
\[
f\colon \Phi(x_i)\to Y,
\]
где \(\Phi(x_i)\) — вектор признаков реплики. Качество оценивается
макро-усреднённой F-мерой:
\[
\operatorname{macroF1}=\frac{1}{|Y|}\sum_{c\in Y}
\frac{2P_cR_c}{P_c+R_c}.
\]
Макро-усреднение выбрано потому, что все 34 персонажа важны одинаково,
а классы неравномерны.
# 2. Корпус
## 2.1. Источник и единица анализа
Корпус собран из диалогов игры Stardew Valley. Единица анализа — одна
реплика персонажа; тексты на английском языке. Метка — имя говорящего,
определённое по игровым диалогам и проверенное вручную.
Метаданные о поле, возрасте, виде и роли персонажа хранятся отдельно и
используются только для анализа ошибок. В признаки классификатора они не
подаются, чтобы не подменять стилометрическую задачу демографической.
## 2.2. Сбор и разметка
Правила формирования корпуса:
1. Из игровых диалогов извлекаются реплики персонажей.
2. Каждая реплика становится отдельным объектом.
3. Метка — имя говорящего; один объект относится ровно к одному классу.
4. Проводится ручная проверка соответствия реплики и метки.
5. Метаданные персонажей ведутся отдельной таблицей.
6. Служебные метки игрового движка (`<PLAYER>`, `<FARM>`, `<PET>`,
`<SPOUSE>`, `<TIME>`, `<NOUN>`, `<NAME>`) заменяются нейтральными словами;
их количество сохраняется отдельным признаком.
Корпус хранится в CSV с разделителем `;` в кодировке cp1251; обязательные
колонки — «Реплика» и «Персонаж». Метаданные персонажей ведутся отдельным
XLSX-файлом. Такое разделение позволяет менять признаки, не затрагивая
разметку, и проверять корпус независимо от моделей.
## 2.3. Очистка и шум
Выполнялась минимальная нормализация:
- Unicode-очистка: разные варианты кавычек, тире, многоточий и пробелов
приводятся к единому виду;
- замена плейсхолдеров нейтральными словами;
- токенизация и разбиение на предложения средствами NLTK;
- частеречная разметка Penn Treebank с переводом в Universal POS.
Не удалялись:
- пунктуация;
- регистр;
- стоп-слова;
- короткие реплики, оставшиеся после ручной фильтрации.
Пунктуация, регистр и служебные слова рассматриваются как стилометрический
сигнал, а не как шум.
Шумом считались:
- точные дубликаты;
- технические артефакты;
- общие короткие формулы;
- плейсхолдеры игрового движка.
Корпус прошёл ручную фильтрацию: короткие и общие фразы удалены. Точные
правила этой фильтрации не сохранились, поэтому исходное распределение
восстановить нельзя. Это ограничение зафиксировано в выводах.
## 2.4. Характеристики корпуса
| Показатель | Значение |
|---|---:|
| Реплик | 2005 |
| Персонажей | 34 |
| Словоупотреблений | 38 207 |
| Средняя длина реплики | 19,1 слова |
| Медиана длины | 17 слов |
| Минимум / максимум | 3 / 78 слов |
| Классы | 15–139 реплик |
| Точные дубли реплик | 0 |
| Почти-дубли (косинусная близость ≥ 0,8) | 13 пар, все внутри одного класса |
| Реплик с плейсхолдерами | 172 |
![Распределение числа реплик по персонажам](figures/replics-count.png){width=70%}
![Медианная длина предложения в символах по персонажам](figures/median.png){width=82%}
![Персонажи корпуса](figures/characters.png){width=92%}
Классы неравномерны: максимум — Abigail (139 реплик), минимум — Mister Qi
(15 реплик). Разница почти десятикратная. Поэтому доля правильных ответов
может вводить в заблуждение: модель, всегда выбирающая частый класс, получает
заметную accuracy, но низкую macro-F1.
## 2.5. Соответствие формальным требованиям
Задание предусматривает не менее 90 текстов объёмом не менее 30 предложений
и примерно равные классы. В данном корпусе единица анализа — реплика; она
короче формального «текста» и содержит в среднем 19 слов. По согласованию с
преподавателем эксперимент выполнен на уровне реплик: это позволяет
использовать все 2005 объектов и корректно поставить задачу для коротких
игровых реплик. Классы не равны по объёму; для компенсации использованы
веса классов и macro-F1.
Это ограничение важно учитывать при сравнении с работами, где документы
содержат десятки предложений.
# 3. Стилометрические признаки
## 3.1. Ручные признаки: 454 признака в 11 группах
| Группа | Примеры |
|---|---|
| Длина | число слов, символов, предложений; длина предложения |
| Лексика | длины слов, апострофы, заглавные буквы, цифры |
| Словарное богатство | TTR (доля уникальных слов), Guiraud, Herdan, Yule's K, Simpson's D, доля гапаксов и дислегомен |
| Символы | частоты букв, регистр, цифры, пунктуация |
| Пунктуация | запятые, точки, многоточия, вопросы, восклицания, повторы |
| Функциональные слова | артикли, предлоги, союзы, местоимения, вспомогательные глаголы |
| Местоимения | 1-е, 2-е, 3-е лицо; отношение «я/ты» |
| Части речи | Universal POS, Penn Treebank, время, модальность, герундий |
| Синтаксис | клаузы (элементарные предложения), подчинительные союзы, пассивные конструкции, вопросы |
| Читаемость | Flesch, Flesch—Kincaid, Gunning Fog, SMOG, Coleman—Liau, ARI |
| Разговорные маркеры | междометия, смех, осторожные формулировки (хеджи), интенсификаторы, вежливость, сокращения |
Словарное богатство и читаемость помечены как предварительные: на репликах
длиной 10–20 слов они нестабильны. Основные группы для коротких текстов —
функциональные слова, части речи, пунктуация, символьные n-граммы и
разговорные маркеры.
### Обоснование выбора
- Функциональные слова — классическое ядро стилометрии: закрытый класс мало
зависит от темы.
- Части речи и синтаксические прокси отражают структуру фразы.
- Символьные n-граммы устойчивы к теме и фиксируют морфологию, пунктуацию и
орфографию.
- Разговорные маркеры важны для игровых реплик: междометия, многоточия,
смех и вежливость различают персонажей.
- LSA сжимает разреженное пространство и позволяет сравнить тематический и
стилистический вклады.
## 3.2. Символьные и частеречные n-граммы
- Символьные n-граммы: TF-IDF по символьным n-граммам в границах слов
(`char_wb`), диапазон 2–5, `min_df=3`, до 5000–10 000 признаков,
L2-нормализация.
- Частеречные n-граммы: TF-IDF по последовательностям Universal POS,
диапазон 1–3, до 500 признаков.
TF-IDF — вес признака, который растёт с частотой внутри реплики и падает с
частотой в корпусе: частые общие n-граммы получают меньший вес, редкие
характерные — больший.
Символьные n-граммы фиксируют морфологию и оформление; n-граммы частей речи —
синтаксические шаблоны. Оба блока устойчивее к теме, чем словарные n-граммы.
## 3.3. Латентно-семантический анализ
LSA реализован как:
```text
TF-IDF -> усечённое сингулярное разложение (TruncatedSVD) -> L2-нормализация
```
Варианты:
| Вариант | Что отражает |
|---|---|
| `word` | лексику и тему |
| `word2` | лексику и устойчивые сочетания |
| `content` | содержание после удаления стоп-слов |
| `fw` | функциональные слова и синтаксис |
| `char` | морфологию и пунктуацию |
| `pos` | частеречные последовательности |
Число компонент подбиралось в диапазоне 50–400 по объяснённой дисперсии и
внешней метрике. Для `content`-LSA качество росло до 400 компонент.
Ключевое ограничение: LSA по содержательным словам может отражать тему, а не
только стиль. Поэтому варианты сравнивались между собой, а не выбирались
заранее.
# 4. Классификаторы
В работе использовано шесть семейств ML-классификаторов и классическая дельта
Барроуза — всего семь подходов; требование «не менее трёх» выполнено с
запасом.
## 4.1. Логистическая регрессия
Линейная модель: для каждого класса вычисляется оценка
\(s_c(x)=w_c^\top x+b_c\), затем вероятности через softmax. Обучение
минимизирует перекрёстную энтропию с L2-регуляризацией. Параметр \(C\)
управляет силой регуляризации; `class_weight="balanced"` повышает вес редких
классов.
Сильные стороны: устойчивость при большом числе признаков, вероятности,
интерпретируемые коэффициенты. Ограничение: только линейные границы.
## 4.2. Линейный метод опорных векторов
Ищет линейную границу с максимальным зазором; параметр \(C\) штрафует
нарушения зазора. Не выдаёт вероятностей: для тройки лучших используется
решающая функция. Силён на текстовых признаках, но требует настройки \(C\).
## 4.3. Случайный лес
Ансамбль решающих деревьев: каждое дерево обучается на подвыборке,
разбиения используют случайное подмножество признаков. Класс определяется
голосованием. Лес ловит нелинейные взаимодействия, но склонен к
переобучению на 2005 объектах; ограничивались глубина и размер листьев.
## 4.4. Сверхслучайные деревья (ExtraTrees)
Похожи на случайный лес, но пороги разбиения выбираются случайно. Это
уменьшает дисперсию и ускоряет обучение. В работе ExtraTrees с расширенным
символьным словарём показали лучший результат среди одиночных моделей.
## 4.5. Наивный байесовский классификатор
MultinomialNB использует теорему Байеса и предположение об условной
независимости признаков; сглаживание Лапласа задаётся параметром \(\alpha\).
Быстрый baseline для частотных признаков; требует неотрицательных значений,
поэтому LSA-компоненты для него исключались.
## 4.6. Метод ближайших соседей
Класс определяется по \(k\) ближайшим объектам; использовалось косинусное
расстояние и веса, обратные расстоянию. Простая локальная модель; чувствительна
к размерности и масштабу признаков.
## 4.7. Дельта Барроуза
Классический стилометрический метод: выбираются наиболее частотные слова,
частоты z-нормируются по обучающей выборке, документ относится к классу с
минимальным расстоянием до центроида. Использовались манхэттенское и
косинусное расстояния. Дельта — независимая проверка, не заменяющая
ML-классификаторы.
## 4.8. Ансамбли
- **Мягкое голосование** усредняет вероятности нескольких моделей.
- **Объединение через мета-классификатор (стекинг)** обучает второй уровень
на предсказаниях базовых моделей. В наших данных оно переобучилось и
оказалось хуже мягкого голосования.
# 5. Схема верификации
## 5.1. Перекрёстная проверка
Основная схема:
```text
RepeatedStratifiedKFold(n_splits=5, n_repeats=3–5)
```
При 5 фолдах модель обучается на 4 фолдах и проверяется на 1; доли классов
сохраняются внутри фолдов. Повторность позволяет оценить разброс.
## 5.2. Вложенная проверка
Внешние фолды используются для оценки качества, внутренние — для настройки
гиперпараметров. Дополнительно выполнен вложенный выбор конфигурации
признаков и модели: в каждом внешнем фолде конфигурация выбиралась только по
внутренним фолдам.
## 5.3. Контроль утечек
- TF-IDF, SVD, масштабирование и отбор признаков обучаются только на
обучающих фолдах.
- Тестовая выборка не участвует в выборе гиперпараметров или признаков.
- Контроль перестановкой меток дал macro-F1 0,0270–0,0282 — случайный
уровень.
- Все 13 почти-дубликатов находятся внутри одного класса; межклассовых
почти-дублей не обнаружено, поэтому прямой утечки метки нет. При более
строгой оценке такие пары всё равно следует держать в одном фолде.
## 5.4. Метрики
| Метрика | Что показывает |
|---|---|
| Macro-F1 | Основная метрика: средняя F-мера по 34 классам |
| Доля правильных ответов | Доля совпавших ответов; обманчива при дисбалансе |
| Сбалансированная доля | Средняя полнота по классам |
| Top-3 | Истинный класс попал в тройку лучших |
| MCC (коэффициент корреляции Мэтьюза) | Корреляция истинных и предсказанных меток |
| Каппа Коэна | Согласие с поправкой на случай |
| Log loss / Brier | Качество вероятностей |
| Матрица ошибок | Какие персонажи перепутываются |
Дополнительно использованы бутстрэп-интервалы, критерий Мак-Немара для
парных сравнений, критерий Уилкоксона и поправка Холма—Бонферрони.
# 6. Результаты
## 6.1. Сравнение моделей
| Конфигурация | Macro-F1 | Доля правильных ответов | Top-3 |
|---|---:|---:|---:|
| Мягкое голосование трёх моделей | **0,3036 ± 0,0189** | 0,2808 | 0,4823 |
| ExtraTrees, `char_max_features=10000` | 0,2757 ± 0,0219 | 0,2633 | 0,4554 |
| Вложенный выбор конфигурации | 0,2746 ± 0,0233 | 0,2603 | — |
| Случайный лес, `char_max_features=10000` | 0,2583 ± 0,0066 | 0,2391 | 0,4197 |
| ExtraTrees, полный набор | 0,2499 ± 0,0209 | 0,2374 | 0,4234 |
| Логистическая регрессия, lean + content-LSA | 0,2466 ± 0,0191 | 0,2349 | 0,4030 |
| Логистическая регрессия, `stylometry_pos_lsa` | 0,1785 ± 0,0060 | 0,1679 | 0,3322 |
| Только ручные признаки | 0,1051 ± 0,0038 | 0,1012 | 0,2338 |
| Случайный уровень | 0,029 | 0,029 | 0,088 |
На отложенной выборке 80/20 мягкое голосование дало **0,3333**; ExtraTrees
на полном наборе — 0,2793; случайный лес с `char_max_features=10000` —
0,2554; логистическая регрессия с content-LSA — 0,2459.
![Сравнение моделей](figures/model_comparison.png){width=82%}
## 6.2. Вклад признаков
| Условие | Macro-F1 |
|---|---:|
| Только длина | 0,035 |
| Только ручные стилометрические признаки | 0,105 |
| Ручные + символьные и частеречные n-граммы | 0,182 |
| То же + `content`-LSA | 0,249 |
| ExtraTrees с расширенным символьным словарём | 0,276 |
| Мягкое голосование | 0,304 |
![Вклад признаков](figures/feature_progression.png){width=72%}
Основной прирост дают символьные n-граммы, лексика и `content`-LSA.
Функциональные слова и POS-LSA сами по себе слабы (0,06–0,07): это важный
отрицательный результат.
## 6.3. Стиль или содержание
Содержательные слова (существительные, глаголы, прилагательные, наречия,
числительные) заменялись нейтральным маркером `CONTENT`; служебные слова,
пунктуация и частеречные теги сохранялись.
| Условие | Macro-F1 |
|---|---:|
| Исходный текст, стилевой набор, ExtraTrees | 0,2483 |
| Маскированный текст, стилевой набор, ExtraTrees | 0,1129 |
| Исходный текст, стилевой набор, LogReg | 0,1467 |
| Маскированный текст, стилевой набор, LogReg | 0,1067 |
![Контроль содержания](figures/topic_control.png){width=68%}
Падение более чем вдвое показывает, что значительная часть качества связана
с лексическим содержанием. Остаток 0,113 всё ещё в 3,9 раза выше случайного
уровня: некоторый стилевой сигнал сохраняется, но он слабее тематического.
## 6.4. Матрицы ошибок
Строки матрицы — истинный персонаж, столбцы — предсказание модели, диагональ
— правильные ответы, вне диагонали — ошибки. Полная матрица 34×34 на доске
нечитаема; поэтому в основном тексте показаны 12 самых частых персонажей и
столбец «прочие», а также 18 самых частых пар ошибок.
![Матрица ошибок: 12 персонажей](figures/confusion_top12.png){width=92%}
![Самые частые пары ошибок](figures/confusion_pairs.png){width=92%}
Основные пары ошибок (за три повтора): Sebastian → Abigail (65),
Sebastian → Alex (61), Abigail → Sebastian (59), Abigail → Alex (56).
Крупнейший клубок — молодые персонажи Abigail, Alex, Sebastian, Haley, Sam.
Многие из них писались в одних и тех же обновлениях и сюжетных контекстах,
поэтому сходство голосов ожидаемо; это не разные авторы.
## 6.5. Ошибки по персонажам
![F-мера по персонажам](figures/per_class_f1.png){width=92%}
Лучшие результаты по F-мере: Willy, Evelyn, Pierre, Pam, Leo, Vincent.
Худшие: Kent, Mister Qi, Penny, Abigail, Leah, Jodi. Редкие классы имеют
широкие интервалы; у Mister Qi всего 15 реплик.
Abigail и Alex являются классами-аттракторами: модель ошибочно относит к ним
чужие реплики. Abigail получает 10–18% всех предсказаний при истинной доле
около 6,9%. Простая коррекция априорных вероятностей классов не улучшила
macro-F1.
![Классы-аттракторы](figures/hub_shares.png){width=88%}
## 6.6. Длина реплики
| Длина | Macro-F1 |
|---|---:|
| 0–5 слов | 0,097 |
| 6–10 | 0,244 |
| 11–15 | 0,233 |
| 16–20 | 0,239 |
| 21–30 | 0,295 |
| 31+ | 0,271 |
Зависимость немонотонная: максимум приходится на 21–30 слов, после 30 слов
качество снижается. Гипотеза «чем длиннее, тем лучше» не подтверждается.
## 6.7. Верификация и кластеризация
- Верификация «свой/чужой»: ROC-AUC 0,630–0,633; EER (равная ошибка
ложного принятия и ложного отказа) 0,412–0,415; top-1 0,133–0,141.
Выше случайного, но практически слабо.
- Кластеризация: ARI (скорректированный индекс Рэнда) = 0 для k = 3/5/8;
NMI (нормированная взаимная информация) 0,14–0,53. Устойчивых кластеров,
соответствующих персонажам, нет.
## 6.8. Калибровка и ансамбли
Коррекция априорных вероятностей вида
\(p'_{ic}\propto p_{ic}\pi_c^{-\alpha}\) проверялась по схеме
«один повтор — отложенный, остальные — обучающие». Среднее изменение
macro-F1 составило **−0,0022**: простой пересчёт приоров не помог.
Мягкое голосование трёх моделей (ExtraTrees на полном наборе, ExtraTrees с
`char_max_features=10000`, логистическая регрессия с lean + content-LSA)
дало **0,3036 ± 0,0189**. Объединение через мета-классификатор оказалось хуже
(0,2259 ± 0,0163) из-за переобучения на малом числе объектов.
# 7. Обсуждение
1. **Персонажи статистически различимы, но сигнал умеренный.** 0,304
macro-F1 при 34 классах — примерно в 10 раз выше случайного уровня 0,029.
Абсолютное значение ограничено короткими репликами, дисбалансом и общими
темами.
2. **Основной вклад — лексико-тематический.** Символьные n-граммы и
`content`-LSA дают основной прирост; функциональные слова и POS-LSA сами
по себе слабы. После маскирования содержательных слов качество падает
более чем вдвое.
3. **Наиболее устойчивая одиночная модель — ExtraTrees с
`char_max_features=10000`.** Она выбрана в 14 из 15 внешних фолдов
вложенной процедуры и даёт 0,2757 ± 0,0219.
4. **Мягкое голосование — лучший наблюдаемый результат**, но состав
ансамбля выбирался по предыдущим сериям. Для строгого вывода нужна
внешняя валидация.
5. **Ошибки — это коллапс редких классов в классы-аттракторы**, а не
доказательство сходства характеров. Abigail, Alex и ещё несколько
популярных классов забирают чужие реплики.
6. **Один автор и общие контексты** делают путаницу между персонажами
ожидаемой. Это не означает, что автор «не старался»: превышение
случайного уровня как раз говорит о намеренно созданных речевых масках.
# 8. Ограничения
- Один корпус, одна игра, один автор; внешняя валидация не проводилась.
- Единица анализа — реплика, а не текст из 30 предложений; это согласовано,
но ограничивает сравнение с документными корпусами.
- Классы неравномерны; редкие классы имеют широкие интервалы.
- Ручная фильтрация корпуса невоспроизводима.
- Нет идентификаторов сцен и диалогов.
- Выбор признаков и ансамбля частично опирался на предыдущие серии;
вложенная проверка снижает, но не устраняет оптимизм.
- Содержательные слова и тема вносят большой вклад; «чистый стиль» не
доказан.
- Простая коррекция приоров не помогла; калибровка редких классов требует
дальнейшей работы.
# 9. Выводы
1. Речевые маски 34 персонажей статистически различимы по отдельным
репликам: лучшая модель — 0,304 macro-F1, консервативная оценка — 0,275
при случайном уровне 0,029.
2. Основной сигнал — лексико-тематический: символьные n-граммы и
`content`-LSA дают основной прирост; функциональные слова и частеречная
LSA сами по себе слабы.
3. После замены содержательных слов качество падает с 0,248 до 0,113:
содержание доминирует, но стилевой сигнал сохраняется.
4. Главная проблема — редкие классы и классы-аттракторы; мягкое голосование
помогает, но не решает её полностью.
5. Корректная формулировка результата: различимы речевые маски по
лексико-тематическому профилю; утверждение о «чистом стиле» требует
внешней валидации и тематического контроля.
# 10. Воспроизводимость
## 10.1. Структура проекта
```text
lab1/
├── stylometry/ # чтение, признаки, LSA, модели, метрики
├── scripts/ # проверка окружения, запуск серий, упаковка
├── tests/ # pytest
├── configs/ # конфигурация
├── data/ # корпус и метаданные
├── report/ # этот отчёт
├── presentation/ # PPTX/PDF и LaTeX-версия
├── README.md
├── RUNBOOK.md
├── EXPERIMENTS.md
├── FEATURES.md
├── METRICS_AND_CLASSIFIERS.md
├── TUNING.md
├── FINAL_REPORT.md
├── FINAL_RESULTS.csv
├── requirements.txt
└── requirements-report.txt
```
Краткая и подробная инструкции к архиву (`START_HERE.md`,
`ARCHIVE_README.md`) лежат в его корне, рядом с каталогом `lab1`.
## 10.2. Установка и запуск
```bash
cd lab1
python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python scripts/download_nltk_data.py
python scripts/check_environment.py
python -m pytest -q
# аудит и признаки
python -m stylometry.cli audit
python -m stylometry.cli features
# основной эксперимент
python -m stylometry.cli run \
--preset stylometry_pos_lsa --model logreg --repeats 5
# полная серия
bash scripts/run_all_experiments.sh
# дополнительные эксперименты
python scripts/run_final_experiments.py \
--stages nested topic calibration ensemble extra \
--out results/final
# пересборка отчёта (pandoc + LibreOffice)
python scripts/build_report.py
```
## 10.3. Программное обеспечение
- Python 3.11+;
- NumPy, pandas, SciPy, scikit-learn, matplotlib;
- NLTK (`punkt`, `punkt_tab`, `averaged_perceptron_tagger_eng`, `stopwords`);
- python-pptx и Pillow — для презентации;
- pandoc, LibreOffice, python-docx и PyMuPDF — для сборки отчёта;
- XeLaTeX и Beamer — для LaTeX-версии презентации.
# Приложение A. Полная матрица ошибок
![Полная матрица ошибок 34×34](figures/confusion_full34.png){width=92%}
# Приложение B. Сводная таблица результатов
См. `FINAL_RESULTS.csv` в корне проекта.
# Приложение C. Состав архива
В архив включены код, тесты, конфигурации, корпус, метаданные, документация,
отчёт, презентация (PPTX и LaTeX), сводные результаты и инструкции запуска.
Виртуальное окружение, кэш NLTK и промежуточные матрицы признаков в архив не
включены: они восстанавливаются скриптами.
# Приложение D. Источники и программные средства
1. Burrows, J. F. «Delta»: a Measure of Stylistic Difference and a Guide to
Likely Authorship // Literary and Linguistic Computing. 2002. Vol. 17,
no. 3. P. 267–287.
2. Eder, M., Rybicki, J., Kestemont, M. Stylometry with R: A Package for
Computational Text Analysis // The R Journal. 2016. Vol. 8, no. 1.
P. 107–121.
3. Mosteller, F., Wallace, D. L. Inference and Disputed Authorship:
The Federalist. Reading, MA: Addison-Wesley, 1964.
4. Stamatatos, E. A Survey of Modern Authorship Attribution Methods // Journal of the American Society for Information Science and Technology. 2009. Vol. 60, no. 3. P. 538–556.
5. Pedregosa, F. et al. Scikit-learn: Machine Learning in Python //
Journal of Machine Learning Research. 2011. Vol. 12. P. 2825–2830.
6. Bird, S., Klein, E., Loper, E. Natural Language Processing with Python.
Sebastopol, CA: O'Reilly Media, 2009.
7. ConcernedApe. Stardew Valley. Video game. 2016.

BIN
lab1/report/REPORT.pdf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB