Files
NLP/lab1/FINAL_REPORT.md

675 lines
39 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Итоговый отчёт по лабораторной работе
## Стилометрическая классификация реплик персонажей Stardew Valley
---
## Аннотация
Работа посвящена проверке того, можно ли стилометрически различить персонажей
игры Stardew Valley по отдельным репликам, если все реплики написаны одним
автором. Корпус содержит 2005 реплик, принадлежащих 34 персонажам; классы
неравномерны (от 15 до 139 реплик). Основная задача — многоклассовая
классификация; основная метрика — макро-усреднённая F-мера (macro-F1).
В работе построены ручные стилометрические признаки, символьные и
частеречные n-граммы, а также несколько вариантов латентно-семантического
анализа (LSA). Сравнивались логистическая регрессия, линейный метод опорных
векторов, наивный байесовский классификатор, случайный лес, сверхслучайные
деревья, метод ближайших соседей и дельта Барроуза. Использована повторная
стратифицированная перекрёстная проверка, вложенная настройка гиперпараметров,
контроль перестановкой меток и анализ ошибок.
Лучший наблюдаемый результат — мягкое голосование трёх моделей: macro-F1
около **0,304** при 5-блочной перекрёстной проверке и **0,333** на отдельной
стратифицированной отложенной выборке. Однако состав ансамбля выбирался по
результатам предыдущих серий, поэтому более консервативная оценка —
**0,275** для модели ExtraTrees с расширенным символьным словарём при
вложенном выборе конфигурации. Случайный уровень для 34 классов составляет
около **0,029**.
Главный содержательный вывод: персонажи действительно различимы, но
основной вклад дают лексико-тематические признаки и символьные n-граммы, а не
функциональные слова и синтаксис. При замене содержательных слов на
нейтральный маркер качество ExtraTrees падает с 0,248 до 0,113. Следовательно,
результат корректно интерпретировать как различимость речевых масок по
лексико-тематическому профилю, а не как доказательство «чистого» авторского
или персонажного идиолекта.
---
## 1. Введение
### 1.1. Постановка задачи
Рассматривается задача классификации коротких текстов — игровых реплик — по
принадлежности персонажу. Каждая реплика относится ровно к одному из 34
классов. Требуется:
1. построить признаки, отражающие стилометрические свойства реплик;
2. сравнить несколько семейств классификаторов;
3. оценить качество с учётом дисбаланса классов и малого объёма данных;
4. проверить, обусловлен ли результат стилем или содержанием;
5. сформулировать ограничения и направления дальнейшей работы.
### 1.2. Исследовательский вопрос
**Вопрос:** различимы ли 34 персонажа Stardew Valley по стилометрическим
признакам отдельных реплик, если все реплики написаны одним автором?
Это не авторская атрибуция. Автор один; речь идёт о классификации **речевых
масок персонажей** (character idiolect). Положительный результат означает,
что созданные автором речевые маски статистически различимы, но не означает,
что у персонажей разные авторы.
### 1.3. Гипотезы
| Обозначение | Гипотеза |
|---|---|
| H1 | Функциональные слова, частеречные признаки и символьные n-граммы различают персонажей выше случайного уровня |
| H2 | На коротких репликах частеречные и символьные признаки устойчивее словарного богатства и читаемости |
| H3 | LSA по всем словам отражает тему, а LSA по частеречным последовательностям — стиль |
| H4 | Качество зависит от длины реплики |
| H5 | Ошибки концентрируются вокруг персонажей со сходным возрастом, полом или ролью |
---
## 2. Корпус
### 2.1. Объём и разметка
| Параметр | Значение |
|---|---|
| Реплик | 2005 |
| Персонажей | 34 |
| Словоупотреблений | около 38,2 тыс. |
| Средняя длина реплики | 19,1 слова |
| Медиана | 17 слов |
| Минимум / максимум | 3 / 78 слов |
| Классы | 15–139 реплик |
| Точные дубли реплик | 0 |
Корпус хранится в кодировке cp1251; предусмотрено чтение XLSX. Разметка
содержит только текст реплики и имя персонажа. Метаданные о поле, возрасте,
виде и роли персонажей хранятся отдельно и используются только для анализа
ошибок, не как признаки классификатора.
### 2.2. Ограничения корпуса
- Корпус прошёл ручную фильтрацию: короткие и общие фразы удалены. Точные
правила очистки не сохранились, поэтому воспроизвести исходное
распределение невозможно.
- Реплики короткие; признаки словарного богатства и читаемости на них
нестабильны.
- Классы неравномерны; редкие персонажи имеют широкие доверительные
интервалы.
- Нет идентификаторов сцен и диалогов; нельзя учесть корреляцию реплик
внутри одной сцены.
- Все тексты написаны одним автором.
---
## 3. Методика
### 3.1. Предобработка
1. Приведение Unicode: многоточия, кавычки, тире, неразрывные пробелы.
2. Замена плейсхолдеров `<PLAYER>`, `<FARM>`, `<PET>`, `<SPOUSE>`, `<TIME>`,
`<NOUN>`, `<NAME>` на нейтральные слова; количество плейсхолдеров
сохраняется отдельным признаком.
3. Токенизация и разбиение на предложения средствами NLTK.
4. Частеречная разметка Penn Treebank с переводом в Universal POS.
5. Схлопывание подряд идущих знаков препинания в один тег `PUNCT` для
частеречных последовательностей.
Не выполнялись: удаление стоп-слов, удаление пунктуации, лемматизация,
удаление коротких реплик. Эти элементы рассматриваются как стилометрический
сигнал.
### 3.2. Признаковое пространство
Ручные признаки сгруппированы в 11 семейств; всего около 454 признака.
| Группа | Примеры | Статус |
|---|---|---|
| Длина | число токенов, слов, символов, предложений; длина предложения | Основная, но чувствительная к длине |
| Лексика | распределение длин слов, доля слов с апострофом, заглавных, цифр | Основная |
| Словарное богатство | TTR, Guiraud, Herdan, Yule's K, Simpson's D, hapax/dis, Honoré | Предварительная |
| Символы | частоты букв, регистр, цифры, пунктуация | Основная |
| Пунктуация | запятые, точки, восклицательные, вопросительные, многоточия | Основная |
| Функциональные слова | около 150 закрытых слов и 12 категорий | Основная |
| Местоимения | 1-е, 2-е, 3-е лицо, возвратные, притяжательные | Основная |
| Части речи | Universal POS, Penn Treebank, время, модальность, герундий | Основная |
| Синтаксис-прокси | число клауз, подчинительные союзы, вопросы, пассив-прокси | Основная |
| Читаемость | Flesch, FK grade, Gunning Fog, SMOG, Coleman-Liau, ARI | Предварительная |
| Разговорные маркеры | междометия, смех, хеджи, интенсификаторы, вежливость, сокращения | Основная |
Дополнительно используются:
- TF-IDF по символьным n-граммам (`char_wb`, 2–5, до 5000–10000 признаков);
- TF-IDF по последовательностям Universal POS (1–3, до 500 признаков);
- LSA по вариантам `word`, `word2`, `content`, `fw`, `char`, `pos`.
### 3.3. Латентно-семантический анализ
LSA реализован как последовательность:
```text
TF-IDF -> усечённое сингулярное разложение (TruncatedSVD) -> L2-нормализация
```
Варианты:
| Вариант | Что отражает |
|---|---|
| `word` | лексику и тему |
| `word2` | лексику и устойчивые сочетания |
| `content` | содержание после удаления стоп-слов |
| `fw` | функциональные слова и синтаксис |
| `char` | морфологию и пунктуацию |
| `pos` | частеречные последовательности |
Число компонент подбиралось по объяснённой дисперсии и внешней метрике.
Для оценки использовались 50–400 компонент; для `content`-LSA наблюдался
монотонный рост качества до 400 компонент.
### 3.4. Классификаторы
| Модель | Краткая характеристика |
|---|---|
| Dummy | нижняя граница; предсказывает самый частый класс |
| MultinomialNB | вероятностная модель для неотрицательных частотных признаков |
| LogisticRegression | линейная модель с L2-регуляризацией и весами классов |
| LinearSVC | линейный метод опорных векторов с максимизацией зазора |
| RandomForest | ансамбль решающих деревьев |
| ExtraTrees | ансамбль деревьев со случайными порогами |
| kNN | классификация по ближайшим объектам с косинусным расстоянием |
| Delta | дельта Барроуза по наиболее частотным словам |
Для логистической регрессии, SVM и деревьев использовались веса классов.
Для MultinomialNB LSA-блоки исключались, поскольку компоненты SVD могут быть
отрицательными.
### 3.5. Схема валидации
- Основная схема: `RepeatedStratifiedKFold(n_splits=5, n_repeats=3–5)`.
- Все обучаемые преобразования (TF-IDF, SVD, масштабирование) настраивались
только на обучающих блоках.
- Для настройки гиперпараметров использовалась вложенная перекрёстная
проверка: внешние 5 блоков, внутренние 3 блока.
- Дополнительно выполнены:
- вложенный выбор конфигурации признаков и модели;
- стратифицированная отложенная выборка 80/20;
- контроль перестановкой меток;
- анализ почти-дублей;
- маскирование содержательных слов;
- коррекция априорных вероятностей классов;
- мягкое голосование и стековое объединение.
### 3.6. Метрики
Основная метрика — macro-F1. Дополнительно использовались:
- доля правильных ответов (accuracy);
- сбалансированная доля правильных ответов;
- коэффициент корреляции Мэтьюса (MCC);
- каппа Коэна;
- точность попадания истинного класса в тройку и пятёрку лучших;
- логарифмическая потеря и оценка Брайера для вероятностных моделей;
- точность, полнота и F-мера по каждому классу;
- матрица ошибок;
- бутстрэп-интервалы;
- критерий Мак-Немара, критерий Уилкоксона, критерий Фридмана и поправка
Холма—Бонферрони.
Случайный уровень для 34 классов: macro-F1 ≈ 0,029, top-3 ≈ 0,088,
top-5 ≈ 0,147.
---
## 4. Эксперименты
### 4.1. Исходная серия
Исходная серия включала:
- нижние границы: длина, символьные n-граммы, POS, функциональные слова;
- ручную стилометрию;
- объединение ручных признаков с символьными и частеречными n-граммами;
- варианты LSA;
- сравнение классификаторов;
- поочерёдное исключение групп признаков;
- дельту Барроуза;
- верификацию «свой/чужой»;
- кластеризацию;
- анализ длины и подгрупп.
### 4.2. Follow-up серия коллеги
В follow-up серии было выполнено 68 запусков. Основные результаты:
| Конфигурация | Macro-F1 | Доля правильных ответов | Top-3 |
|---|---:|---:|---:|
| `char_max10000_rf` | 0,2583 ± 0,0066 | 0,2391 | 0,4197 |
| `model_et_default` | 0,2551 ± 0,0073 | 0,2387 | 0,4170 |
| `groups_lean2_content300` | 0,2510 ± 0,0040 | 0,2379 | 0,4111 |
| `stylometry_pos_content300` | 0,2485 ± 0,0042 | 0,2337 | 0,4175 |
| `ref_logreg` | 0,1785 ± 0,0060 | 0,1679 | 0,3322 |
| `stylometry` | 0,1051 ± 0,0038 | 0,1012 | 0,2338 |
| `lsa_content_k400` | 0,2114 ± 0,0029 | 0,2059 | 0,3767 |
| `lsa_pos_k300` | 0,0667 ± 0,0040 | 0,0663 | 0,1556 |
Контроль перестановкой меток дал 0,0270–0,0282, то есть случайный уровень.
Почти-дубликаты (13 пар с косинусной близостью ≥ 0,8) оказались внутри одного
персонажа; межклассовых почти-дублей не обнаружено.
### 4.3. Новые эксперименты
#### 4.3.1. Вложенный выбор конфигурации
Во внешнем цикле из 5 блоков и внутреннем цикле из 3 блоков сравнивались
восемь конфигураций:
- ExtraTrees на полном наборе;
- ExtraTrees без LSA;
- ExtraTrees с lean-набором и `content`-LSA (300 и 400 компонент);
- логистическая регрессия с lean-набором и `content`-LSA(300);
- случайный лес с `char_max_features` 10000 и 15000;
- ExtraTrees с `char_max_features=10000`.
Выбор выполнялся только по внутренним блокам. Результат:
- macro-F1 = **0,2746 ± 0,0233**;
- в 14 из 15 внешних блоков выбрана конфигурация ExtraTrees с
`char_max_features=10000`;
- в 1 из 15 — ExtraTrees с lean-набором и `content`-LSA(400).
Это наиболее консервативная оценка, поскольку конфигурация выбирается внутри
обучающей части каждого внешнего блока.
#### 4.3.2. Финальные кандидаты
| Конфигурация | Macro-F1 | Доля правильных ответов | Top-3 |
|---|---:|---:|---:|
| ExtraTrees, `char_max_features=10000` | **0,2757 ± 0,0219** | 0,2633 | 0,4554 |
| ExtraTrees, полный набор | 0,2499 ± 0,0209 | 0,2374 | 0,4234 |
| ExtraTrees, lean + content-LSA(300) | 0,2539 ± 0,0237 | 0,2354 | 0,4339 |
| ExtraTrees, lean + content-LSA(400) | 0,2511 ± 0,0212 | 0,2279 | 0,4219 |
| LogisticRegression, lean + content-LSA(300) | 0,2466 ± 0,0191 | 0,2349 | 0,4030 |
#### 4.3.3. Мягкое голосование и стековое объединение
Ансамбль из трёх моделей:
- ExtraTrees на полном наборе;
- ExtraTrees с `char_max_features=10000`;
- логистическая регрессия с lean-набором и `content`-LSA(300).
Результат мягкого голосования:
- macro-F1 = **0,3036 ± 0,0189**;
- доля правильных ответов = 0,2808;
- top-3 = 0,4823.
Вариант с четырьмя моделями (добавлен случайный лес с
`char_max_features=10000`) дал 0,2983 ± 0,0187; статистически он не лучше
трёхмодельного варианта.
Стековое объединение с мета-классификатором логистической регрессии дало
0,2259 ± 0,0163, то есть заметно хуже мягкого голосования. Это указывает на
переобучение мета-классификатора при малом числе объектов.
#### 4.3.4. Контроль содержания
Для проверки того, обусловлен ли результат темой, содержательные слова
(существительные, глаголы, прилагательные, наречия, числительные) были
заменены на нейтральный маркер `CONTENT`. Служебные слова, пунктуация и
частеречные теги сохранялись.
| Условие | Модель | Macro-F1 |
|---|---|---:|
| Исходный текст, стилевой набор | ExtraTrees | 0,2483 ± 0,0201 |
| Маскированный текст, стилевой набор | ExtraTrees | 0,1129 ± 0,0162 |
| Исходный текст, стилевой набор | LogisticRegression | 0,1467 ± 0,0213 |
| Маскированный текст, стилевой набор | LogisticRegression | 0,1067 ± 0,0125 |
Снижение для ExtraTrees составляет около 0,135 macro-F1, то есть более
половины качества. Стилевой сигнал после маскирования сохраняется, но он
существенно слабее содержательного.
#### 4.3.5. Коррекция априорных вероятностей
Проверена коррекция вероятностей вида
\[
p'_{ic} \propto p_{ic} \cdot \pi_c^{-\alpha},
\]
где \(\pi_c\) — априорная частота класса. Параметр \(\alpha\) выбирался по
схеме «один повтор — отложенный, остальные — обучающие».
Среднее качество:
- без коррекции: 0,2529;
- с коррекцией: 0,2507;
- среднее изменение: −0,0022.
Простая коррекция априорных вероятностей не улучшает macro-F1. Это означает,
что проблема редких классов не решается только изменением приоров; нужны
более тонкие правила принятия решений или дополнительные данные.
#### 4.3.6. Дополнительные конфигурации
| Конфигурация | Macro-F1 |
|---|---:|
| RandomForest, `char_max_features=15000` | 0,2570 ± 0,0139 |
| LogisticRegression, lean + content-LSA(400) | 0,2532 ± 0,0188 |
| LogisticRegression, lean + content-LSA(500) | 0,2542 ± 0,0180 |
| ExtraTrees с весами блоков | 0,2478 ± 0,0208 |
Увеличение символьного словаря с 10000 до 15000 не дало прироста.
Увеличение числа компонент `content`-LSA с 300 до 500 также не дало
устойчивого улучшения. Веса блоков не улучшили результат.
#### 4.3.7. Отложенная выборка
На стратифицированной отложенной выборке 80/20 (401 объект):
| Модель | Macro-F1 |
|---|---:|
| Мягкое голосование трёх моделей | **0,3333** |
| ExtraTrees, полный набор | 0,2793 |
| RandomForest, `char_max_features=10000` | 0,2554 |
| LogisticRegression, lean + content-LSA(300) | 0,2459 |
Отложенная выборка даёт более высокие значения, чем перекрёстная проверка,
но это одно разбиение; его интервал широкий, поэтому результаты нельзя
считать окончательными.
---
## 5. Результаты и обсуждение
### 5.1. Основной результат
Персонажи статистически различимы. Лучшая оценка по перекрёстной проверке —
0,304 macro-F1 для мягкого голосования; консервативная оценка с вложенным
выбором конфигурации — 0,275. Случайный уровень — 0,029.
Для интерпретации удобно перевести macro-F1 в кратность превышения
случайного уровня:
- 0,275 / 0,029 ≈ 9,5;
- 0,304 / 0,029 ≈ 10,5.
Это заметный сигнал, но не достаточный для практической системы
автоматического определения персонажа по одной реплике.
### 5.2. Что даёт основной вклад
Сравнение условий:
| Условие | Macro-F1 |
|---|---:|
| Только длина | 0,035 |
| Только ручные стилометрические признаки | 0,105 |
| Ручные + символьные и частеречные n-граммы | 0,182 |
| То же + word/pos-LSA(100) | 0,1785 |
| То же + content-LSA(300) | 0,2485 |
| ExtraTrees с расширенным символьным словарём | 0,276 |
| Мягкое голосование | 0,304 |
Основной прирост дают:
1. символьные n-граммы;
2. `content`-LSA, то есть содержание и тема;
3. нелинейная модель (деревья) для совместного использования признаков.
Функциональные слова и POS-LSA сами по себе слабы. Это важный
отрицательный результат: «чистый синтаксис» в текущем виде недостаточен.
### 5.3. Стиль или содержание
Контроль содержания показывает:
- исходный стилевой набор: 0,2483;
- после маскирования содержательных слов: 0,1129.
Следовательно, более половины качества связано с лексическим содержанием.
Остающийся сигнал 0,113 в 3,9 раза выше случайного уровня 0,029, то есть
некоторый стилевой компонент присутствует, но он существенно слабее
тематического.
Корректная формулировка:
> Персонажи различимы по лексико-тематическому профилю и символьным
> n-граммам; наличие собственно стилистического сигнала подтверждается лишь
> частично и требует дальнейшего тематического контроля.
### 5.4. Ошибки модели
Для лучшей одиночной модели ExtraTrees с `char_max_features=10000`
(первый повтор, 2005 реплик):
- Abigail получает 17,7% всех предсказаний при истинной доле 6,9%;
precision 0,099, recall 0,252, F1 0,142;
- худшие F1: Kent 0,000, Wizard 0,000, Penny 0,021, Mister Qi 0,087,
Leah 0,110, Abigail 0,142, Linus 0,146, Jodi 0,147;
- лучшие F1: Evelyn 0,646, Willy 0,581, Pam 0,522, Pierre 0,513,
Leo 0,508, Vincent 0,438.
Мягкое голосование улучшает часть редких классов: Wizard F1 возрастает до
0,30, Dwarf — до 0,30, Vincent — до 0,46. Однако Kent по-прежнему имеет
F1 = 0, а Abigail остаётся «hub»-классом.
Основные потоки ошибок: Sebastian → Abigail (31), Sam → Abigail (22),
Alex → Abigail (22), Elliott → Abigail (21). Это не демографическая
путаница, а коллапс редких классов в несколько популярных.
### 5.5. Длина реплики
Для ExtraTrees с расширенным символьным словарём:
| Длина | 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 слов
качество снижается. Гипотеза «чем длиннее, тем лучше» не подтверждается.
### 5.6. Подгруппы
Для ExtraTrees с расширенным символьным словарём:
- возраст: elder 0,440, child 0,424, adult 0,249, teen 0,201;
- пол: male 0,282, unknown 0,242, female 0,236;
- вид: monster 0,287, human 0,263, unknown 0,033.
Это F1 внутри группы персонажей, а не качество предсказания группы.
Различия описательные; они не доказывают, что модель обязана путать
персонажей внутри группы.
### 5.7. Верификация и кластеризация
- Верификация: ROC-AUC 0,630–0,633, EER 0,412–0,415, top-1 0,133–0,141.
- Кластеризация: ARI = 0, NMI 0,14–0,53 для k = 3/5/8.
Обе постановки показывают, что в признаковом пространстве нет устойчивых
кластеров, соответствующих персонажам. Это ограничивает интерпретацию
результатов классификации.
### 5.8. Статистическая надёжность
Мягкое голосование статистически лучше одиночной модели ExtraTrees с
`char_max_features=10000` на общих повторах:
| Повтор | Разница macro-F1 | McNemar p |
|---|---:|---:|
| 0 | +0,0287 | 0,012 |
| 1 | +0,0380 | < 0,00001 |
| 2 | +0,0163 | 0,0012 |
Разница положительна во всех трёх повторах. Однако состав ансамбля
выбирался по предыдущим результатам, поэтому окончательная оценка должна
быть подтверждена внешней выборкой.
При 46 парных сравнениях необходима поправка Холма—Бонферрони. Эффекты
+0,04…+0,08 её переживают; малые различия +0,003…+0,009 — нет.
---
## 6. Ограничения
1. **Один корпус.** Все результаты получены на 2005 репликах одной игры.
Внешняя валидация на другом корпусе не проводилась.
2. **Один автор.** Работа измеряет различимость речевых масок, а не
авторскую атрибуцию.
3. **Выбор признаков.** `char_max_features=10000`, `content`-LSA(k=300–400) и
lean-наборы выбирались по результатам на тестовых блоках предыдущих серий.
Вложенный выбор конфигурации снижает этот риск (0,275), но не устраняет
его полностью.
4. **Дисбаланс классов.** От 15 до 139 реплик; редкие классы имеют широкие
интервалы, а hub-классы забирают чужие предсказания.
5. **Короткие тексты.** Признаки словарного богатства и читаемости
нестабильны.
6. **Тематический конфликт.** `content`-LSA и символьные n-граммы могут
кодировать тему, сезоны, подарки, работу и имена. Маскирование содержания
подтверждает сильный тематический вклад.
7. **Нет идентификаторов сцен.** Разбиение по отдельным репликам не
учитывает корреляцию внутри сцен и диалогов.
8. **Статистическая мощность.** При 34 классах и 2005 объектах даже
доверительные интервалы по редким классам остаются широкими.
9. **Калибровка.** Простая коррекция априорных вероятностей не улучшила
macro-F1; более сложные методы (temperature scaling, оптимизация порогов)
не проверялись.
10. **Стековое объединение** показало худший результат, вероятно, из-за
переобучения мета-классификатора на малом числе объектов.
---
## 7. Выводы
1. **Гипотеза о различимости персонажей подтверждается частично.**
Консервативная оценка — 0,275 macro-F1; лучшая наблюдаемая — 0,304.
Случайный уровень — 0,029.
2. **Основной сигнал — лексико-тематический.** Символьные n-граммы и
`content`-LSA дают основной прирост; функциональные слова и POS-LSA сами
по себе слабы. Маскирование содержательных слов снижает качество более
чем вдвое.
3. **Наиболее устойчивая одиночная модель — ExtraTrees с
`char_max_features=10000`.** Она выбрана в 14 из 15 внешних блоков
вложенной процедуры и даёт 0,2757 ± 0,0219.
4. **Мягкое голосование трёх моделей — лучший наблюдаемый результат:**
0,3036 ± 0,0189 при перекрёстной проверке и 0,3333 на отложенной
выборке. Однако состав ансамбля выбирался по предыдущим данным; для
строгого вывода нужна внешняя валидация.
5. **`content`-LSA — сильный, но тематический сигнал.** Рост до k=400
устойчив, но интерпретировать его как «стиль» нельзя без тематического
контроля.
6. **Главная проблема — редкие классы и hub-коллапс.** Abigail получает
21–23% предсказаний при истинной доле 6,9%; Kent, Wizard, Penny и
Mister Qi почти не находятся. Простая коррекция приоров не помогает.
7. **Для строгого стилометрического вывода необходимы:**
внешний корпус, тематически сбалансированные подвыборки, вложенный выбор
признаков и более тонкая калибровка решающих правил.
---
## 8. Воспроизводимость
### 8.1. Основные документы
- `README.md` — установка и быстрый старт;
- `RUNBOOK.md` — пошаговая инструкция для полной серии;
- `EXPERIMENTS.md` — протокол экспериментов;
- `FEATURES.md` — описание признаков;
- `METRICS_AND_CLASSIFIERS.md` — описание метрик и классификаторов;
- `TUNING.md` — параметры и порядок настройки;
- `FOLLOWUP_EXPERIMENTS.md` — follow-up серия коллеги;
- `RESULTS_ANALYSIS.md` — анализ follow-up результатов;
- `FINAL_RESULTS.csv` — сводная таблица ключевых результатов;
- этот отчёт — `FINAL_REPORT.md`.
### 8.2. Команды
```bash
cd lab1
# базовая серия
bash scripts/run_all_experiments.sh
# follow-up серия
python scripts/run_followup_experiments.py # если доступен в ветке результатов
# или
bash scripts/run_followup_experiments.sh
# новые эксперименты
python scripts/run_final_experiments.py \
--stages nested topic calibration ensemble extra \
--out results/final
# финалисты и ансамбли
python scripts/run_finalists.py
```
### 8.3. Артефакты
- `lab1/exports/nlp_lab1_results_20261026_054117.tar.gz` — архив follow-up
серии;
- `results/final/` — новые эксперименты;
- `results/final/nested_3repeats/` — вложенный выбор конфигурации;
- `results/final/finalists/` — финалисты и ансамбли;
- `results/final/topic_control/` — контроль содержания;
- `results/final/calibration/` — коррекция приоров;
- `results/final/extra/` — дополнительные конфигурации и отложенная выборка.
---
## 9. Направления дальнейшей работы
1. **Внешняя валидация** на другом корпусе, другой игре или другом разбиении
по сценам и диалогам.
2. **Тематический контроль:** сбалансированные по темам подвыборки, удаление
тематических слов, adversarial-классификатор темы.
3. **Вложенный выбор признаков и ансамблей** внутри внешнего цикла, включая
`char_max_features`, `content`-LSA(k) и состав ансамбля.
4. **Калибровка редких классов:** temperature scaling, bias correction,
оптимизация порогов и правил декодирования по macro-F1.
5. **Ансамбли:** мягкое голосование с весами, stacking с регуляризацией,
отбор базовых моделей по внутренней проверке.
6. **Расширение корпуса:** больше реплик на редких персонажей, разметка сцен
и диалогов, возможно, другие игры или авторы для внешней проверки.
7. **Улучшение частеречной разметки:** сравнение теггеров, ручная проверка
ошибок на разговорных конструкциях.
8. **Содержательная интерпретация:** анализ тем, характерных для персонажей,
и отделение тематического сигнала от собственно стилистического.
---
## Приложение A. Сводная таблица результатов
См. `FINAL_RESULTS.csv`.
## Приложение B. Основные метрики
См. `METRICS_AND_CLASSIFIERS.md`.
## Приложение C. Признаки
См. `FEATURES.md` и `features/feature_dictionary.csv`.
## Приложение D. Протокол экспериментов
См. `EXPERIMENTS.md` и `FOLLOWUP_EXPERIMENTS.md`.