Ruddit: Offensiveness Best-Worst Scaling
Best-worst scaling annotation of the degree of offensiveness of English Reddit comments, based on Ruddit (Hada, Sudhir, Mishra, Yannakoudakis, Mohammad, and Shutova, ACL-IJCNLP 2021). Annotators view 4-tuples of comments and mark the comment that is most offensive (least supportive) and the comment that is least offensive (most supportive); aggregating these judgments yields fine-grained real-valued offensiveness scores. It complements the pairwise/BWS design in evaluation/chatbot-arena-pairwise-bws and the NRC BWS lexicon tasks in text/emotion-sentiment/, which approximate BWS with radio buttons — here the native bws scheme handles tuple generation and scoring directly.
About this dataset
Ruddit is a dataset of 6,000 English Reddit comments annotated with fine-grained, real-valued scores of offensiveness ranging from -1 (maximally supportive) to 1 (maximally offensive). Rather than the coarse binary or ordinal labels used in most abusive-language datasets, the authors used best-worst scaling (BWS), a comparative annotation method that produces more reliable fine-grained scores than direct rating scales.
In the BWS setup, each comment appeared in 8 different 4-tuples, and each 4-tuple was annotated by 6 crowd-workers who selected the most offensive (least supportive) and least offensive (most supportive) comment in the tuple. Scores were computed with the standard counting procedure: the proportion of times a comment was chosen most offensive minus the proportion of times it was chosen least offensive. The resulting scores showed high split-half reliability (Pearson r of about 0.88).
The paper deliberately frames offensiveness and supportiveness as two ends of one scale, and its annotator guidelines define offensive comments broadly (denigration, name calling, hostility, bullying, hurtful sarcasm, with or without profanity) and supportive comments as agreeable, kind, pleasant, and respectful. The instructions in this config reproduce those guidelines verbatim from Figure 5 in the paper's appendix.
This config uses Potato's native bws scheme: the server samples 4-tuples from the comment pool (8 appearances per comment, matching the paper), presents best/worst questions with keyboard shortcuts, and computes counting, Bradley-Terry, or Plackett-Luce scores from the collected judgments. The sample data are self-authored comments spanning the supportive-to-offensive range, not comments from the released dataset.
- Comments
- 6,000
- Tuple size
- 4
- Appearances per comment
- 8 different 4-tuples
- Annotators per tuple
- 6
- Unique annotators
- 725
- Score range
- -1 (supportive) to 1 (offensive)
- Split-half reliability
- Pearson r = 0.8818
Configuration Fileconfig.yaml
This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.
# Ruddit — Best-Worst Scaling of Reddit Comment Offensiveness
# Based on the Ruddit dataset:
# Rishav Hada, Sohi Sudhir, Pushkar Mishra, Helen Yannakoudakis, Saif M. Mohammad,
# and Ekaterina Shutova (2021), "Ruddit: Norms of Offensiveness for English Reddit
# Comments." Proceedings of the 59th Annual Meeting of the Association for
# Computational Linguistics and the 11th International Joint Conference on Natural
# Language Processing (Volume 1: Long Papers), pp. 2700-2717.
# DOI: 10.18653/v1/2021.acl-long.210
# Paper: https://aclanthology.org/2021.acl-long.210/
# Dataset: https://github.com/hadarishav/Ruddit
#
# Task: annotators see 4-tuples of Reddit comments and mark the comment that is
# MOST offensive (least supportive) and the comment that is LEAST offensive (most
# supportive). Best-worst counting converts these judgments into fine-grained,
# real-valued offensiveness scores in [-1, 1]. In the original study, each of the
# 6,000 comments appeared in 8 different 4-tuples and each tuple was annotated by
# 6 crowd-workers; this showcase config keeps the 4-tuple / 8-appearance design
# with the standard counting scorer.
#
# Annotation instructions reproduced verbatim from Figure 5 (Appendix A.2) of the
# paper; the tuple question wording follows the sample questionnaire in Figure 6.
annotation_task_name: "Ruddit: Offensiveness Best-Worst Scaling"
task_dir: "."
data_files:
- sample-data.json
item_properties:
id_key: "id"
text_key: "text"
output_annotation_dir: "annotation_output/"
output_annotation_format: "json"
port: 8000
server_name: localhost
bws_config:
tuple_size: 4
num_tuples: null
seed: 42
min_item_appearances: 8
scoring:
method: counting
annotation_schemes:
- annotation_type: bws
name: offensiveness_bws
description: "From the four comments below, choose the comment which is LEAST OFFENSIVE (most supportive) and the comment which is MOST OFFENSIVE (least supportive)."
best_description: "Which comment is the MOST offensive (LEAST supportive)?"
worst_description: "Which comment is the LEAST offensive (MOST supportive)?"
tuple_size: 4
sequential_key_binding: true
annotation_instructions: |
Social media conversations often include an original post followed by other
comments in response to the original post. These response comments can vary from
being highly supportive and pleasant to highly offensive and abusive. We are
interested in determining the degree of offensiveness/supportiveness of response
comments. Specifically, in each HIT, you will be given four comments. Your task
is to mark:
- the comment that is the **MOST offensive (LEAST supportive)**.
- the comment that is the **LEAST offensive (MOST supportive)**.
**Purpose of the task:**
Your responses will be used to better understand the type, nature and degree of
offensive and supportive language.
**Notes:**
- The comments included in this task may contain foul, abusive language
(including but not limited to sexist, violent, vulgar or racist terms).
- Try not to overthink the answer. Let your instinct guide you.
- There are a certain number of gold annotations interspersed throughout the
data. If you mark these gold questions incorrectly, we will give you immediate
feedback in a pop-up box. We will keep track of your answers for these gold
questions. If you mark too many of these incorrectly, it might lead to
rejection of your HITs, upon further scrutiny.
**Instructions:**
- For the MOST offensive (LEAST supportive) question: If all four comments are
not offensive, then select the comment that is most negative or least
supportive. If two (or more) comments are equally offensive, and both are MOST
offensive (among the four options), then choose any one of these equally
offensive comments as the MOST offensive comment.
- For the LEAST offensive (MOST supportive) question: If all four comments are
not supportive, then select the comment that is most positive or least
offensive. If two (or more) comments are equally supportive, and both are MOST
supportive (among the four options), then choose any one of these equally
supportive comments as the MOST supportive comment.
- Consider 'offensive comments' to be a broad category that includes abhorrent,
abusive, rude, objectionable, disagreeable, and discourteous comments.
Offensive comments often denigrate, criticize, hurt, or harm the perception of
self of another person or group (with or without using offensive words).
Offensive comments tend to include aggressive outbursts, name calling, anger,
hostility, bullying, or hurtful sarcasm, but they can be more subtle as well.
- Consider 'supportive comments' to be a broad category that includes agreeable,
delightful, kind, nice, pleasant, pleasing, respectful, and soothing comments.
- You cannot pick the same comment for both the categories.
- Responses that are not in accordance with the instructions will not be paid for.
html_layout: |
<div style="padding: 15px; max-width: 820px; margin: auto;">
<div style="background: #fef2f2; border: 1px solid #fecaca; border-radius: 8px; padding: 6px 12px; margin-bottom: 10px; font-size: 13px; color: #991b1b;">
<strong>Content warning:</strong> comments in this task may contain foul or abusive language.
</div>
<div style="background: #f8fafc; border: 1px solid #cbd5e1; border-radius: 8px; padding: 16px;">
<strong style="color: #334155;">Reddit comment:</strong>
<p style="font-size: 16px; line-height: 1.6; margin: 8px 0 0 0;">{{text}}</p>
</div>
</div>
allow_all_users: true
instances_per_annotator: 40
annotation_per_instance: 3
allow_skip: true
Sample Datasample-data.json
[
{
"id": "ruddit_001",
"text": "Congrats on finishing your first marathon! That training log you posted last month was seriously inspiring, and you earned every second of that finish time."
},
{
"id": "ruddit_002",
"text": "This is the dumbest take I've read all week. Did you even skim the article before spouting off, or do you just enjoy being wrong in public?"
}
]
// ... and 8 more itemsGet This Design
Clone or download from the repository
Quick start:
git clone https://github.com/davidjurgens/potato-showcase.git cd potato-showcase/text/computational-social-science/ruddit-offensiveness-bws potato start config.yaml
Dataset & paper
Rishav Hada, Sohi Sudhir, Pushkar Mishra, Helen Yannakoudakis, Saif M. Mohammad, and Ekaterina Shutova. 2021. Ruddit: Norms of Offensiveness for English Reddit Comments. In Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers), pages 2700-2717.
Citation (BibTeX)
@inproceedings{hada-etal-2021-ruddit,
title = "Ruddit: {N}orms of Offensiveness for {E}nglish {R}eddit Comments",
author = "Hada, Rishav and
Sudhir, Sohi and
Mishra, Pushkar and
Yannakoudakis, Helen and
Mohammad, Saif M. and
Shutova, Ekaterina",
booktitle = "Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing (Volume 1: Long Papers)",
month = aug,
year = "2021",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2021.acl-long.210/",
doi = "10.18653/v1/2021.acl-long.210",
pages = "2700--2717"
}Details
Annotation Types
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
AfriHate - Hate and Abusive Language for African Languages
Multilingual content-moderation annotation following the AfriHate scheme (Muhammad et al., NAACL 2025), a collection of hate speech and abusive language datasets for 15 African languages including Amharic, Hausa, Igbo, Yoruba, Swahili, Somali and isiZulu. Native speakers familiar with the regional culture assign each tweet a three-way label - hate, abusive, or neutral - and, when the tweet is hateful, mark the targeted attribute (e.g. ethnicity, religion, politics, gender). Sample items are mild, constructed illustrations that avoid real slurs or targeting of real groups; an English gloss is provided for reference only.
Chatbot Arena: Pairwise LLM Preference Evaluation
Chatbot Arena collects human pairwise preference votes between anonymous LLM responses to rank models with a Bradley-Terry leaderboard. This Potato config reproduces the pairwise and best-worst scaling judgment task.
HateXplain - Explainable Hate Speech Detection
Multi-task hate speech annotation with classification (hate/offensive/normal), target community identification, and rationale span highlighting. Based on the HateXplain benchmark (Mathew et al., AAAI 2021) - the first dataset covering classification, target identification, and rationale extraction.