/ Модель

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

Контекст
2 048 токенов
Параметры
29 млн
Лицензия
MIT
Архитектура
bert · dense
Базовая модель
rubert-tiny2
Библиотека
transformers
Опубликована
22 мая 2022

rubert-tiny2-russian-emotion-detection

Классификация текстаТекст → label6 профессий

Компактная модель для распознавания семи эмоций в русскоязычном тексте с независимой оценкой вероятности каждой эмоции.

802скачиваний за 30 дней14лайковвеса обновлены1 авг 2026

Бенчмарки

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

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

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

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

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

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

Aniemore/rubert-tiny2-russian-emotion-detection — русскоязычная модель классификации текста, разработанная как дообучение cointegrated/rubert-tiny2 на наборе данных Aniemore/cedr-m7. Это BERT-энкодер с 29 млн параметров и контекстом до 2048 токенов; модель принимает текст и оценивает вероятность семи эмоций: нейтральности, радости, грусти, энтузиазма, страха, гнева и отвращения.

Классификационная голова использует семь независимых сигмоид, поэтому для одного текста возможны несколько эмоций или ни одной. На тестовой части CEDR-M7 указана макро ROC AUC 0,8696. Порог 0,5 для расчёта F1 можно настраивать под конкретные данные. Модель распространяется под лицензией MIT.

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

  • Определение эмоциональной окраски коротких сообщений
  • Анализ тональности отзывов по нескольким эмоциям
  • Разметка эмоциональных реплик в диалогах
  • Поиск сообщений со страхом, гневом или грустью
  • Оценка эмоциональных сигналов в текстовых потоках

Ограничения

Модель обучена на CEDR-M7 и наборе из семи эмоций, поэтому её оценки могут хуже переноситься на другие жанры и схемы разметки. Для использования меток на практике порог классификации следует подбирать на собственных данных.

Для каких профессий подходит6

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

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

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

Открыть на Hugging Face

rubert-tiny2-russian-emotion-detection

Emotion detection in Russian text over seven classes, fine-tuned from cointegrated/rubert-tiny2 on Aniemore/cedr-m7 (29M parameters).

The head is multi-label: seven independent sigmoids, not a softmax over seven classes, so a sentence may carry more than one emotion or none at all. That is why the headline number below is ROC AUC, which needs no threshold.

Results on CEDR-M7 test

MetricValue
ROC AUC, macro0.8696
ROC AUC, micro0.9347
ROC AUC, weighted0.9194
Weighted accuracy (top-1)0.7662
Unweighted accuracy (macro recall)0.6050
macro-F1 @ 0.50.6015
micro-F1 @ 0.50.7663
Subset accuracy (exact set)0.7481

How to read these

ROC AUC is threshold-free: it asks whether the model ranks the sentences carrying an emotion above the ones that do not. macro-F1 is taken at a fixed threshold of 0.5; a different operating point moves it, so tune the threshold on your own data before reading it as a ceiling. Weighted accuracy is top-1: the highest-scoring label counted against the gold set, which is a fair reading here because 1865 of the 1882 test rows carry exactly one label.

disgust has 3 examples in the test split. Its per-class numbers are noise, and they drag both macro averages. The macro figures are reported as measured rather than quietly dropping the class, but weigh them with that in mind.

Evaluated on the official test split, 1882 rows, sources: twitter, LiveJournal and Lenta. Scores come from the model's own id2label order — it differs across this family, and reading the labels in the wrong order silently mislabels everything.

First - you should prepare few functions to talk to model

import torch
from transformers import BertForSequenceClassification, AutoTokenizer

LABELS = ['neutral', 'happiness', 'sadness', 'enthusiasm', 'fear', 'anger', 'disgust']
tokenizer = AutoTokenizer.from_pretrained('Aniemore/rubert-tiny2-russian-emotion-detection')
model = BertForSequenceClassification.from_pretrained('Aniemore/rubert-tiny2-russian-emotion-detection')

@torch.no_grad()
def predict_emotion(text: str) -> str:
    """
        We take the input text, tokenize it, pass it through the model, and then return the predicted label
        :param text: The text to be classified
        :type text: str
        :return: The predicted emotion
    """
    inputs = tokenizer(text, max_length=512, padding=True, truncation=True, return_tensors='pt')
    outputs = model(**inputs)
    predicted = torch.nn.functional.softmax(outputs.logits, dim=1)
    predicted = torch.argmax(predicted, dim=1).numpy()
        
    return LABELS[predicted[0]]

@torch.no_grad()    
def predict_emotions(text: str) -> list:
    """
        It takes a string of text, tokenizes it, feeds it to the model, and returns a dictionary of emotions and their
        probabilities
        :param text: The text you want to classify
        :type text: str
        :return: A dictionary of emotions and their probabilities.
    """
    inputs = tokenizer(text, max_length=512, padding=True, truncation=True, return_tensors='pt')
    outputs = model(**inputs)
    predicted = torch.nn.functional.softmax(outputs.logits, dim=1)
    emotions_list = {}
    for i in range(len(predicted.numpy()[0].tolist())):
        emotions_list[LABELS[i]] = predicted.numpy()[0].tolist()[i]
    return emotions_list

And then - just gently ask a model to predict your emotion

simple_prediction = predict_emotion("Какой же сегодня прекрасный день, братья")
not_simple_prediction = predict_emotions("Какой же сегодня прекрасный день, братья")

print(simple_prediction)
print(not_simple_prediction)
# happiness
# {'neutral': 0.0004941817605867982, 'happiness': 0.9979524612426758, 'sadness': 0.0002536600804887712, 'enthusiasm': 0.0005498139653354883, 'fear': 0.00025326196919195354, 'anger': 0.0003583927755244076, 'disgust': 0.00013807788491249084}

Or, just simply use our package (GitHub), that can do whatever you want (or maybe not)

🤗

Citations

@misc{Aniemore,
  author = {Артем Аментес, Илья Лубенец, Никита Давидчук},
  title = {Открытая библиотека искусственного интеллекта для анализа и выявления эмоциональных оттенков речи человека},
  year = {2022},
  publisher = {Hugging Face},
  journal = {Hugging Face Hub},
  howpublished = {\url{https://huggingface.com/aniemore/Aniemore}},
  email = {hello@socialcode.ru}
}

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

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

GPU в ailist

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

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

Подбираем GPU…

Класс архитектуры
BertForSequenceClassification
Ревизия весов
dfa4b65

0 моделей