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.
text annotation
Configuration Fileconfig.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?
port: 8000
server_name: localhost
task_name: "Moral Stories Annotation"
data_files:
- sample-data.json
id_key: id
text_key: scenario
output_file: annotations.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 itemsGet This Design
Clone or download from the repository
Quick start:
git clone https://github.com/davidjurgens/potato-showcase.git cd potato-showcase/moral-stories potato start config.yaml
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 Inference (ATOMIC 2020)
Annotate commonsense inferences about events, mental states, and social interactions. Based on ATOMIC 2020 (Hwang et al., AAAI 2021). Generate if-then knowledge about causes, effects, intents, and reactions.
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.