/ Модель

Характеристики

Контекст
8 192 токена
Параметры
149 млн
Лицензия
Apache 2.0
Архитектура
modernbert · dense
Базовая модель
ModernBERT-base
Библиотека
transformers
Опубликована
28 июл 2026

opus-emotion-1

Классификация текстаТекст → label

Англоязычная модель для многометочной классификации текстов по 28 эмоциональным категориям.

13скачиваний за 30 дней0лайковвеса обновлены28 июл 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Opus Emotion 1 — англоязычный классификатор эмоций от opus-research, дообученный на базе answerdotai/ModernBERT-base на датасете GoEmotions. Модель ModernBERT для классификации последовательностей содержит 149 млн параметров и поддерживает контекст до 8192 токенов; при обучении использовались входы длиной до 96 токенов. Она назначает тексту несколько из 28 эмоциональных меток, поэтому для получения предсказаний следует применять sigmoid с порогом, а не softmax.

Модель предназначена прежде всего для определения эмоций в англоязычных комментариях Reddit. В README указаны macro F1 0,490 и micro F1 0,582; качество заметно различается между классами и лучше для эмоций с явными словесными маркерами. Лицензия — Apache-2.0. Модель может хуже работать на других жанрах и регистрах; редкие и субъективные метки, включая облегчение, горе и гордость, ненадёжны по отдельности.

Сценарии применения

  • определение эмоций в комментариях Reddit
  • многометочная разметка эмоциональных реакций
  • анализ благодарности и одобрения в сообщениях
  • подготовка эмоциональных меток для анализа пользовательских отзывов

Ограничения

Модель обучена на англоязычных комментариях Reddit, поэтому на других жанрах и регистрах качество может снижаться. Редкие и субъективные метки, например relief, grief и pride, ненадёжны при отдельном использовании; для многометочных предсказаний нужен sigmoid с порогом.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

Opus Emotion 1

A multi-label emotion classifier over 28 labels, fine-tuned from answerdotai/ModernBERT-base on GoEmotions.

Trained in 13.6 minutes on a consumer AMD RX 7600 (8GB, gfx1102) under WSL2 with ROCm. No datacentre, no rented GPU.

macro F10.490
micro F10.582
classes never predicted0 / 28
training time13.6 min
throughput213 samples/s
peak VRAM4.59 GB

Macro F1 of 0.49 is in line with published GoEmotions baselines; the original paper reports 0.46 macro F1 with a BERT-base model.

Per-class results

The interesting part is not the average

A single macro-F1 number hides what actually happened. Per-class F1 ranges from 0.90 to 0.09, and the obvious explanation — rare labels do worse — only holds up halfway (r = 0.40 between log support and F1).

The clearer pattern is lexical distinctiveness:

labelsupportF1
gratitude3580.90announced by the word "thanks"
approval3970.35a judgement call, no marker word
remorse680.70"sorry", "my fault"
annoyance3030.26overlaps anger, disapproval, disappointment

gratitude and approval have near-identical support and a 2.5× gap in F1. More data would not close it. Emotions with a reliable surface marker are easy; emotions that are inferences about intent are hard, and human annotators disagree about them too — which puts a ceiling on what any model can score.

relief (F1 0.09, n=18) is the floor case: rare and subjective.

Usage

from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch

name = "opus-research/opus-emotion-1"
tok = AutoTokenizer.from_pretrained(name)
model = AutoModelForSequenceClassification.from_pretrained(name).eval()

text = "FUCK YOU BRO WHY ARE YOU SO FUCKING RETARDED"
with torch.no_grad():
    probs = torch.sigmoid(model(**tok(text, return_tensors="pt")).logits)[0]

for i, p in enumerate(probs):
    if p > 0.5:
        print(model.config.id2label[i], f"{p:.1%}")
# anger 97.2%

Multi-label, so use sigmoid and a threshold — not softmax. A comment can be both admiration and amusement.

Tune the threshold to your task. 0.5 is the reported operating point; dropping to 0.3 raises recall on the rare classes at some cost to precision, which is usually the right trade if you are filtering rather than labelling.

Training

Baseanswerdotai/ModernBERT-base (149M)
Epochs / LR4 / 5e-5, cosine, 6% warmup
Batch / max_len32 / 96
Precisionbf16
LossBCEWithLogits (multi-label)
HardwareAMD RX 7600 8GB, ROCm 7.13 via ROCDXG on WSL2

Three epochs gave macro F1 0.483; four gave 0.490. It was still improving slowly, so more epochs may add a little.

Note on the hardware

The RX 7600 is not on AMD's supported list for ROCm under WSL. It works via ROCDXG with a device-ID override in /opt/rocm/share/rocdxg/dids.conf, and by capping torch's VRAM so the Windows desktop compositor keeps a slice — without that cap, filling 8GB freezes the screen.

Limitations

  • English Reddit comments. Register-specific; expect degradation elsewhere.
  • Rare, subjective labels are weak — relief, grief, pride sit below 0.40 and should not be relied on individually.
  • Annotator disagreement is the ceiling, not model capacity, for several of the low scorers.
  • Trained on 128-token inputs, truncated at 96 during training.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · transformers · text-classification

Можно запустить

Подбираем GPU…

Класс архитектуры
ModernBertForSequenceClassification
Ревизия весов
3baa982

0 моделей