Добавлены финальные эксперименты и итоговый отчёт

This commit is contained in:
2026-10-26 13:27:53 +03:00
parent c3769b1d4a
commit 73c32d10c4
8 changed files with 1537 additions and 0 deletions

674
lab1/FINAL_REPORT.md Normal file
View File

@@ -0,0 +1,674 @@
# Итоговый отчёт по лабораторной работе
## Стилометрическая классификация реплик персонажей 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`.