roberta-large-emopillars-contextual-emocontext

This model is a fine-tuned version of roberta-large-emopillars-contextual on the EmoContext dataset. The base model was trained on EmoPillars' context-full subset.

Model description

The model is a multi-label classifier over 28 emotional classes for a context-aware scenario, fine-tuned on a dataset of 4 classes (angry, sad, happy, and others) that we initially relabelled (see Training data for details). The resulting model takes as input either a context concatenated with a character description and an utterance, and extracts emotions only from the utterance, or a three-turn dialogue and identifies emotions in the last utterance.

How to use

Here is how to use this model:

>>> import torch
>>> from transformers import pipeline
>>> model_name = "roberta-large-emopillars-contextual-emocontext"
>>> threshold = 0.10
>>> emotions = [
>>>     "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"
>>> ]
>>> label_to_emotion = dict(zip(list(range(len(emotions))), emotions))
>>> emotion_to_emocontext = dict(zip(emotions, ["others"]*len(emotions)))
>>> emotion_to_emocontext.update({
>>>     "anger": "angry",
>>>     "sadness": "sad",
>>>     "joy": "happy"
>>> })
>>> device = torch.device("cuda" if torch.cuda.is_available() else "CPU")
>>> pipe = pipeline("text-classification", model=model_name, truncation=True,
>>>                  return_all_scores=True, device=-1 if device.type=="cpu" else 0)
>>> # input in a format f"{context} {character}: \"{utterance}\""
>>> # alternative input format: f"{persona1}: {utterance1}, {persona2}:\"{utterance2}\"\n{persona1}: \"{utterance3}\""
>>> utterances_in_contexts = [
>>>     "A user watched a video of a musical performance on YouTube. This user expresses an opinion and thoughts. User: \"Ok is it just me or is anyone else getting goosebumps too???\"",
>>>     "User: \"But...\", Conversational Agent: \"then\"\nUser: \"I’m feeling nervous\""
>>> ]
>>> outcome = pipe(utterances_in_contexts)
>>> dominant_classes = [
>>>     [prediction for prediction in example if prediction['score'] >= threshold]
>>>     for example in outcome
>>> ]
>>> for example in dominant_classes:
>>>     print(", ".join([
>>>         "%s (%s): %.2lf" % (
>>>             label_to_emotion[int(prediction['label'])], 
>>>             emotion_to_emocontext[label_to_emotion[int(prediction['label'])]], 
>>>             prediction['score']
>>>         ) 
>>>         for prediction in sorted(example, key=lambda x: x['score'], reverse=True)
>>>     ]))
excitement (others): 0.73, joy (happy): 0.23
sadness (sad): 0.89, nervousness (others): 0.12

Training data

The training data consists of 30,157 samples of the EmoContext dataset. We relabelled the others examples in the training set by choosing the most probable label predicted by our base 28-class contextual model (see our paper for details).

Training procedure

Training hyperparameters

The following hyperparameters were used during training:

  • learning_rate: 2e-05
  • train_batch_size: 16
  • eval_batch_size: 8
  • seed: 752
  • optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
  • lr_scheduler_type: linear
  • num_epochs: 3.0

Framework versions

  • Transformers 4.45.0.dev0
  • Pytorch 2.4.0a0+gite3b9b71
  • Datasets 2.21.0
  • Tokenizers 0.19.1

Evaluation

Scores for the evaluation on the EmoContext dev split:

class precision recall f1-score support
angry 0.76 0.80 0.78 150
sad 0.81 0.80 0.81 125
happy 0.72 0.75 0.73 142
others 0.96 0.96 0.96 2335
micro avg 0.93 0.93 0.93 2752
macro avg 0.81 0.83 0.82 2752
weighted avg 0.93 0.93 0.93 2752
samples avg 0.93 0.93 0.93 2752

For more details on the evaluation, please visit our GitHub repository or paper.

Citation information

If you use this model, please cite our paper:

@misc{shvets2025emopillarsknowledgedistillation,
      title={Emo Pillars: Knowledge Distillation to Support Fine-Grained Context-Aware and Context-Less Emotion Classification}, 
      author={Alexander Shvets},
      year={2025},
      eprint={2504.16856},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2504.16856}
}

Disclaimer

Click to expand

The model published in this repository is intended for a generalist purpose and is available to third parties. This model may have bias and/or any other undesirable distortions.

When third parties deploy or provide systems and/or services to other parties using this model (or using systems based on this model) or become users of the model, they should note that it is their responsibility to mitigate the risks arising from its use and, in any event, to comply with applicable regulations, including regulations regarding the use of Artificial Intelligence.

In no event shall the creator of the model be liable for any results arising from the use made by third parties of this model.

Downloads last month
4
Safetensors
Model size
355M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 2 Ask for provider support

Collection including alex-shvets/roberta-large-emopillars-contextual-emocontext