diff --git a/lab1/.gitignore b/lab1/.gitignore index ab6f7b5..dc41540 100644 --- a/lab1/.gitignore +++ b/lab1/.gitignore @@ -9,3 +9,12 @@ __pycache__/ !/results/README.md /presentation/preview/ + +/presentation/latex/*.aux +/presentation/latex/*.log +/presentation/latex/*.nav +/presentation/latex/*.out +/presentation/latex/*.snm +/presentation/latex/*.toc +/presentation/latex/*.synctex.gz +/presentation/latex/preview/ diff --git a/lab1/README.md b/lab1/README.md index bfb4a48..dcb46b3 100644 --- a/lab1/README.md +++ b/lab1/README.md @@ -138,16 +138,29 @@ python -m stylometry.cli subgroup-report \ ## Презентация -Готовая презентация находится в `presentation/`: +Есть две версии: -- `stardew_stylometry.pptx` — редактируемая презентация на 32 слайда; -- `stardew_stylometry.pdf` — версия для просмотра; -- `presentation/README.md` — структура, сборка и редактирование; -- `presentation/build_deck.py` — сборка PPTX; -- `presentation/make_slide_figures.py` — матрицы ошибок и диаграммы. +- **`presentation/stardew_stylometry.pptx`** — редактируемая PPTX-версия + (30 слайдов после ручных правок); +- **`presentation/stardew_stylometry.pdf`** — PDF этой версии; +- **`presentation/latex/stardew_stylometry.tex`** — академическая + Beamer-версия; +- **`presentation/latex/stardew_stylometry.pdf`** — собранный PDF LaTeX-версии + (27 страниц). -Презентация разбита на три блока: корпус, методология, результаты. На каждом -слайде есть фон и маленькая курица-пасхалка; на последнем слайде — мем. +LaTeX-версия содержит три блока на трёх докладчиков, фон и курицу на каждом +слайде, титульную заставку, изображение персонажей, две круговые диаграммы, +матрицы ошибок, F-меры по персонажам, приложение с полной матрицей и финальный +мем. Формул почти нет: одна компактная запись обозначений на слайде постановки +задачи. + +Сборка LaTeX: + +```bash +cd presentation/latex +xelatex stardew_stylometry.tex +xelatex stardew_stylometry.tex +``` ## Конфигурация diff --git a/lab1/presentation/README.md b/lab1/presentation/README.md index 8f949a9..8feaa3b 100644 --- a/lab1/presentation/README.md +++ b/lab1/presentation/README.md @@ -49,3 +49,17 @@ python presentation/build_deck.py потеряет ручные правки. Для точечной переработки первого блока использован `rework_block1.py`; перед повторным применением скрипта сделайте резервную копию PPTX. + +## LaTeX-версия + +Академическая Beamer-презентация: + +- `latex/stardew_stylometry.tex` — исходник; +- `latex/stardew_stylometry.pdf` — собранный PDF, 27 страниц; +- сборка: `cd latex && xelatex stardew_stylometry.tex` (два прохода). + +В LaTeX-версии три блока на трёх докладчиков, фон и курица на каждом слайде, +титульная заставка, изображение персонажей, две круговые диаграммы, матрицы +ошибок, F-меры по персонажам, приложение с полной матрицей и финальный мем. +Формул почти нет: одна компактная запись обозначений на слайде постановки +задачи. diff --git a/lab1/presentation/latex/stardew_stylometry.pdf b/lab1/presentation/latex/stardew_stylometry.pdf new file mode 100644 index 0000000..a85cc5f Binary files /dev/null and b/lab1/presentation/latex/stardew_stylometry.pdf differ diff --git a/lab1/presentation/latex/stardew_stylometry.tex b/lab1/presentation/latex/stardew_stylometry.tex new file mode 100644 index 0000000..f5e94fd --- /dev/null +++ b/lab1/presentation/latex/stardew_stylometry.tex @@ -0,0 +1,879 @@ +% !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{}, ничего не удаляем из + стилистических сигналов (пунктуация, регистр оставлены). Честно сказать про + ручную фильтрацию и отсутствие идентификаторов сцен.} +\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}