Emotion Detection (SemEval-2018 Task 1)
Multi-label emotion classification with intensity ratings based on SemEval-2018 Task 1. Annotate text for emotions (anger, anticipation, disgust, fear, joy, love, optimism, pessimism, sadness, surprise, trust) with intensity scales.
Configuration Fileconfig.yaml
This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.
# Emotion Detection (SemEval-style)
# Based on SemEval shared tasks for emotion detection
#
# This configuration supports multi-label emotion classification
# with optional intensity ratings for detected emotions.
#
# Emotion Taxonomy (Ekman's basic emotions):
# - Joy: Happiness, pleasure, contentment, elation
# - Sadness: Grief, sorrow, melancholy, disappointment
# - Fear: Anxiety, worry, terror, apprehension
# - Anger: Frustration, irritation, rage, annoyance
# - Surprise: Astonishment, amazement (can be positive or negative)
# - Disgust: Revulsion, aversion, distaste
#
# Annotation Guidelines:
# 1. Read the entire text before making judgments
# 2. Select ALL emotions that are expressed or evoked
# 3. An emotion is "expressed" if the author conveys feeling it
# 4. An emotion is "evoked" if the text would cause readers to feel it
# 5. Multiple emotions can co-occur (e.g., sad and angry)
# 6. "Neutral" should only be selected if NO emotion is present
# 7. For intensity, consider strength of emotional language
annotation_task_name: "Emotion Detection"
task_dir: "."
data_files:
- sample-data.json
item_properties:
id_key: "id"
text_key: "text"
output_annotation_dir: "annotation_output/"
output_annotation_format: "json"
annotation_schemes:
# Step 1: Multi-label emotion classification
- annotation_type: multiselect
name: emotions
description: "Select ALL emotions expressed or evoked by this text (select multiple if applicable)"
labels:
- "Joy"
- "Sadness"
- "Fear"
- "Anger"
- "Surprise"
- "Disgust"
- "Neutral"
label_colors:
"Joy": "#22c55e"
"Sadness": "#3b82f6"
"Fear": "#8b5cf6"
"Anger": "#ef4444"
"Surprise": "#f59e0b"
"Disgust": "#84cc16"
"Neutral": "#9ca3af"
tooltips:
"Joy": "Happiness, pleasure, contentment, elation, amusement, or positive excitement"
"Sadness": "Grief, sorrow, melancholy, disappointment, or loneliness"
"Fear": "Anxiety, worry, terror, apprehension, or nervousness about potential threats"
"Anger": "Frustration, irritation, rage, annoyance, or hostility"
"Surprise": "Astonishment, amazement, or unexpectedness (can be positive or negative)"
"Disgust": "Revulsion, aversion, distaste, or strong disapproval"
"Neutral": "No discernible emotion - factual or emotionally flat content"
min_selections: 1
max_selections: 7
# Step 2: Intensity rating for primary emotion
- annotation_type: likert
name: intensity
description: "How intense is the strongest emotion in this text?"
min_value: 1
max_value: 5
labels:
1: "Very weak"
2: "Weak"
3: "Moderate"
4: "Strong"
5: "Very strong"
tooltips:
1: "Barely perceptible emotion, subtle hints"
2: "Mild emotional content, understated"
3: "Clear but not overwhelming emotion"
4: "Strong emotional language, clearly intense"
5: "Extremely intense, powerful emotional expression"
# Step 3: Confidence in annotation
- annotation_type: likert
name: confidence
description: "How confident are you in your emotion labels?"
min_value: 1
max_value: 5
labels:
1: "Very uncertain"
2: "Somewhat uncertain"
3: "Moderately confident"
4: "Confident"
5: "Very confident"
allow_all_users: true
instances_per_annotator: 100
annotation_per_instance: 3
allow_skip: true
skip_reason_required: false
Sample Datasample-data.json
[
{
"id": "emo_001",
"text": "I just got accepted into my dream university! I can't believe it - I've been waiting for this moment for years and now it's finally happening!"
},
{
"id": "emo_002",
"text": "My grandmother passed away last night. She was the kindest person I've ever known, and I don't know how to go on without her."
}
]
// ... and 8 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/semeval-emotion-detection potato start config.yaml
Dataset & paper
Mohammad et al., SemEval 2018
Citation (BibTeX)
@inproceedings{mohammad-etal-2018-semeval,
title = "{S}em{E}val-2018 Task 1: Affect in Tweets",
author = "Mohammad, Saif and Bravo-Marquez, Felipe and Salameh, Mohammad and Kiritchenko, Svetlana",
booktitle = "Proceedings of The 12th International Workshop on Semantic Evaluation",
month = jun,
year = "2018",
address = "New Orleans, Louisiana",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/S18-1001",
pages = "1--17"
}Details
Annotation Types
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
AnnoMI Counselling Dialogue Annotation
Annotation of motivational interviewing counselling dialogues based on the AnnoMI dataset. Annotators label therapist and client utterances for MI techniques (open questions, reflections, affirmations) and client change talk (sustain talk, change talk), with quality ratings for therapeutic interactions.
Clickbait Detection (Webis Clickbait Corpus)
Classify headlines and social media posts as clickbait or non-clickbait based on the Webis Clickbait Corpus. Identify manipulative content designed to attract clicks through sensationalism, curiosity gaps, or misleading framing.
Conversation Quality Attributes
A generic dialogue-quality annotation template. Annotators classify each conversation turn's engagement level, rate its overall quality on a 5-point scale, and select applicable attributes (interesting, repetitive, coherent, informative, empathetic, generic). It is a reusable rubric for chatbot and conversational-AI evaluation and does not reproduce a specific published dataset's label set.