Files
NLP/lab1/presentation/latex/stardew_stylometry.tex

880 lines
50 KiB
TeX
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.

% !TeX program = xelatex
% Стилометрическая классификация реплик Stardew Valley — академическая Beamer-презентация.
% Сборка: xelatex stardew_stylometry.tex (два прохода) в каталоге latex/.
\documentclass[aspectratio=169,10pt]{beamer}
\usepackage{fontspec}
\usepackage[russian]{babel}
\babelfont{rm}{Liberation Sans}
\babelfont{sf}{Liberation Sans}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[most]{tcolorbox}
\usepackage{graphicx}
\graphicspath{{../images/}{../generated/}}
% ---------- Цвета: сдержанная академическая гамма ----------
\definecolor{cream}{RGB}{253,246,231}
\definecolor{inkbrown}{RGB}{62,42,26}
\definecolor{accent}{RGB}{140,95,45}
% ---------- Общий вид ----------
\usefonttheme{professionalfonts}
\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{caption}{\raggedright\insertcaption\par}
\setbeamercolor{normal text}{fg=inkbrown}
\setbeamercolor{frametitle}{fg=inkbrown}
\setbeamercolor{structure}{fg=accent}
\setbeamercolor{itemize item}{fg=accent}
\setbeamercolor{itemize subitem}{fg=accent}
\setbeamercolor{itemize/enumerate body}{fg=inkbrown}
\setbeamercolor{enumerate item}{fg=accent}
\setbeamersize{text margin left=0.55cm, text margin right=0.55cm}
\setbeamertemplate{itemize item}{\textbullet}
\setbeamertemplate{itemize subitem}{--}
% ---------- Фон: изображение + маленькая курица на каждом слайде ----------
\usebackgroundtemplate{%
\begin{tikzpicture}[remember picture, overlay]
\node at (current page.center)
{\includegraphics[width=\paperwidth,height=\paperheight]{background.jpg}};
\node[anchor=south east, xshift=-2.5mm, yshift=1.5mm]
at (current page.south east)
{\includegraphics[height=0.65cm]{chicken.png}};
\end{tikzpicture}}
% ---------- Заголовок слайда: кремовая полоса во всю ширину ----------
\newlength{\sidemargin}
\setlength{\sidemargin}{0.55cm}
\setbeamertemplate{frametitle}{%
\nointerlineskip
\vspace*{-0.2mm}%
\hspace*{-\sidemargin}%
\begin{tcolorbox}[enhanced, width=\paperwidth, colback=cream, colframe=cream,
opacityback=0.90, arc=0mm, boxrule=0pt,
left=\sidemargin, right=\sidemargin, top=1.2mm, bottom=1.2mm,
before skip=0pt, after skip=2mm]
{\usebeamerfont{frametitle}\usebeamercolor[fg]{frametitle}\large\bfseries\insertframetitle}
\end{tcolorbox}}
% ---------- Кремовые панели для содержимого ----------
\tcbset{panelstyle/.style={enhanced, colback=cream, opacityback=0.90,
colframe=accent, opacityframe=0.65, boxrule=0.6pt, arc=1.4mm,
boxsep=1.2mm, top=1.4mm, bottom=1.4mm, left=2.4mm, right=2.4mm,
before skip=1.6mm, after skip=1.6mm}}
\newtcolorbox{panel}[1][]{panelstyle, #1}
% ---------- Кремовый бокс с изо­бражением ----------
\newtcolorbox{imgbox}[1][]{enhanced, colback=cream, opacityback=0.90,
colframe=accent, opacityframe=0.65, boxrule=0.6pt, arc=1.4mm,
boxsep=0.8mm, top=0.8mm, bottom=0.8mm, left=0.8mm, right=0.8mm,
before skip=1.6mm, after skip=1.6mm, halign=center, #1}
% ---------- Титульный шаблон ----------
\title[Стилометрия реплик Stardew Valley]{Стилометрическая классификация реплик персонажей Stardew Valley}
\author{А.~А.~Аладьина \and В.~Н.~Копнин \and М.~В.~Савостиков}
\institute{ПИЭ-13МО}
\setbeamerfont{note page}{size=\footnotesize}
\begin{document}
% ==================== СЛАЙД: ТИТУЛ ====================
\begin{frame}[plain]
\begin{tikzpicture}[remember picture, overlay]
\node at (current page.center)
{\includegraphics[width=\paperwidth,height=\paperheight]{title.jpg}};
\node[anchor=south east, xshift=-2.5mm, yshift=1.5mm]
at (current page.south east)
{\includegraphics[height=0.65cm]{chicken.png}};
\end{tikzpicture}
\vspace*{-2.2cm}
\begin{center}
\begin{tcolorbox}[enhanced, width=0.92\paperwidth, colback=cream, opacityback=0.92,
colframe=cream, boxrule=0pt, arc=2mm, halign=center, boxsep=2mm]
{\large\bfseries Стилометрическая классификация реплик персонажей Stardew Valley}\\[2mm]
{\normalsize Можно ли различить голоса персонажей, если все реплики написаны одним автором?}\\[2.4mm]
\small А.~А.~Аладьина \quad·\quad В.~Н.~Копнин \quad·\quad М.~В.~Савостиков\\[0.8mm]
\footnotesize ПИЭ-13МО
\end{tcolorbox}
\end{center}
\note{Титул. Представление группы: Аладьина Анна Андреевна, Копнин Владислав
Николаевич, Савостиков Михаил Викторович, ПИЭ-13МО. Коротко: мы проверяем,
различимы ли речевые маски персонажей игры по одной реплике. Автор у всех
реплик один — это ключевой факт всей работы. Далее три блока: задача и
корпус, методология, результаты.}
\end{frame}
% ==================== БЛОК 1 ====================
\begin{frame}{Блок 1\ \ ·\ \ Задача и корпус}
\begin{center}
\begin{tcolorbox}[enhanced, width=0.86\paperwidth, colback=cream, opacityback=0.9,
colframe=cream, boxrule=0pt, arc=2mm, halign=center, boxsep=3mm]
{\large Блок 1}\\[1.5mm]
{\Large\bfseries Решаемая задача и корпус}\\[2mm]
\small Постановка задачи · сбор и очистка данных · характеристики корпуса\\[2.5mm]
{\bfseries Докладчик: А.~А.~Аладьина}
\end{tcolorbox}
\end{center}
\note{Блок\,1. Говорит А. А. Аладьина. План блока: что за задача мы решаем,
её формальная постановка, как собирали и чистили корпус, и какими
характеристиками он обладает.}
\end{frame}
\begin{frame}{Задача и постановка}
\begin{columns}[T]
\begin{column}{0.49\textwidth}
\begin{panel}
\textbf{Решаемая задача}
\begin{itemize}
\item Дано: 2005 коротких реплик, 34 персонажа, один автор.
\item Требуется: по одной реплике определить персонажа.
\item Каждый объект относится ровно к одному из 34 классов.
\item Это не авторская атрибуция: мы различаем \emph{речевые маски персонажей}, а не авторов.
\item Проверяется, статистически ли различимы эти маски.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.49\textwidth}
\begin{panel}
\textbf{Компактная постановка}\\[1.2mm]
\centering
$D=\{(x_i,\,y_i)\}_{i=1}^{n},\quad n=2005,$\\[1mm]
$x_i$ — реплика, \ $y_i\in Y,\ |Y|=34,$\\[1mm]
$f\colon \Phi(x_i)\to Y$ — классификатор.\\[1.2mm]
\raggedright\small Ещё одна запись — критерий качества: усреднённая
F-мера по классам (macro-F1). Других формул в докладе не будет.
\end{panel}
\end{column}
\end{columns}
\note{Говорит А. А. Аладьина. Задача — многоклассовая классификация коротких
текстов: по одной реплике предсказать персонажа из 34 классов. Подчеркнуть:
это НЕ авторская атрибуция — все тексты написаны одним автором, и мы
проверяем различимость речевых масок. Формула одна и остаётся единственной
в докладе.}
\end{frame}
\begin{frame}{Корпус: сбор, разметка, очистка}
\begin{columns}[T]
\begin{column}{0.33\textwidth}
\begin{panel}
\small\textbf{1. Сбор}
\begin{itemize}
\item Реплики из диалогов игры.
\item Единица анализа — одна реплика.
\item 34 персонажа, тексты на английском.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.33\textwidth}
\begin{panel}
\small\textbf{2. Разметка}
\begin{itemize}
\item Метка — имя говорящего персонажа.
\item Ручная проверка реплики и метки.
\item Метаданные (пол, возраст, вид) хранятся отдельно.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.33\textwidth}
\begin{panel}
\small\textbf{3. Очистка}
\begin{itemize}
\item Нормализация Unicode.
\item Плейсхолдеры заменены нейтральными словами.
\item Пунктуация и регистр сохранены: это стилометрический сигнал.
\end{itemize}
\end{panel}
\end{column}
\end{columns}
\begin{panel}
\small \textbf{Ограничения данных:} правила ручной фильтрации
не сохранились; нет идентификаторов сцен.
\end{panel}
\note{Говорит А. А. Аладьина. Корпус собран из диалогов игры, разбит на
реплики, размечен именем говорящего. Очистка минимальная: нормализуем
символы, заменяем плейсхолдеры вида \texttt{<PLAYER>}, ничего не удаляем из
стилистических сигналов (пунктуация, регистр оставлены). Честно сказать про
ручную фильтрацию и отсутствие идентификаторов сцен.}
\end{frame}
\begin{frame}{Персонажи корпуса}
\begin{center}
\begin{imgbox}
\includegraphics[height=0.6\textheight]{characters.png}
\end{imgbox}
\end{center}
\note{Говорит А. А. Аладьина. Все 34 персонажа: подростки и молодые взрослые,
взрослые, пожилые, дети и нелюди (Dwarf, Krobus, Wizard). Такая структура
потом поможет объяснить, где модель путается.}
\end{frame}
\begin{frame}{Характеристики корпуса: классы}
\begin{columns}[T]
\begin{column}{0.42\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth]{replics-count.png}
\end{imgbox}
\end{column}
\begin{column}{0.57\textwidth}
\begin{panel}
\small
\begin{tabular}{@{}p{3.2cm}p{3.6cm}@{}}
\textbf{Реплик} & 2005\\[0.8mm]
\textbf{Персонажей} & 34\\[0.8mm]
\textbf{Максимум класса} & Abigail, 139\\[0.8mm]
\textbf{Минимум класса} & Mister Qi, 15\\[0.8mm]
\textbf{Точные дубли} & 0\\[0.8mm]
\textbf{Почти-дубли} & 13 пар, только внутри класса\\
\end{tabular}
\end{panel}
\begin{panel}
\small Дисбаланс почти десятикратный: от 15 до 139 реплик. Поэтому
доля правильных ответов обманчива; основная метрика — усреднённая
F-мера по классам.
\end{panel}
\end{column}
\end{columns}
\note{Говорит А. А. Аладьина. Диаграмма: сколько реплик у каждого персонажа.
Дисбаланс почти десятикратный (15–139). Точных дубликатов нет, 13 почти-дублей
— только внутри одного класса, то есть утечки между классами через
дубликаты нет.}
\end{frame}
\begin{frame}{Характеристики корпуса: длина реплик}
\begin{columns}[T]
\begin{column}{0.42\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth]{median.png}
\end{imgbox}
\end{column}
\begin{column}{0.57\textwidth}
\begin{panel}
\begin{tabular}{@{}p{4.2cm}p{2.9cm}@{}}
\textbf{Средняя длина} & 19,1 слова\\[0.8mm]
\textbf{Медиана} & 17 слов\\[0.8mm]
\textbf{Диапазон} & 3–78 слов\\
\end{tabular}
\end{panel}
\begin{panel}
\begin{itemize}
\item Короткие реплики дают мало стилометрических свидетельств.
\item Длина сама по себе — сильный, но опасный признак: она может
подменять «стиль» просто узнаванием персонажа.
\item Поэтому её вклад проверялся отдельно: с исключением
признаков длины и по группам длины.
\end{itemize}
\end{panel}
\end{column}
\end{columns}
\note{Говорит А. А. Аладьина. Средняя реплика — всего 19 слов, медиана 17,
диапазон 3–78. На таких коротких текстах признаки словарного богатства и
читаемости нестабильны — это одна из причин низких абсолютных значений
качества, о которых расскажет третий докладчик.}
\end{frame}
% ==================== БЛОК 2 ====================
\begin{frame}{Блок 2\ \ ·\ \ Методология}
\begin{center}
\begin{tcolorbox}[enhanced, width=0.86\paperwidth, colback=cream, opacityback=0.9,
colframe=cream, boxrule=0pt, arc=2mm, halign=center, boxsep=3mm]
{\large Блок 2}\\[1.5mm]
{\Large\bfseries Методология: как измеряем стиль}\\[2mm]
\small Признаки · LSA · классификаторы · схема проверки · метрики\\[2.5mm]
{\bfseries Докладчик: В.~Н.~Копнин}
\end{tcolorbox}
\end{center}
\note{Блок\,2. Говорит В. Н. Копнин. План блока: общая схема конвейера,
какие признаки строим, как работает LSA, какие модели сравнивали и как устроена
проверка, чтобы не обмануть себя.}
\end{frame}
\begin{frame}{Общая схема}
\begin{panel}
\small
Реплика (текст персонажа) $\to$ очистка (Unicode, плейсхолдеры)
$\to$ токены и частеречная разметка (NLTK, Universal POS)
$\to$ признаки (ручные, n-граммы, LSA)
$\to$ модель (вероятности по 34 классам)
$\to$ проверка (5 блоков, повторы, метрики).
\end{panel}
\begin{columns}[T]
\begin{column}{0.49\textwidth}
\begin{panel}
\textbf{Что важно про схему}
\begin{itemize}
\item Все обучаемые преобразования настраиваются только внутри
обучающих блоков.
\item Тестовые блоки не участвуют ни в настройке признаков, ни в
выборе параметров модели.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.49\textwidth}
\begin{panel}
\textbf{Что такое «вектор признаков»}
\begin{itemize}
\item Это не «понимание» текста, а числовое описание его
статистических свойств: длины, частоты, пунктуация, темы.
\end{itemize}
\end{panel}
\end{column}
\end{columns}
\note{Говорит В. Н. Копнин. Общий конвейер: текст превращается в цепочку
преобразований и в конце — в вектор чисел, по которому модель выбирает
класс. Ключевое правило: всё, что «учится» на данных, учится только на
обучающей части каждой проверки.}
\end{frame}
\begin{frame}{Признаки: что именно считаем}
\begin{columns}[T]
\begin{column}{0.49\textwidth}
\begin{panel}
\small\textbf{Ручные признаки (454, в 11 группах)}
\begin{itemize}
\item Длина: слова, символы, предложения.
\item Лексика и орфография: длины слов, апострофы, заглавные буквы.
\item Словарное богатство: на коротких репликах нестабильно.
\item Пунктуация: запятые, многоточия, восклицания.
\item Разговорные маркеры: смех, вежливость, сокращения.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.49\textwidth}
\begin{panel}
\small\textbf{Функциональные слова и векторные блоки}
\begin{itemize}
\item Функциональные слова: около 150 закрытых слов и 12 категорий;
местоимения 1-го, 2-го, 3-го лица.
\item Части речи и синтаксис-прокси: клаузы, союзы, вопросы.
\item Символьные n-граммы (2–5) и частеречные n-граммы (1–3) с TF-IDF.
\item LSA: сжатые векторы по словам, содержанию, POS и символам.
\end{itemize}
\end{panel}
\end{column}
\end{columns}
\note{Говорит В. Н. Копнин. Два семейства признаков. Первое — 454 ручных
признака: длины, пунктуация, разговорные маркеры, функциональные слова.
Второе — автоматические: символьные и частеречные n-граммы и векторные
блоки LSA. Стоп-слова и пунктуацию специально не удаляли — для стилометрии
это сигнал, а не шум.}
\end{frame}
\begin{frame}{LSA простыми словами}
\begin{columns}[T]
\begin{column}{0.49\textwidth}
\begin{panel}
\small\textbf{Идея}
\begin{itemize}
\item Строим таблицу «реплика $\times$ слово», взвешиваем
частоты через TF-IDF.
\item Сжимаем таблицу до $k$ скрытых осей: каждая реплика
превращается в короткий вектор.
\item Оси не обязаны быть «темами»: их порядок и знак произвольны.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.49\textwidth}
\begin{panel}
\small\textbf{Варианты LSA}
\begin{itemize}
\item \texttt{word} — лексика и тема.
\item \texttt{content} — содержание без служебных слов.
\item \texttt{fw} — функциональные слова и синтаксис.
\item \texttt{char} — морфология и пунктуация.
\item \texttt{pos} — частеречные последовательности.
\end{itemize}
\end{panel}
\end{column}
\end{columns}
\begin{panel}
$k$ подбирался в диапазоне 50–400; для \texttt{content}-LSA качество
устойчиво росло до 400.
Ключевой вопрос: LSA по содержательным словам ловит \emph{тему}, а не
только стиль.
\end{panel}
\note{Говорит В. Н. Копнин. LSA объясняем без формул: таблица частот —
взвешивание — сжатие до k осей — короткий вектор для каждой реплики.
Важно ограничение метода: оси формально не интерпретируются, а LSA по
содержательным словам может кодировать тему. Для этого мы и делали
несколько вариантов LSA, чтобы сравнить тематический и стилистический
вклад.}
\end{frame}
\begin{frame}{Классификаторы}
\begin{columns}[T]
\begin{column}{0.49\textwidth}
\begin{panel}
\small\textbf{Линейные модели}
\begin{itemize}
\item Логистическая регрессия: «признак $\times$ вес», затем
вероятности; редкие классы получают повышенные веса.
\item Линейный SVM: граница с максимальным зазором; часто силён
на тексте, но вероятностей не выдаёт.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.49\textwidth}
\begin{panel}
\small\textbf{Деревья и ансамбли}
\begin{itemize}
\item Случайный лес и ExtraTrees: сотни деревьев; у ExtraTrees
пороги выбираются случайно — меньше разброс.
\item Мягкое голосование: усредняем вероятности моделей.
\item Стековое объединение у нас переобучилось и оказалось хуже.
\end{itemize}
\end{panel}
\end{column}
\end{columns}
\begin{panel}
\small Сравнивали несколько семейств, чтобы вывод не зависел от одного
алгоритма: близкие результаты у разных моделей делают вывод надёжнее.
\end{panel}
\note{Говорит В. Н. Копнин. Логистическая регрессия — интерпретируемая
линейная база; SVM — сила на текстовых признаках, но без вероятностей;
деревья ловят нелинейные комбинации («многоточие + короткая реплика»), но
легко переобучаются на 2005 объектах. Лучший результат дало мягкое
голосование трёх моделей; стек был хуже — переобучился.}
\end{frame}
\begin{frame}{Как проверяем}
\begin{columns}[T]
\begin{column}{0.49\textwidth}
\begin{panel}
\textbf{Схема оценки}
\begin{itemize}
\item Стратифицированная перекрёстная проверка: 5 блоков, доли
классов внутри блоков сохраняются.
\item Повторяем 3–5 раз с разными разбиениями — оцениваем разброс.
\item Вложенная схема: внешние блоки — оценка, внутренние —
настройка параметров модели.
\item Отдельная отложенная выборка 80/20 для финальных кандидатов.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.49\textwidth}
\begin{panel}
\textbf{Контроль ошибок исследователя}
\begin{itemize}
\item TF-IDF, сжатие и масштабирование обучаются только на
обучающих блоках — борьба с утечкой данных.
\item Контроль перестановкой меток дал 0,027–0,028 — воспроизведён
случайный уровень.
\item Почти-дубликаты находятся только внутри одного класса и
не пересекают обучение и тест.
\end{itemize}
\end{panel}
\end{column}
\end{columns}
\note{Говорит В. Н. Копнин. Схема: 5-блочная стратифицированная
перекрёстная проверка с повторами; вложенная — для честной настройки
параметров; отложенная выборка — дополнительная проверка. Отдельно
переставляли метки: качество упало до случайного уровня, значит сигнал
не в «утечке».}
\end{frame}
\begin{frame}{Метрики: что и зачем}
\begin{panel}
\small
\begin{tabular}{@{}p{3.9cm}p{9.6cm}@{}}
\textbf{Метрика} & \textbf{Что показывает}\\[1mm]
\textbf{Macro-F1} & Средняя F-мера по 34 классам: каждый персонаж важен одинаково, включая редких. Основная метрика.\\[1mm]
\textbf{Доля правильных ответов} & Доля совпавших предсказаний; при дисбалансе обманчива: модель, всегда выбирающая частый класс, выглядит неплохо.\\[1mm]
\textbf{Сбалансированная доля} & Средняя полнота по классам: находит ли модель редких персонажей.\\[1mm]
\textbf{Тройка лучших (top-3)} & Истинный персонаж оказался в тройке наиболее вероятных ответов.\\[1mm]
\textbf{MCC / каппа} & Согласие с поправкой на случайное угадывание.\\[1mm]
\textbf{Матрица ошибок} & Кто с кем путается; подробнее — в блоке 3.\\
\end{tabular}
\end{panel}
\begin{panel}
Ориентиры при 34 классах: случайный уровень macro-F1 $\approx$ 0,029,
top-3 $\approx$ 0,088. Выводы опираемся на macro-F1, интервалы и матрицу ошибок.
\end{panel}
\note{Говорит В. Н. Копнин. Главная метрика — macro-F1: она равно
взвешивает все 34 класса, включая редких. Доля правильных ответов
обманчива при дисбалансе. Смысл всех остальных метрик — словесный, без
формул. Ориентиры случайного уровня уже озвучены — они пригодятся в
блоке 3.}
\end{frame}
% ==================== БЛОК 3 ====================
\begin{frame}{Блок 3\ \ ·\ \ Результаты}
\begin{center}
\begin{tcolorbox}[enhanced, width=0.86\paperwidth, colback=cream, opacityback=0.9,
colframe=cream, boxrule=0pt, arc=2mm, halign=center, boxsep=3mm]
{\large Блок 3}\\[1.5mm]
{\Large\bfseries Результаты и интерпретация}\\[2mm]
\small Оценки качества · вклад признаков · матрицы ошибок · ограничения · выводы\\[2.5mm]
{\bfseries Докладчик: М.~В.~Савостиков}
\end{tcolorbox}
\end{center}
\note{Блок\,3. Говорит М. В. Савостиков. План блока: главные числа, что даёт
качество, стиль или содержание, кого модель путает, как корректно читать
оценки, ограничения и выводы.}
\end{frame}
\begin{frame}{Главный результат}
\begin{columns}[T]
\begin{column}{0.47\textwidth}
\begin{panel}
\small
\begin{tabular}{@{}p{3.5cm}r@{}}
\textbf{Мягкое голосование (5 блоков)} & 0,304\\
\textbf{ExtraTrees, char = 10\,000} & 0,276\\
\textbf{Вложенный выбор} & 0,275\\
\textbf{Отложенная выборка} & 0,333\\
\textbf{Перестановка меток} & 0,029\\
\end{tabular}
\end{panel}
\begin{panel}
\small Числа — macro-F1. Случайный уровень для 34 классов — 0,029;
контроль перестановкой меток вышел на этот уровень, значит сигнал
в данных, а не в утечке.
\end{panel}
\end{column}
\begin{column}{0.52\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth]{model_comparison.png}
\end{imgbox}
\end{column}
\end{columns}
\note{Говорит М. В. Савостиков. Главная цифра — macro-F1 0,304 для мягкого
голосования при 5-блочной проверке. Более консервативная оценка — 0,275:
там конфигурация выбиралась честно, внутри обучающей части каждого блока.
На отложенной выборке 0,333, но это одно разбиение. Суть: персонажи
действительно различимы.}
\end{frame}
\begin{frame}{Что добавляет качество}
\begin{columns}[T]
\begin{column}{0.52\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth, height=0.55\textheight, keepaspectratio]{feature_progression.png}
\end{imgbox}
\end{column}
\begin{column}{0.47\textwidth}
\begin{panel}
\small
\begin{itemize}
\item Только длина: 0,035.
\item Ручные стилометрические признаки: 0,105.
\item $+$ символьные и частеречные n-граммы: 0,182.
\item $+$ content-LSA: 0,249.
\item ExtraTrees, char = 10\,000: 0,276.
\item Мягкое голосование: 0,304.
\end{itemize}
Итого: основной прирост — лексика, n-граммы и content-LSA;
«чистый синтаксис» (функциональные слова и POS-LSA) сам по себе
слаб — важный отрицательный результат.
\end{panel}
\end{column}
\end{columns}
\note{Говорит М. В. Савостиков. Прогрессия: вручную посчитанные признаки
дают 0,105, добавляются символьные n-граммы — 0,182, LSA по содержанию —
0,249, лучшая одиночная модель — 0,276, ансамбль — 0,304. Обратный вывод
важен тоже: признаки «чистого синтаксиса» сами по себе почти ничего не
дают.}
\end{frame}
\begin{frame}{Стиль или содержание?}
\begin{columns}[T]
\begin{column}{0.5\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth, height=0.55\textheight, keepaspectratio]{topic_control.png}
\end{imgbox}
\end{column}
\begin{column}{0.49\textwidth}
\begin{panel}
\small
\begin{itemize}
\item Проверка: содержательные слова (существительные, глаголы,
прилагательные, наречия) заменены нейтральным маркером.
\item Исходный текст: 0,248; после маскирования: 0,113.
\item Падение более чем вдвое, но остаток 0,113 — в 3,9 раза
выше случайного уровня.
\end{itemize}
\textbf{Вывод контроля:} более половины качества даёт лексическое
\emph{содержание}; стилевой сигнал сохраняется, но слабее
тематического.
\end{panel}
\end{column}
\end{columns}
\note{Говорит М. В. Савостиков. Ключевой эксперимент: заменяем все
содержательные слова нейтральным маркером. Качество резко падает (0,248
становится 0,113). Тем не менее остаток — почти в четыре раза выше
случайного: какой-то стилевой компонент есть. Из этого следует главная
оговорка работы: мы не можем утверждать, что модель выучила «чистый
стиль» персонажей — основной вклад даёт тематический профиль.}
\end{frame}
\begin{frame}{Матрица ошибок: как читать}
\begin{columns}[T]
\begin{column}{0.55\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth, height=0.66\textheight, keepaspectratio]{confusion_top12.png}
\end{imgbox}
\end{column}
\begin{column}{0.44\textwidth}
\begin{panel}
\begin{itemize}
\item \textbf{Строки} — истинный персонаж, \textbf{столбцы} —
предсказание; \textbf{диагональ} — верные ответы,
вне диагонали — ошибки.
\item Полная матрица 34$\times$34 нечитаема: показываем top-12;
полная — в приложении. Далее — пары ошибок.
\end{itemize}
\end{panel}
\begin{panel}
\small\textbf{Что видно:} крупная доля вне диагонали у многих строк —
редкие классы «утекают» в популярные.
\end{panel}
\end{column}
\end{columns}
\note{Говорит М. В. Савостиков. Обязательно проговорить, как читать матрицу:
строка — кто говорил на самом деле, столбец — кого предсказала модель,
диагональ — верные ответы, всё вне диагонали — ошибки. Полные 34 строки не
читаются на проекторе, поэтому top-12 + пары + полная матрица в приложении.}
\end{frame}
\begin{frame}{Кого модель путает чаще всего}
\begin{columns}[T]
\begin{column}{0.52\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth, height=0.45\textheight, keepaspectratio]{confusion_pairs.png}
\end{imgbox}
\end{column}
\begin{column}{0.47\textwidth}
\begin{panel}
\small\textbf{Частые пары ошибок (число перепутанных реплик)}
\begin{itemize}
\item Sebastian $\to$ Abigail: 65
\item Sebastian $\to$ Alex: 61
\item Abigail $\to$ Sebastian: 59
\item Abigail $\to$ Alex: 56
\end{itemize}
Основной клубок — молодые персонажи: Abigail, Alex, Sebastian,
Haley, Sam. Один автор и общие сюжетные контексты делают сходство
голосов ожидаемым: это не разные авторы. Это коллапс редких классов
в классы-аттракторы, а не «демографическая» путаница.
\end{panel}
\vspace{-1mm}
\end{column}
\end{columns}
\note{Говорит М. В. Савостиков. Самые частые пары: Sebastian и Abigail
путаются в обе стороны (65 и 59), Sebastian и Alex (61), Abigail и Alex
(56). Ошибки сконцентрированы вокруг группы молодых персонажей. Важно: это
стягивание предсказаний к популярным классам, а не доказательство, что эти
персонажи «говорят одинаково» — хотя перекрёстные путаницы Sebastian —
Abigail — Alex согласуются с их сходными масками.}
\end{frame}
\begin{frame}{Классы-аттракторы}
\begin{columns}[T]
\begin{column}{0.47\textwidth}
\begin{panel}
\small\textbf{Классы-аттракторы}
\begin{itemize}
\item Alex и Abigail собирают заметную долю \emph{чужих}
предсказаний: на разных повторах Abigail получает
порядка 10–18\,\% всех ответов при истинной доле
класса $\approx$ 6,9\,\%.
\item Коррекция априорных вероятностей классов
macro-F1 не улучшила и проблему не сняла.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.52\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth, height=0.55\textheight, keepaspectratio]{hub_shares.png}
\end{imgbox}
\end{column}
\end{columns}
\begin{panel}
\small Диаграмма — доли предсказаний «аттракторных» классов
(hub-коллапс: редкие классы забираются популярными).
\end{panel}
\note{Говорит М. В. Савостиков. Проблема редких классов: модель
предсказывает популярные классы слишком часто — Abigail получает десятки
процентов всех ответов при истинной доле около 7\,\%. Простая коррекция
приоров не помогла.}
\end{frame}
\begin{frame}{Персонажи: кто различается}
\begin{columns}[T]
\begin{column}{0.47\textwidth}
\begin{panel}
\small\textbf{Лучшие и худшие по F-мере}
\begin{itemize}
\item Лучшие: Evelyn, Willy, Pam, Pierre, Leo.
\item Худшие: Kent, Wizard, Penny, Mister Qi, Leah, Abigail.
\item У редких классов — широкие интервалы оценок.
\item Мягкое голосование улучшает часть редких классов
(Wizard, Dwarf, Vincent), но Kent остаётся F1 = 0.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.52\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth, height=0.6\textheight, keepaspectratio]{per_class_f1.png}
\end{imgbox}
\end{column}
\end{columns}
\note{Говорит М. В. Савостиков. Диаграмма: F-мера по каждому персонажу.
Лучшие — Evelyn, Willy, Pam, Pierre, Leo; худшие — Kent, Wizard, Penny,
Mister Qi, Leah, Abigail. Редкие классы имеют широкие доверительные
интервалы: для 15 реплик разброс оценок велик. Ансамбль прибавляет
отдельным редким классам, но Kent не находит никто.}
\end{frame}
\begin{frame}{Что означают полученные оценки}
\begin{panel}
\small
\begin{itemize}
\item 0,30 macro-F1 при 34 классах — примерно \textbf{в 10 раз выше
случайного уровня} 0,029: устойчивый сигнал различимости.
\item Значение умеренное и это ожидаемо: реплики по $\sim$19 слов,
дисбаланс классов и общие темы не позволяют «узнать» персонажа
по одной фразе.
\item Умеренность объясняется \emph{условиями задачи}, а не тем, что
автор «не старался»: превышение случайного уровня как раз
говорит о намеренно созданных речевых масках.
\end{itemize}
\end{panel}
\begin{panel}
\small
\begin{itemize}
\item Мы решаем задачу «\emph{какой персонаж} говорит», а не
«\emph{он или не он} писал»: автор один.
\item И о «чистых» идиолектах говорить нельзя: основной вклад дают
лексико-тематический профиль и символьные n-граммы, а после
маскирования содержательных слов качество падает.
\end{itemize}
\end{panel}
\note{Говорит М. В. Савостиков — ключевой слайд по интерпретации. Проговорить
три пункта. (1) 0,304 при случайном 0,029 — это примерно десятикратное
превышение, то есть сигнал реальный. (2) Абсолютная величина умеренная из-за
коротких реплик, дисбаланса и общих тем — это свойства задачи, а не
«автор не пытался»; напротив, различимость масок подтверждает, что автор
сознательно делал разные голоса. (3) Мы определяем персонажа, а не
авторскую принадлежность: автор один. И мы не утверждаем, что выучили
«чистый стиль»: при маскировании содержания качество сильно падает.}
\end{frame}
\begin{frame}{Ограничения}
\begin{columns}[T]
\begin{column}{0.49\textwidth}
\begin{panel}
\small\textbf{Данные}
\begin{itemize}
\item Один корпус, одна игра, один автор; внешняя валидация
не проводилась.
\item Короткие реплики и сильный дисбаланс классов.
\item Ручная фильтрация корпуса невоспроизводима.
\item Нет идентификаторов сцен и диалогов.
\end{itemize}
\end{panel}
\end{column}
\begin{column}{0.49\textwidth}
\begin{panel}
\small\textbf{Методология}
\begin{itemize}
\item Выбор признаков и ансамбля опирался на прошлые серии;
вложенная проверка снижает этот риск, но не устраняет.
\item Основной вклад — содержательные слова и тема.
\item Простая коррекция приоров не помогла редким классам.
\item Стек переобучается на малой выборке.
\end{itemize}
\end{panel}
\end{column}
\end{columns}
\note{Говорит М. В. Савостиков. Ограничения делим на две группы: свойства
данных (один корпус и один автор, дисбаланс, короткие реплики,
невоспроизводимая ручная фильтрация, нет сцен) и свойства метода
(частичный выбор конфигураций по прошлым сериям, тематический сигнал в
признаках, неудачи простых калибровок). Честное перечисление — часть
верификации, а не признание провала.}
\end{frame}
\begin{frame}{Выводы}
\begin{panel}
\begin{itemize}
\item \textbf{Персонажи статистически различимы:} лучшая модель — 0,304
macro-F1, консервативная оценка — 0,275; случайный уровень — 0,029.
\item \textbf{Основной сигнал — лексико-тематический:} символьные
n-граммы и content-LSA дают основной прирост; функциональные слова
и частеречная LSA сами по себе слабы.
\item \textbf{После замены содержательных слов} качество падает с 0,248
до 0,113: содержание доминирует, но стилевой сигнал сохраняется.
\item \textbf{Главная проблема — редкие классы и классы-аттракторы;}
мягкое голосование помогает, но не решает её полностью.
\item \textbf{Корректная формулировка результата:} различимы речевые
маски по лексико-тематическому профилю; утверждение о «чистом
стиле» требует внешней валидации и тематического контроля.
\end{itemize}
\end{panel}
\note{Говорит М. В. Савостиков. Пять итоговых тезисов. Финальную формулировку
оставить точной: мы показали статистическую различимость речевых масок по
лексико-тематическому профилю; для более сильных утверждений — разные идиолекты,
применимость как инструмент — нужны внешний корпус, тематический контроль
и разметка сцен.}
\end{frame}
% ==================== ПРИЛОЖЕНИЕ ====================
\begin{frame}{Приложение: полная матрица ошибок 34$\times$34}
\begin{columns}[T]
\begin{column}{0.62\textwidth}
\begin{imgbox}
\includegraphics[width=\linewidth, height=0.6\textheight, keepaspectratio]{confusion_full34.png}
\end{imgbox}
\end{column}
\begin{column}{0.37\textwidth}
\begin{panel}
\small Раздаточный материал. Строки — истинные персонажи, столбцы —
предсказания; цвет — доля строки; диагональ — верные ответы. Тёмные
внедиагональные клетки — систематические ошибки (те же пары, что на
предыдущих слайдах).
\end{panel}
\end{column}
\end{columns}
\note{Приложение для вопросов и раздаточного материала. Если спросят про
конкретную пару персонажей — искать её в полной матрице: строки сортированы
по размеру класса, цвет кодирует долю строки. Кто говорит: отвечает
М. В. Савостиков (можно подключить В. Н. Копнина по вопросам валидации).}
\end{frame}
\begin{frame}{Спасибо за внимание}
\begin{columns}[T]
\begin{column}{0.55\textwidth}
\begin{center}
\begin{tcolorbox}[enhanced, width=\linewidth, colback=cream, opacityback=0.9,
colframe=cream, boxrule=0pt, arc=2mm, boxsep=2.5mm]
{\large\bfseries Спасибо за внимание}\\[2mm]
Вопросы, обсуждение и предложения по экспериментам\\[2mm]
«Один автор — разные голоса»\\[2mm]
\small А.~А.~Аладьина · В.~Н.~Копнин · М.~В.~Савостиков
\end{tcolorbox}
\end{center}
\end{column}
\begin{column}{0.44\textwidth}
\begin{center}
\begin{imgbox}
\includegraphics[width=\linewidth, height=0.45\textheight, keepaspectratio]{meme.png}
\end{imgbox}
\end{center}
\end{column}
\end{columns}
\begin{tikzpicture}[remember picture, overlay]
\node[anchor=south east, xshift=-2.5mm, yshift=1.5mm]
at (current page.south east)
{\includegraphics[height=0.65cm]{chicken.png}};
\end{tikzpicture}
\note{Финальный слайд; мем как пасхалка. Говорят по очереди все:
А. А. Аладьина благодарит и передаёт слово для вопросов; по вопросам
корпуса отвечает Аладьина, по методологии — Копнин, по результатам —
Савостиков.}
\end{frame}
\end{document}