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
Configuration Fileconfig.yaml
This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.
# 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
[
{
"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 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/commonsense-ethics/moral-stories potato start config.yaml
Dataset & paper
Emelin et al., EMNLP 2021
Citation (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
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
Social Chemistry 101 (Social Norms)
Annotate rules-of-thumb for social and moral norms. Based on Forbes et al., EMNLP 2020. Capture 12 dimensions of social judgment including cultural pressure, moral foundations, and legality.
Commonsense QA Explanation (ECQA)
Annotate explanations for commonsense QA with positive and negative properties. Based on ECQA (Aggarwal et al., ACL 2021). Explain why an answer is correct and why others are wrong.
SafeRLHF Dual-Dimension Preference
Safety-aware preference annotation with separate judgments for helpfulness and harmlessness. Includes safety category labeling across 19 harm types for constrained AI alignment.