Text Classification
Transformers
Safetensors
English
Russian
xlm-roberta
emotion-classification
multi-label-classification
goemotions
english
russian
affective-computing
text-embeddings-inference
Instructions to use proxy3d/multi-motions-28 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use proxy3d/multi-motions-28 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="proxy3d/multi-motions-28")# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("proxy3d/multi-motions-28") model = AutoModelForSequenceClassification.from_pretrained("proxy3d/multi-motions-28", device_map="auto") - Notebooks
- Google Colab
- Kaggle
File size: 32,794 Bytes
299bfda f5aea10 299bfda f5aea10 299bfda f5aea10 299bfda f5aea10 299bfda f5aea10 299bfda f5aea10 299bfda f5aea10 299bfda | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 | <!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>
|