Skip to content
Showcase/Social Bias Frames (SBIC)
advancedtext

Social Bias Frames (SBIC)

Annotate social media posts for bias using structured frames. Based on Sap et al., ACL 2020. Identify offensiveness, intent, implied stereotypes, and targeted groups.

About this dataset

Social Bias Frames is a framework introduced by Maarten Sap and coauthors at ACL 2020 for describing how a piece of language implies bias, not only whether it reads as toxic. In place of a single offensiveness label, a frame records who is targeted and what stereotype a statement implies about them.

The accompanying Social Bias Inference Corpus draws posts from social media and related sources. Annotators answer a structured set of questions about each post: whether it could be offensive, whether the offense seems intentional, whether it is lewd, whether it implies something about a group, and which group is targeted, together with the implied stereotype the statement carries.

The corpus holds roughly 150,000 structured annotations covering more than 34,000 implied statements about about a thousand demographic groups. In the paper's experiments, neural models reach around 80% F1 on the higher-level categorization but do much worse at generating the implied stereotype in words.

The Potato config below reproduces this task with four radio schemes and one multiselect: offensiveness, intent, lewdness, and group implication as radios, plus a target-group multiselect over fourteen demographic options. It fits content-moderation work that needs the reasoning behind a label rather than the label alone.

Structured annotations
~150,000
Implied statements covered
34,000+
Demographic groups
~1,000
Best model F1 (high-level categorization)
~80%
Venue
ACL 2020
Pages
5477-5490
Select all that apply:

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
# Social Bias Frames (SBIC)
# Based on Sap et al., ACL 2020
# Paper: https://aclanthology.org/2020.acl-main.409/
# Dataset: https://maartensap.com/social-bias-frames/
#
# Social Bias Frames capture multiple dimensions of biased language:
# 1. Offensiveness: Is the post offensive?
# 2. Intent: Was the speaker trying to be offensive?
# 3. Lewdness: Is it sexual or lewd?
# 4. Group implication: Does it imply something about a group?
# 5. Targeted group: Which group is targeted?
# 6. Implied statement: What stereotype is implied?
#
# Annotation Guidelines:
# 1. Consider the post in isolation (not broader context)
# 2. Offensiveness is about potential to offend, not your personal reaction
# 3. Intent considers whether offense seems deliberate
# 4. Group implications apply when stereotypes about demographics are implied
# 5. Targeted groups should be specific (e.g., "Black women" not just "women")
# 6. Implied statements should be written as generalizations
#
# Key Distinctions:
# - A post can be offensive without intent (ignorance)
# - A post can have intent without being offensive (failed joke)
# - Group implications require stereotyping, not just mentioning groups

annotation_task_name: "Social Bias Frames"
task_dir: "."

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

output_annotation_dir: "annotation_output/"
output_annotation_format: "json"

annotation_schemes:
  # Step 1: Offensiveness
  - annotation_type: radio
    name: offensive
    description: "Could this post be considered offensive to anyone?"
    labels:
      - "Yes, offensive"
      - "Maybe offensive"
      - "Not offensive"
    tooltips:
      "Yes, offensive": "The post would likely offend members of some group"
      "Maybe offensive": "The post could be seen as offensive by some people"
      "Not offensive": "The post is unlikely to offend anyone"

  # Step 2: Intent
  - annotation_type: radio
    name: intent
    description: "Was the intent of the post to be offensive or hurtful?"
    labels:
      - "Intentionally offensive"
      - "Possibly intentional"
      - "Not intentional"
      - "Can't tell"
    tooltips:
      "Intentionally offensive": "The speaker clearly meant to offend or demean"
      "Possibly intentional": "The offense might have been deliberate"
      "Not intentional": "The speaker likely didn't mean to offend (ignorance, poor wording)"
      "Can't tell": "Intent is unclear from the post"

  # Step 3: Lewdness
  - annotation_type: radio
    name: lewd
    description: "Is the post lewd or sexual in nature?"
    labels:
      - "Yes"
      - "Somewhat"
      - "No"
    tooltips:
      "Yes": "The post is explicitly sexual or lewd"
      "Somewhat": "The post has sexual undertones or innuendo"
      "No": "The post is not sexual"

  # Step 4: Group implication
  - annotation_type: radio
    name: group_implication
    description: "Does the post imply something negative about a group of people?"
    labels:
      - "Yes, implies stereotype"
      - "Mentions group but no stereotype"
      - "No group mentioned"
    tooltips:
      "Yes, implies stereotype": "The post implies a generalization or stereotype about a demographic group"
      "Mentions group but no stereotype": "A group is mentioned but no stereotype is implied"
      "No group mentioned": "No demographic group is referenced"

  # Step 5: Target group (if applicable)
  - annotation_type: multiselect
    name: target_group
    description: "Which group(s) are targeted? (Select all that apply)"
    labels:
      - "Women"
      - "Men"
      - "Black people"
      - "Asian people"
      - "Hispanic/Latino people"
      - "White people"
      - "LGBTQ+ people"
      - "Muslims"
      - "Jewish people"
      - "Immigrants"
      - "Disabled people"
      - "Elderly people"
      - "Poor/working class"
      - "Other group"
    min_selections: 0
    max_selections: 14

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

Sample Datasample-data.json

json
[
  {
    "id": "sbf_001",
    "text": "Women just aren't cut out for leadership positions. It's biology."
  },
  {
    "id": "sbf_002",
    "text": "I love how diverse our team is - we have people from so many different backgrounds!"
  }
]

// ... and 8 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/hate-speech-moderation/social-bias-frames
potato start config.yaml

Dataset & paper

Sap et al., ACL 2020

Citation (BibTeX)

bibtex
@inproceedings{sap-etal-2020-social,
    title = "Social Bias Frames: Reasoning about Social and Power Implications of Language",
    author = "Sap, Maarten and Gabriel, Saadia and Qin, Lianhui and Jurafsky, Dan and Smith, Noah A. and Choi, Yejin",
    booktitle = "Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics",
    month = jul,
    year = "2020",
    address = "Online",
    publisher = "Association for Computational Linguistics",
    url = "https://aclanthology.org/2020.acl-main.486",
    pages = "5477--5490"
}

Details

Annotation Types

multiselectradio

Domain

NLPSocial MediaBias Detection

Use Cases

Bias DetectionContent ModerationFairness

Tags

biasstereotypessocial-mediasbicacl2020fairness

Found an issue or want to improve this design?

Open an Issue