Showcase/Moral Stories Annotation
intermediatetext

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 items

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

Details

Annotation Types

radio

Domain

NLPEthicsCommonsense

Use Cases

Moral ReasoningEthics AIValue Alignment

Tags

moralethicsnormsemnlp2021commonsensevalues

Found an issue or want to improve this design?

Open an Issue