Skip to content
intermediatepreference

Moral Stories Annotation

Annotate moral reasoning in situated narratives. Based on Emelin et al., EMNLP 2021. Evaluate whether actions adhere to or diverge from social norms given situations and intentions.

About this dataset

Moral Stories is a dataset for studying social and moral reasoning, created by Denis Emelin, Ronan Le Bras, Jena D. Hwang, Maxwell Forbes, and Yejin Choi and published at EMNLP 2021. It was built to test whether language generation models can reason about how everyday actions relate to social norms and about the consequences those actions produce.

Each entry is a short structured narrative of seven sentences. The narrative states a social norm, a situation, and an actor's intention, then splits into two branches: a moral action that respects the norm along with its consequence, and an immoral action that violates the norm along with its consequence. The norms that seed each story were selected from the Social-Chemistry-101 dataset and given to crowd workers as writing prompts.

The dataset contains 12,000 of these branching narratives. Because every story pairs a norm-following and a norm-violating path around the same situation and goal, it supports both classifying whether an action is moral and generating actions, consequences, or norms under a normative constraint.

The Potato config below adapts this material into a judgment task: a radio scheme asks whether the described action follows or violates the norm, a second radio scheme predicts the likely consequence, a third rates how applicable the norm is to the situation, and a five-point Likert scale records whether the annotator personally agrees with the norm. It is useful for collecting human moral judgments or for auditing model behavior on norm-grounded scenarios.

Structured narratives
12,000 stories
Sentences per story
7
Story components
Norm, situation, intention, moral action + consequence, immoral action + consequence
Norm source
Social-Chemistry-101 (Forbes et al., 2020)
Venue
EMNLP 2021 (main track)
Paper pages
698-718
Rate quality:12345PoorExcellentSubmit

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
# Moral Stories Annotation
# Based on Emelin et al., EMNLP 2021
# Paper: https://aclanthology.org/2021.emnlp-main.54/
# Dataset: https://huggingface.co/datasets/demelin/moral_stories
#
# Moral Stories contains structured narratives for moral reasoning.
# Each story has seven components:
# 1. Norm: A social guideline (e.g., "It's good to help others")
# 2. Situation: The context and setting
# 3. Intention: What the actor wants to achieve
# 4. Moral action: An action that follows the norm
# 5. Moral consequence: Positive outcome of moral action
# 6. Immoral action: An action that violates the norm
# 7. Immoral consequence: Negative outcome of immoral action
#
# Annotation Guidelines:
# 1. Consider the NORM as the ethical standard
# 2. Evaluate actions against this norm
# 3. A moral action achieves the intention while respecting the norm
# 4. An immoral action achieves the intention but violates the norm
# 5. Consider both intent and method when evaluating
#
# Key Questions:
# - Does the action respect the stated norm?
# - Would most people consider this action acceptable?
# - Does the actor consider others' well-being?

annotation_task_name: "Moral Stories Annotation"
task_dir: "."

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

output_annotation_dir: "annotation_output/"
output_annotation_format: "json"

annotation_schemes:
  # Step 1: Action classification
  - annotation_type: radio
    name: action_morality
    description: "Does the described ACTION adhere to or violate the NORM?"
    labels:
      - "Moral (follows norm)"
      - "Immoral (violates norm)"
      - "Neutral/unclear"
    tooltips:
      "Moral (follows norm)": "The action achieves the goal while respecting the ethical norm"
      "Immoral (violates norm)": "The action achieves the goal but violates the ethical norm"
      "Neutral/unclear": "The action's morality is ambiguous or doesn't clearly relate to the norm"

  # Step 2: Consequence prediction
  - annotation_type: radio
    name: likely_consequence
    description: "What is the likely consequence of this action?"
    labels:
      - "Positive for all"
      - "Positive for actor, negative for others"
      - "Negative for actor"
      - "Negative for all"
      - "Neutral/mixed"
    tooltips:
      "Positive for all": "The action benefits everyone involved"
      "Positive for actor, negative for others": "The actor gains but others suffer"
      "Negative for actor": "The action backfires on the actor"
      "Negative for all": "Everyone is worse off"
      "Neutral/mixed": "Consequences are mixed or unclear"

  # Step 3: Norm applicability
  - annotation_type: radio
    name: norm_applicability
    description: "How applicable is the stated norm to this situation?"
    labels:
      - "Highly applicable"
      - "Somewhat applicable"
      - "Not very applicable"
      - "Not applicable"
    tooltips:
      "Highly applicable": "The norm directly addresses this situation"
      "Somewhat applicable": "The norm is relevant but not perfectly matched"
      "Not very applicable": "The norm only loosely relates to the situation"
      "Not applicable": "The norm doesn't really apply here"

  # Step 4: Agreement with norm
  - annotation_type: likert
    name: norm_agreement
    description: "Do you personally agree that this norm is a good ethical guideline?"
    min_value: 1
    max_value: 5
    labels:
      1: "Strongly disagree"
      2: "Disagree"
      3: "Neutral"
      4: "Agree"
      5: "Strongly agree"

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

Sample Datasample-data.json

json
[
  {
    "id": "mor_001",
    "norm": "It's wrong to take credit for someone else's work.",
    "situation": "Alex's coworker spent weeks developing a brilliant marketing strategy.",
    "intention": "Alex wants to impress the boss and get a promotion.",
    "scenario": "NORM: It's wrong to take credit for someone else's work.\nSITUATION: Alex's coworker spent weeks developing a brilliant marketing strategy.\nINTENTION: Alex wants to impress the boss and get a promotion.\nACTION: Alex presents the strategy to the boss as their own idea without mentioning the coworker."
  },
  {
    "id": "mor_002",
    "norm": "It's good to help those in need.",
    "situation": "Jordan sees an elderly person struggling to carry groceries.",
    "intention": "Jordan wants to get home quickly after a long day.",
    "scenario": "NORM: It's good to help those in need.\nSITUATION: Jordan sees an elderly person struggling to carry groceries.\nINTENTION: Jordan wants to get home quickly after a long day.\nACTION: Jordan stops to help carry the groceries to the person's car, even though it will delay getting home."
  }
]

// ... and 4 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/commonsense-ethics/moral-stories
potato start config.yaml

Dataset & paper

Emelin et al., EMNLP 2021

Citation (BibTeX)

bibtex
@inproceedings{emelin-etal-2021-moral,
    title = "Moral Stories: Situated Reasoning about Norms, Intents, Actions, and their Consequences",
    author = "Emelin, Denis and Le Bras, Ronan and Hwang, Jena D. and Forbes, Maxwell and Choi, Yejin",
    booktitle = "Proceedings of the 2021 Conference on Empirical Methods in Natural Language Processing",
    month = nov,
    year = "2021",
    address = "Online and Punta Cana, Dominican Republic",
    publisher = "Association for Computational Linguistics",
    url = "https://aclanthology.org/2021.emnlp-main.54",
    pages = "698--718"
}

Details

Annotation Types

likertradio

Domain

NLPEthicsCommonsense

Use Cases

Moral ReasoningEthics AIValue Alignment

Tags

moralethicsnormsemnlp2021commonsensevalues

Found an issue or want to improve this design?

Open an Issue