Добавлены финальные эксперименты и итоговый отчёт
This commit is contained in:
674
lab1/FINAL_REPORT.md
Normal file
674
lab1/FINAL_REPORT.md
Normal 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`.
|
||||
Reference in New Issue
Block a user