Skip to content
advancedtext

Emotion Cause Extraction (RECCON)

Extract emotion causes from conversational text based on RECCON (Poria et al., Cognitive Computation 2021). Identify which utterances and specific spans caused an emotion expressed in dialogue.

PERORGLOCPERORGLOCDATESelect text to annotate

Configuration Fileconfig.yaml

This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.

yaml
# Emotion Cause Extraction (RECCON)
# Based on Poria et al., EMNLP 2020
# Paper: https://aclanthology.org/2020.emnlp-main.431/
# Dataset: https://github.com/declare-lab/RECCON
#
# RECCON focuses on recognizing emotion causes in conversations.
# For each utterance expressing an emotion, annotators identify:
# 1. The emotion being expressed
# 2. Which prior utterance(s) contain the cause
# 3. The specific span within those utterances that is causal
#
# Cause Types:
# - Self-contagion: Cause is in the same speaker's prior utterance
# - Inter-personal: Cause is in another speaker's utterance
# - No explicit cause: Emotion has no identifiable textual cause
#
# Annotation Guidelines:
# 1. First identify the target emotion in the highlighted utterance
# 2. Look backwards in the conversation for potential causes
# 3. Mark specific spans that directly trigger the emotion
# 4. A cause must be NECESSARY for the emotion (counterfactual test)
# 5. Multiple causes can exist for a single emotion

annotation_task_name: "Emotion Cause Extraction"
task_dir: "."

data_files:
  - sample-data.json
item_properties:
  id_key: "id"
  text_key: "dialogue"

output_annotation_dir: "annotation_output/"
output_annotation_format: "json"

annotation_schemes:
  # Step 1: Identify the emotion in the target utterance
  - annotation_type: radio
    name: emotion
    description: "What emotion is expressed in the highlighted (last) utterance?"
    labels:
      - "Happiness"
      - "Sadness"
      - "Anger"
      - "Fear"
      - "Surprise"
      - "Disgust"
      - "Neutral"
    tooltips:
      "Happiness": "Joy, excitement, contentment, satisfaction, amusement"
      "Sadness": "Sorrow, disappointment, grief, melancholy"
      "Anger": "Frustration, irritation, annoyance, rage"
      "Fear": "Anxiety, worry, nervousness, terror"
      "Surprise": "Astonishment, amazement, shock (positive or negative)"
      "Disgust": "Revulsion, disapproval, contempt"
      "Neutral": "No clear emotion expressed"

  # Step 2: Identify cause location
  - annotation_type: radio
    name: cause_type
    description: "Where is the cause of this emotion located?"
    labels:
      - "In speaker's own prior utterance"
      - "In other speaker's utterance"
      - "In multiple utterances"
      - "No explicit cause in text"
    tooltips:
      "In speaker's own prior utterance": "Self-contagion: the speaker's earlier words triggered their current emotion"
      "In other speaker's utterance": "Inter-personal: another speaker's words triggered this emotion"
      "In multiple utterances": "The cause spans multiple prior utterances"
      "No explicit cause in text": "The emotion has no identifiable textual cause in the conversation"

  # Step 3: Mark causal spans
  - annotation_type: span
    name: causal_spans
    description: "Highlight the specific text spans that CAUSED the emotion"
    labels:
      - "Cause"
    label_colors:
      "Cause": "#ef4444"
    tooltips:
      "Cause": "The specific words/phrases that directly triggered the emotion (necessary condition)"
    allow_overlapping: false

allow_all_users: true
instances_per_annotator: 50
annotation_per_instance: 2
allow_skip: true
skip_reason_required: false

Sample Datasample-data.json

json
[
  {
    "id": "ece_001",
    "dialogue": "Speaker A: I heard you got the promotion! Congratulations!\nSpeaker B: Thank you so much! I've been working towards this for three years.\n[TARGET] Speaker B: I'm absolutely thrilled - this is a dream come true!"
  },
  {
    "id": "ece_002",
    "dialogue": "Speaker A: Did you hear? They cancelled the concert we had tickets for.\nSpeaker B: What? We've been planning this for months!\n[TARGET] Speaker B: I can't believe it. I'm so disappointed."
  }
]

// ... and 6 more items

Try 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 browser

Get This Design

View on GitHub

Clone or download from the repository

Quick start:

git clone https://github.com/davidjurgens/potato-showcase.git
cd potato-showcase/text/emotion-sentiment/emotion-cause-extraction
potato start config.yaml

Dataset & paper

Poria et al., Cognitive Computation 2021

Citation (BibTeX)

bibtex
@article{poria2021recognizing,
    title = {Recognizing Emotion Cause in Conversations},
    author = {Poria, Soujanya and Majumder, Navonil and Hazarika, Devamanyu and Ghosal, Deepanway and Bhardwaj, Rishabh and Jian, Samson Yu Bai and Hong, Pengfei and Ghosh, Romila and Roy, Abhinaba and Chhaya, Niyati and Gelbukh, Alexander and Mihalcea, Rada},
    journal = {Cognitive Computation},
    volume = {13},
    number = {5},
    pages = {1317--1332},
    year = {2021},
    publisher = {Springer},
    doi = {10.1007/s12559-021-09925-7},
    url = {https://doi.org/10.1007/s12559-021-09925-7}
}

Details

Annotation Types

radiospan

Domain

NLPDialogueAffective Computing

Use Cases

Emotion Cause ExtractionConversational AISentiment Analysis

Tags

emotioncause-extractiondialoguerecconconversation

Found an issue or want to improve this design?

Open an Issue