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
Download docs/index.html from proxy3d/multi-motions-28: direct link, hf CLI and curl.
- Browser
- Download file 32.8 kB
-
https://huggingface.co/proxy3d/multi-motions-28/resolve/main/docs/index.html
- Command line
-
hf download hf://proxy3d/multi-motions-28/docs/index.html
-
curl -L -o index.html https://huggingface.co/proxy3d/multi-motions-28/resolve/main/docs/index.html
32.8 kB
| <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> | |