multi-motions-28 / docs /index.html
proxy3d's picture
Upload folder using huggingface_hub
f5aea10 verified
Raw History Blame Contribute Delete
32.8 kB
<!doctype html>
<html lang="ru">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Multi-Motions 28 — двуязычный EN/RU классификатор эмоций</title>
<meta name="description" content="Как из GoEmotions была построена одна EN/RU multi-label модель на 28 эмоций, как она проверялась на translated и native Russian benchmarks, и как использовать модель через Transformers." />
<meta name="author" content="Илья Зеленский (proxy3d)" />
<meta property="article:author" content="Илья Зеленский (proxy3d)" />
<style>
:root {
--bg:#0b1020; --panel:#11182b; --panel2:#151e34; --text:#e8edf7; --muted:#aab5ca;
--line:#26334f; --accent:#7dd3fc; --accent2:#a7f3d0; --warn:#fde68a; --max:1120px;
}
*{box-sizing:border-box} html{scroll-behavior:smooth}
body{margin:0;background:linear-gradient(180deg,#08101f 0,#0b1020 28rem,#0b1020 100%);color:var(--text);font:16px/1.68 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
a{color:var(--accent);text-decoration:none} a:hover{text-decoration:underline}
.wrap{max-width:var(--max);margin:auto;padding:0 28px}
header{padding:74px 0 44px;border-bottom:1px solid var(--line)}
.eyebrow{font-size:.8rem;letter-spacing:.16em;text-transform:uppercase;color:var(--accent2);font-weight:800}
h1{font-size:clamp(2.25rem,6vw,4.8rem);line-height:1.03;letter-spacing:-.045em;margin:.5rem 0 1.2rem;max-width:1000px}
.lead{font-size:1.2rem;max-width:880px;color:#c7d2e7}
.stats{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-top:34px}
.stat{background:rgba(17,24,43,.78);border:1px solid var(--line);border-radius:15px;padding:18px}
.stat b{display:block;font-size:1.65rem;color:#fff}.stat span{color:var(--muted);font-size:.88rem}
nav{position:sticky;top:0;z-index:10;background:rgba(11,16,32,.9);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
nav .wrap{display:flex;gap:24px;overflow:auto;padding-top:12px;padding-bottom:12px;white-space:nowrap;font-size:.91rem}
main{padding:42px 0 70px} section{scroll-margin-top:70px;margin:0 0 66px}
h2{font-size:2rem;letter-spacing:-.025em;margin:0 0 18px} h3{font-size:1.25rem;margin:32px 0 10px}
p{max-width:920px;color:#d5dcec}.muted{color:var(--muted)}
.callout{border:1px solid #31506f;background:#0e1b2e;border-radius:16px;padding:18px 20px;margin:22px 0;max-width:980px}
.callout strong{color:#fff}
.flow{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:26px 0}
.flow .box{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:20px;min-height:150px}
.flow .num{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#183148;color:var(--accent);font-weight:800;margin-bottom:12px}
.flow b{display:block;margin-bottom:5px}.flow small{color:var(--muted)}
.labels{display:flex;flex-wrap:wrap;gap:7px;margin:16px 0 24px}.labels span{border:1px solid var(--line);background:var(--panel);padding:5px 9px;border-radius:999px;font-size:.82rem;color:#cbd6ea}
.table-wrap{overflow:auto;border:1px solid var(--line);border-radius:16px;margin:20px 0}
table{border-collapse:collapse;width:100%;min-width:760px;background:var(--panel)}
th,td{text-align:left;padding:13px 15px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:.82rem;letter-spacing:.03em;text-transform:uppercase;color:#adbad2;background:#101a2f}
tr:last-child td{border-bottom:0}.best{color:var(--accent2);font-weight:750}.note{color:var(--warn)}
.metric-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:20px 0}
.metric-card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:18px}
.metric-card h4{margin:0 0 13px;font-size:1.05rem}
.bar-row{display:grid;grid-template-columns:110px 1fr 55px;gap:10px;align-items:center;margin:9px 0;font-size:.88rem}
.bar{height:9px;background:#202c45;border-radius:999px;overflow:hidden}.bar>i{display:block;height:100%;background:linear-gradient(90deg,#38bdf8,#a7f3d0);border-radius:inherit}
pre{background:#070b14;border:1px solid var(--line);border-radius:15px;padding:18px;overflow:auto;color:#d9e5f7;font-size:.88rem;line-height:1.55}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.compare td:first-child{font-weight:650;color:#fff}.badge{display:inline-block;padding:2px 8px;border:1px solid #395472;border-radius:999px;font-size:.72rem;color:#bfe9ff}
footer{border-top:1px solid var(--line);padding:30px 0 60px;color:var(--muted)}
.author-card{display:flex;flex-wrap:wrap;gap:10px 22px;align-items:center;margin:18px 0 4px;color:#c7d2e7;font-size:.96rem}.author-card b{color:#fff}.author-card a{font-weight:650}
ol.refs{padding-left:22px;max-width:980px}.refs li{margin:9px 0;color:#bdc8db}
@media(max-width:850px){.stats{grid-template-columns:repeat(2,1fr)}.flow{grid-template-columns:1fr 1fr}.metric-grid{grid-template-columns:1fr}}
@media(max-width:560px){.wrap{padding:0 18px}.flow{grid-template-columns:1fr}.stats{grid-template-columns:1fr 1fr}header{padding-top:48px}}
</style>
</head>
<body>
<header>
<div class="wrap">
<div class="eyebrow">Text emotion classification · EN / RU</div>
<h1>Multi-Motions 28: двуязычная модель на 28 эмоций</h1>
<p class="lead">Мы построили одну XLM‑RoBERTa модель, которая возвращает одинаковый 28‑мерный вектор эмоций для английского и русского текста, а затем проверили её не только на переведённом GoEmotions, но и на двух независимых наборах с изначально русскими текстами.</p>
<div class="author-card">
<span><b>Автор:</b> Илья Зеленский (proxy3d)</span>
<span><b>Hugging Face:</b> <a href="https://huggingface.co/proxy3d/multi-motions-28" target="_blank" rel="noopener">proxy3d/multi-motions-28</a></span>
<span><b>Телеграмм канал:</b> <a href="https://t.me/greenruff" target="_blank" rel="noopener">@greenruff</a></span>
<span><b>Связанный проект:</b> <a href="https://iproxy3d.github.io/communication-styles-llm/" target="_blank" rel="noopener">Communication Styles LLM</a></span>
</div>
<div class="stats">
<div class="stat"><b>28</b><span>GoEmotions labels</span></div>
<div class="stat"><b>2</b><span>языка в одной модели</span></div>
<div class="stat"><b>67,144</b><span>training IDs</span></div>
<div class="stat"><b>3</b><span>independent seeds</span></div>
<div class="stat"><b>2</b><span>native‑RU holdouts</span></div>
</div>
<div class="callout" style="margin-top:22px;max-width:1000px">
<strong>Зачем использовать эту модель.</strong> Один checkpoint работает сразу с английским и русским, возвращает не 5–6 базовых классов, а полный 28‑мерный GoEmotions‑вектор, устойчиво воспроизводится на трёх seed и переносится на независимые native‑Russian корпуса без дообучения на них.
</div>
</div>
</header>
<nav><div class="wrap"><a href="#model">1. Что построено</a><a href="#data">Данные</a><a href="#difference">Отличия</a><a href="#benchmarks">2. Бенчмарки</a><a href="#comparison">Как читать результаты</a><a href="#fit">Когда использовать</a><a href="#usage">3. Код</a><a href="#limits">Ограничения</a></div></nav>
<main class="wrap">
<section id="model">
<h2>1. Что мы построили</h2>
<p>Исходной точкой стал <a href="https://aclanthology.org/2020.acl-main.372/">GoEmotions</a>: английский multi‑label корпус Reddit с 27 категориями эмоций и <code>neutral</code>. В simplified split находятся 43,410 training, 5,426 validation и 5,427 test примеров. Вместо создания отдельного русского классификатора с другой таксономией мы сохранили все 28 координат и обучили одну мультиязычную модель на базе <a href="https://huggingface.co/FacebookAI/xlm-roberta-base">XLM‑RoBERTa base</a>.</p>
<p>На выходе нет обязательного выбора одной эмоции. Каждая координата имеет собственный sigmoid score, поэтому один текст может одновременно выражать, например, <em>gratitude</em>, <em>joy</em> и <em>approval</em>. Такой формат удобен не только для классификации, но и как непрерывное эмоциональное представление для агентов, диалоговых систем и downstream‑логики.</p>
<div class="labels">
<span>admiration</span><span>amusement</span><span>anger</span><span>annoyance</span><span>approval</span><span>caring</span><span>confusion</span><span>curiosity</span><span>desire</span><span>disappointment</span><span>disapproval</span><span>disgust</span><span>embarrassment</span><span>excitement</span><span>fear</span><span>gratitude</span><span>grief</span><span>joy</span><span>love</span><span>nervousness</span><span>optimism</span><span>pride</span><span>realization</span><span>relief</span><span>remorse</span><span>sadness</span><span>surprise</span><span>neutral</span>
</div>
</section>
<section id="data">
<h2>Как получили EN/RU обучающий корпус</h2>
<div class="flow">
<div class="box"><div class="num">1</div><b>GoEmotions</b><small>Официальный simplified split и исходная 28‑label разметка. English остаётся исходным языком.</small></div>
<div class="box"><div class="num">2</div><b>Aligned Russian</b><small>Английские тексты переводились на русский emotion‑aware LLM‑переводом. EN/RU пара всегда оставалась в одном исходном split.</small></div>
<div class="box"><div class="num">3</div><b>Long‑tail synthetic</b><small>Добавлен целевой synthetic слой для редких и плохо покрытых эмоций, примерно 12k training‑примеров.</small></div>
<div class="box"><div class="num">4</div><b>Human-written augmentation</b><small>EmpatheticDialogues, ISEAR, MELD и SemEval‑2018 были приведены к общей GoEmotions‑таксономии; для уверенных human‑примеров использованы soft targets.</small></div>
</div>
<p>Финальный training source содержит <strong>67,144 уникальных IDs</strong> и <strong>134,288 EN/RU views</strong>. Из них 55,346 обучаются как hard‑label примеры, 11,798 human-written примеров используют сохранённые soft confidence targets. Для последней группы слабые scores ниже 0.75 не передаются в loss как положительный сигнал.</p>
<div class="callout"><strong>Ключевой принцип.</strong> Русский язык не создаёт отдельную emotion ontology. Английский и русский тексты обучаются в одной координатной системе, поэтому выход модели имеет одинаковый смысл независимо от языка.</div>
</section>
<section id="difference">
<h2>Чем подход отличается от типичного русского emotion classifier</h2>
<p>Большинство русских benchmark‑корпусов покрывают 5–6 базовых эмоций и оптимизируют модель непосредственно под конкретный набор. Здесь задача другая: сохранить fine‑grained 28‑мерное пространство GoEmotions и сделать его двуязычным, не обучая отдельные головы или отдельные модели для EN и RU.</p>
<div class="table-wrap"><table>
<thead><tr><th>Свойство</th><th>Этот проект</th><th>Типичный benchmark classifier</th></tr></thead>
<tbody>
<tr><td>Таксономия</td><td>27 fine-grained эмоций + neutral</td><td>Обычно 5–7 базовых эмоций</td></tr>
<tr><td>Языки</td><td>EN и RU в одной модели и одном label space</td><td>Отдельная модель под язык/датасет</td></tr>
<tr><td>Выход</td><td>Полный 28-D sigmoid vector</td><td>Часто бинарные/категориальные labels</td></tr>
<tr><td>Русская проверка</td><td>Translated GoEmotions + два native-RU holdout</td><td>Train/test внутри одного русского корпуса</td></tr>
<tr><td>External holdout</td><td>Не использовался для обучения или настройки thresholds</td><td>Часто benchmark train/dev используется для fine-tuning</td></tr>
<tr><td>Reproducibility</td><td>3 независимых seed</td><td>Зависит от конкретной работы</td></tr>
</tbody>
</table></div>
</section>
<section id="benchmarks">
<h2>2. Бенчмарки и инженерная проверка</h2>
<p>Финальную конфигурацию обучили трижды с разными random seeds. Все значения ниже — <strong>mean ± population std</strong>. Для checkpoint selection использовался threshold‑free macro Average Precision на внутренней validation, а не external Russian benchmarks.</p>
<h3>GoEmotions: EN и переведённый RU</h3>
<div class="table-wrap"><table>
<thead><tr><th>Test</th><th>Micro‑F1</th><th>Macro‑F1</th><th>Micro‑AP</th><th>Macro‑AP</th></tr></thead>
<tbody>
<tr><td>English</td><td class="best">0.5953 ± 0.0017</td><td>0.5196 ± 0.0035</td><td class="best">0.6366 ± 0.0041</td><td>0.5065 ± 0.0028</td></tr>
<tr><td>Russian translation</td><td>0.5654 ± 0.0014</td><td>0.4826 ± 0.0050</td><td>0.5950 ± 0.0023</td><td>0.4609 ± 0.0057</td></tr>
</tbody>
</table></div>
<p class="muted">Это проверка одной и той же 28‑label задачи на выровненных EN/RU данных. Малый разброс между seed показывает, что итог не зависит от одного удачного обучения.</p>
<h3>Native Russian: данные, которые не были переводом GoEmotions</h3>
<p>Для проверки переноса мы использовали два независимых корпуса. <a href="https://github.com/sag111/CEDR">CEDR</a> содержит изначально русские тексты из Twitter, LiveJournal и Lenta.ru и размечает пять эмоций. Русская часть <a href="https://aclanthology.org/2025.semeval-1.327/">SemEval‑2025 Task 11 / BRIGHTER</a> размечает шесть базовых эмоций. Мы оценивали только пересекающиеся координаты модели; остальные GoEmotions labels не считались отрицательными.</p>
<div class="table-wrap"><table>
<thead><tr><th>Native‑RU benchmark</th><th>N</th><th>Shared labels</th><th>Micro‑F1</th><th>Macro‑F1</th><th>Macro‑AP</th></tr></thead>
<tbody>
<tr><td>CEDR test</td><td>1,882</td><td>5</td><td>0.5180 ± 0.0135</td><td>0.5295 ± 0.0181</td><td class="best">0.6762 ± 0.0079</td></tr>
<tr><td>SemEval‑2025 RU test</td><td>1,000</td><td>6</td><td>0.6355 ± 0.0142</td><td>0.6332 ± 0.0180</td><td class="best">0.8448 ± 0.0047</td></tr>
</tbody>
</table></div>
<div class="metric-grid">
<div class="metric-card"><h4>CEDR · AP по эмоциям</h4>
<div class="bar-row"><span>joy</span><div class="bar"><i style="width:73.9%"></i></div><b>.739</b></div>
<div class="bar-row"><span>sadness</span><div class="bar"><i style="width:73.8%"></i></div><b>.738</b></div>
<div class="bar-row"><span>fear</span><div class="bar"><i style="width:73.6%"></i></div><b>.736</b></div>
<div class="bar-row"><span>surprise</span><div class="bar"><i style="width:66.3%"></i></div><b>.663</b></div>
<div class="bar-row"><span>anger</span><div class="bar"><i style="width:50.5%"></i></div><b>.505</b></div>
</div>
<div class="metric-card"><h4>SemEval‑2025 RU · AP по эмоциям</h4>
<div class="bar-row"><span>fear</span><div class="bar"><i style="width:92.7%"></i></div><b>.927</b></div>
<div class="bar-row"><span>joy</span><div class="bar"><i style="width:88.2%"></i></div><b>.882</b></div>
<div class="bar-row"><span>disgust</span><div class="bar"><i style="width:87.0%"></i></div><b>.870</b></div>
<div class="bar-row"><span>anger</span><div class="bar"><i style="width:85.6%"></i></div><b>.856</b></div>
<div class="bar-row"><span>sadness</span><div class="bar"><i style="width:80.6%"></i></div><b>.806</b></div>
<div class="bar-row"><span>surprise</span><div class="bar"><i style="width:72.8%"></i></div><b>.728</b></div>
</div>
</div>
<div class="callout"><strong>Что особенно важно для production.</strong> На native‑RU ranking (Average Precision) переносится лучше, чем фиксированные binary thresholds. Значит, 28‑D score vector переносится между доменами устойчивее, а thresholds при необходимости следует калибровать под конкретный продуктовый домен.</div>
</section>
<section id="comparison">
<h2>Как правильно читать сравнение с другими моделями</h2>
<div class="callout"><strong>Главное:</strong> эта модель не является специализированным классификатором CEDR или SemEval. Её задача — одна общая EN/RU модель на 28 эмоций. Поэтому CEDR и SemEval используются здесь как <em>внешние transfer‑тесты</em>, а не как соревнования, под которые модель обучалась.</div>
<h3>1. Где сравнение действительно прямое: GoEmotions</h3>
<p>Здесь модели решают одну и ту же исходную задачу GoEmotions. Это наиболее полезный внешний ориентир для оценки качества нашей модели. Наша модель при этом двуязычная: тот же checkpoint обслуживает EN и RU.</p>
<div class="table-wrap"><table class="compare">
<thead><tr><th>Модель</th><th>Языки</th><th>Macro‑F1</th><th>Как читать результат</th></tr></thead>
<tbody>
<tr><td>Original BERT baseline, GoEmotions</td><td>EN</td><td>0.460</td><td>Исходный опубликованный baseline GoEmotions.</td></tr>
<tr><td><strong>Наша EN/RU модель, 3 seeds</strong></td><td><strong>EN + RU</strong></td><td class="best"><strong>0.520 ± 0.004</strong></td><td><strong>+0.060 absolute macro‑F1 к исходному BERT baseline, при этом один checkpoint работает на двух языках.</strong></td></tr>
<tr><td>RoBERTa‑large community reference</td><td>EN</td><td>≈0.533</td><td>English‑only, более крупная RoBERTa‑large; self‑reported reference. Разница с нашей моделью около 0.013 macro‑F1.</td></tr>
</tbody>
</table></div>
<p class="muted">Это не заявление SOTA. Смысл сравнения в другом: двуязычная XLM‑RoBERTa base остаётся близка к сильному English‑only reference и заметно выше исходного BERT baseline, сохраняя единое 28‑label пространство для двух языков.</p>
<h3>2. CEDR и SemEval — не leaderboard для нашей модели, а проверка переноса</h3>
<p>В CEDR и SemEval специализированные системы обычно обучаются на train/dev именно этих корпусов и оптимизируются под их 5–6 классов. Наша модель <strong>не видела ни CEDR, ни SemEval/BRIGHTER при обучении</strong>, не настраивала на них thresholds и сохраняла исходные 28 GoEmotions координат. Поэтому сравнивать её число F1 с target‑trained leaderboard как «кто лучше» методологически неверно.</p>
<div class="table-wrap"><table class="compare">
<thead><tr><th>Внешний native‑RU тест</th><th>Что увидела модель при обучении</th><th>Macro‑F1</th><th>Macro‑AP</th><th>Что это показывает</th></tr></thead>
<tbody>
<tr><td>CEDR test, 1,882</td><td><span class="badge">0 CEDR train/dev</span></td><td><strong>0.529 ± 0.018</strong></td><td class="best"><strong>0.676 ± 0.008</strong></td><td>Перенос на другой native‑Russian домен и другую схему разметки без fine‑tuning.</td></tr>
<tr><td>SemEval‑2025 RU test, 1,000</td><td><span class="badge">0 SemEval/BRIGHTER train/dev</span></td><td><strong>0.633 ± 0.018</strong></td><td class="best"><strong>0.845 ± 0.005</strong></td><td>Сильный ranking шести общих эмоций на независимом русском benchmark без target‑specific обучения.</td></tr>
</tbody>
</table></div>
<h3>3. Почему специализированная модель может показать выше F1 — и почему это не делает эту модель бесполезной</h3>
<p>Если задача — только один конкретный benchmark с шестью эмоциями и доступны его train/dev данные, специализированная модель закономерно может показать более высокий F1: она обучается прямо под этот label set, распределение текстов и конкретный threshold protocol. Это другой продуктовый режим.</p>
<p>Здесь ценность модели в другом: <strong>один универсальный checkpoint, 28 fine‑grained эмоций, английский и русский в одном пространстве, полный score vector и подтверждённый перенос на native Russian без дополнительного обучения</strong>. Для приложений, которым нужно единое эмоциональное представление между языками, это полезнее, чем отдельный 5–6‑class классификатор под каждый корпус.</p>
<div class="callout"><strong>Практический вывод.</strong> Если нужен классификатор строго под CEDR или SemEval и можно переобучаться на их train split — лучше строить target‑specific модель. Если нужен единый EN/RU encoder на 28 эмоций, который можно использовать сразу и получать сопоставимый 28‑D вектор на обоих языках, эта модель решает именно такую задачу.</div>
</section>
<section id="fit">
<h2>Когда эта модель особенно полезна</h2>
<div class="table-wrap"><table>
<thead><tr><th>Сценарий</th><th>Почему подходит</th></tr></thead>
<tbody>
<tr><td>EN/RU продукт с единым API</td><td>Один checkpoint и одинаковые 28 координат для обоих языков.</td></tr>
<tr><td>LLM/agent emotional state</td><td>Можно использовать полный 28‑D score vector, а не только один выбранный класс.</td></tr>
<tr><td>Fine‑grained анализ эмоций</td><td>28 категорий вместо типичных 5–7 базовых эмоций.</td></tr>
<tr><td>Перенос на новый RU домен</td><td>Native‑RU holdouts показывают, что ranking переносится без дообучения на CEDR/SemEval.</td></tr>
</tbody>
</table></div>
<div class="callout" style="margin-top:20px">
<strong>Практическое применение: Communication Styles LLM.</strong><br>
Эта модель может использоваться как семантический канал эмоций в системе управления коммуникационным стилем и эмоциональным состоянием агента: 28-D вектор передаётся дальше в логику состояния, стиля, мотивации и микродиалогов вместо сведения реплики к одной эмоции.<br><br>
<a href="https://iproxy3d.github.io/communication-styles-llm/" target="_blank" rel="noopener">Статья и документация Communication Styles LLM</a><br>
<a href="https://github.com/iproxy3d/communication-styles-llm" target="_blank" rel="noopener">GitHub проекта Communication Styles LLM</a>
</div>
</section>
<section id="usage">
<h2>3. Использование модели</h2>
<p>Release рассчитан на обычный Hugging Face workflow. После публикации весов достаточно указать ID репозитория. Основной контракт — получить все 28 scores; thresholds являются дополнительным представлением.</p>
<h3>Минимальный Transformers пример</h3>
<pre><code># Автор: Илья Зеленский (proxy3d)
# Телеграмм канал: https://t.me/greenruff
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
MODEL_ID = "proxy3d/multi-motions-28"
labels = [
"admiration", "amusement", "anger", "annoyance", "approval", "caring",
"confusion", "curiosity", "desire", "disappointment", "disapproval",
"disgust", "embarrassment", "excitement", "fear", "gratitude", "grief",
"joy", "love", "nervousness", "optimism", "pride", "realization",
"relief", "remorse", "sadness", "surprise", "neutral",
]
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID).eval()
text = "Я наконец закончил — какое облегчение!"
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=64)
with torch.inference_mode():
scores = torch.sigmoid(model(**inputs).logits[0])
result = sorted(zip(labels, scores.tolist()), key=lambda x: x[1], reverse=True)
print(result[:5])</code></pre>
<h3>Через wrapper из inference repository</h3>
<pre><code># Автор: Илья Зеленский (proxy3d)
# Телеграмм канал: https://t.me/greenruff
from goemotions_en_ru import EmotionClassifier
clf = EmotionClassifier("proxy3d/multi-motions-28")
result = clf.predict("Спасибо, это действительно помогло.")
print(result["top"])
print(result["scores"]) # все 28 координат
print(result["labels"]) # thresholded view</code></pre>
</section>
<section id="limits">
<h2>Что результаты доказывают — и чего не доказывают</h2>
<p>Native‑Russian тесты подтверждают перенос на реальный русский текст, но покрывают только пять/шесть базовых эмоций. Они не являются доказательством одинакового качества всех 28 fine‑grained категорий на native Russian. Для таких редких категорий, как <em>grief</em>, <em>relief</em>, <em>pride</em> или <em>nervousness</em>, отдельный большой native‑RU benchmark пока отсутствует.</p>
<p>Также sigmoid scores не следует интерпретировать как универсально откалиброванные вероятности внутреннего психологического состояния человека. Модель определяет эмоциональные признаки, выраженные в тексте, и её thresholds зависят от домена.</p>
<p>При этих ограничениях эксперимент закрывает основной инженерный вопрос: одна fine‑grained EN/RU модель остаётся конкурентоспособной на исходном GoEmotions, стабильно воспроизводится между seed и демонстрирует перенос на независимые native‑Russian corpora без target‑specific дообучения. Поэтому её корректно оценивать как универсальную двуязычную 28‑label модель, а не как специализированную CEDR/SemEval submission.</p>
</section>
<section>
<h2>Источники</h2>
<ol class="refs">
<li>Demszky et al. <a href="https://aclanthology.org/2020.acl-main.372/">GoEmotions: A Dataset of Fine-Grained Emotions</a>, ACL 2020.</li>
<li>Google Research. <a href="https://github.com/google-research/google-research/tree/master/goemotions">GoEmotions dataset repository</a>.</li>
<li>Facebook AI. <a href="https://huggingface.co/FacebookAI/xlm-roberta-base">XLM‑RoBERTa base</a>.</li>
<li>Sboev, Naumov, Rybka. <a href="https://doi.org/10.1016/j.procs.2021.06.075">Data-Driven Model for Emotion Detection in Russian Texts</a>, 2021; <a href="https://github.com/sag111/CEDR">CEDR repository</a>.</li>
<li>Muhammad et al. <a href="https://aclanthology.org/2025.acl-long.436/">BRIGHTER</a>, ACL 2025.</li>
<li>Muhammad et al. <a href="https://aclanthology.org/2025.semeval-1.327/">SemEval-2025 Task 11: Bridging the Gap in Text-Based Emotion Detection</a>.</li>
<li>Riad & Ullah. <a href="https://aclanthology.org/2025.semeval-1.191/">SyntaxMind at SemEval‑2025 Task 11</a> — published comparison table for Russian Track A.</li>
<li><a href="https://huggingface.co/AliceYin/goemotions-roberta-large-focal-sota">RoBERTa-large focal GoEmotions community checkpoint</a> — self-reported reference metrics.</li>
</ol>
</section>
</main>
<footer><div class="wrap">
Multi-Motions 28 · EN/RU inference release · 2026<br>
Автор: Илья Зеленский (proxy3d) · <a href="https://t.me/greenruff" target="_blank" rel="noopener">Telegram @greenruff</a> ·
<a href="https://huggingface.co/proxy3d/multi-motions-28" target="_blank" rel="noopener">Hugging Face</a> ·
<a href="https://iproxy3d.github.io/communication-styles-llm/" target="_blank" rel="noopener">Communication Styles LLM — статья</a> ·
<a href="https://github.com/iproxy3d/communication-styles-llm" target="_blank" rel="noopener">GitHub</a>
</div></footer>
</body>
</html>