Tweet Emotion Intensity via Best-Worst Scaling (multilingual)
Rate the intensity (degree) of emotion in tweets using Best-Worst Scaling. Each item is a 4-tuple of tweets that all convey the same emotion (anger, fear, joy, or sadness); annotators pick the tweet showing the MOST and the LEAST of that emotion, and real-valued intensity scores are derived from best-minus-worst counts. This is the annotation design behind the WASSA-2017 Emotion Intensity (EmoInt) dataset (Mohammad & Bravo-Marquez, 2017), later extended to Arabic and Spanish in SemEval-2018 Task 1. Sample data includes English, Arabic, and Spanish tuples.
Configuration Fileconfig.yaml
This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.
# Tweet Emotion Intensity via Best-Worst Scaling (multilingual)
# Based on Mohammad & Bravo-Marquez, "WASSA-2017 Shared Task on Emotion
# Intensity" (EmoInt), extended to Arabic and Spanish in SemEval-2018 Task 1
# ("Affect in Tweets", Mohammad, Bravo-Marquez, Salameh & Kiritchenko).
#
# Best-Worst Scaling (BWS / MaxDiff) annotation design:
# - Each item is a tuple of FOUR tweets that all express the SAME emotion.
# - The target emotion (anger, fear, joy, or sadness) is stated per item.
# - The annotator selects the tweet with the HIGHEST degree of that emotion
# and the tweet with the LOWEST degree of it.
# - Every tweet appears in several different 4-tuples. A real-valued
# intensity score in [0, 1] is later computed per tweet as
# (proportion chosen most) - (proportion chosen least). BWS produces
# more reliable intensity scores than direct 0-100 rating scales.
#
# Multilingual note: the same design was applied to English, Arabic, and
# Spanish tweets. Judge intensity in the language of the tuple; do not
# compare across languages within a single item (each tuple is one language).
#
# Annotation guidelines:
# 1. Read all four tweets before deciding.
# 2. Judge the intensity of the STATED emotion only, not overall sentiment.
# 3. "Most" = the author most strongly feels/expresses the emotion;
# "Least" = the emotion is present but weakest of the four.
# 4. Consider emotion words, intensifiers, emphasis, emoji, and hashtags.
# 5. Use Skip if you cannot read the language of the tuple.
annotation_task_name: "Tweet Emotion Intensity (BWS)"
task_dir: "."
data_files:
- sample-data.json
item_properties:
id_key: "id"
text_key: "prompt"
text_display_key: "prompt"
list_display_key: "options"
output_annotation_dir: "annotation_output/"
output_annotation_format: "json"
annotation_schemes:
- annotation_type: radio
name: most_intense
description: "Which tweet expresses the MOST of the stated emotion?"
labels:
- "Tweet 1"
- "Tweet 2"
- "Tweet 3"
- "Tweet 4"
- annotation_type: radio
name: least_intense
description: "Which tweet expresses the LEAST of the stated emotion?"
labels:
- "Tweet 1"
- "Tweet 2"
- "Tweet 3"
- "Tweet 4"
- annotation_type: radio
name: confidence
description: "How confident are you in these two choices?"
labels:
- name: "High"
tooltip: "Clear difference in intensity between the tweets"
- name: "Medium"
tooltip: "Some judgment required"
- name: "Low"
tooltip: "Tweets are very close in intensity"
allow_all_users: true
instances_per_annotator: 100
annotation_per_instance: 4
allow_skip: true
skip_reason_required: false
Sample Datasample-data.json
[
{
"id": "ei_en_anger_001",
"emotion": "anger",
"language": "English",
"prompt": "TARGET EMOTION: ANGER (English). Which tweet expresses the most vs. least anger?\n\nTweet 1: This is mildly annoying, wish the bus were on time.\nTweet 2: Absolutely LIVID. They cancelled my flight AGAIN with zero notice. #furious\nTweet 3: Not thrilled about the parking ticket but whatever.\nTweet 4: I am so done with this company, worst service of my life, never again!!!",
"options": [
"This is mildly annoying, wish the bus were on time.",
"Absolutely LIVID. They cancelled my flight AGAIN with zero notice. #furious",
"Not thrilled about the parking ticket but whatever.",
"I am so done with this company, worst service of my life, never again!!!"
]
},
{
"id": "ei_en_joy_002",
"emotion": "joy",
"language": "English",
"prompt": "TARGET EMOTION: JOY (English). Which tweet expresses the most vs. least joy?\n\nTweet 1: Nice day out, the weather is pleasant.\nTweet 2: BEST DAY OF MY LIFE!!! We got engaged!!! I can't stop crying happy tears 😭❤️\nTweet 3: Coffee was decent this morning, small win.\nTweet 4: So happy my sister is visiting this weekend, been looking forward to it!",
"options": [
"Nice day out, the weather is pleasant.",
"BEST DAY OF MY LIFE!!! We got engaged!!! I can't stop crying happy tears 😭❤️",
"Coffee was decent this morning, small win.",
"So happy my sister is visiting this weekend, been looking forward to it!"
]
}
]
// ... and 6 more itemsTry it live — no install
Boot the real Potato server in your browser (WebAssembly) and annotate with this exact config. Nothing leaves your machine.
▶ Run live in your browserGet This Design
Clone or download from the repository
Quick start:
git clone https://github.com/davidjurgens/potato-showcase.git cd potato-showcase/text/emotion-sentiment/tweet-emotion-intensity-bws potato start config.yaml
Dataset & paper
Mohammad & Bravo-Marquez, WASSA 2017
Citation (BibTeX)
@inproceedings{mohammad-bravo-marquez-2017-wassa,
title = "{WASSA}-2017 Shared Task on Emotion Intensity",
author = "Mohammad, Saif and Bravo-Marquez, Felipe",
booktitle = "Proceedings of the 8th Workshop on Computational Approaches to Subjectivity, Sentiment and Social Media Analysis",
month = sep,
year = "2017",
address = "Copenhagen, Denmark",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/W17-5205",
pages = "34--49"
}Details
Annotation Types
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
AfriHate - Hate and Abusive Language for African Languages
Multilingual content-moderation annotation following the AfriHate scheme (Muhammad et al., NAACL 2025), a collection of hate speech and abusive language datasets for 15 African languages including Amharic, Hausa, Igbo, Yoruba, Swahili, Somali and isiZulu. Native speakers familiar with the regional culture assign each tweet a three-way label - hate, abusive, or neutral - and, when the tweet is hateful, mark the targeted attribute (e.g. ethnicity, religion, politics, gender). Sample items are mild, constructed illustrations that avoid real slurs or targeting of real groups; an English gloss is provided for reference only.
AfriSenti - African Language Sentiment
Sentiment analysis for tweets in African languages, classifying text as positive, negative, or neutral. Covers 14 African languages including Amharic, Hausa, Igbo, Yoruba, and Swahili. Based on SemEval-2023 Task 12 (Muhammad et al.).
Detecting Stance in Tweets
Classification of stance expressed in tweets toward specific targets as favor, against, or neither. Based on SemEval-2016 Task 6 (Stance Detection).