Sentiment Composition of Phrases (SCL) via Best-Worst Scaling
Rate the sentiment of short phrases using Best-Worst Scaling to study how sentiment composes. Each 4-tuple mixes single words with phrases built from negators, modals, and degree adverbs (e.g. 'good', 'not good', 'very good', 'hardly good'); annotators pick the most positive and most negative phrase, yielding real-valued scores that reveal how modifiers shift sentiment. This is the design behind the NRC Sentiment Composition Lexicons - SCL-OPP (opposing-polarity phrases) and SCL-NMA (negators, modals, adverbs) - by Kiritchenko & Mohammad, with an Arabic Twitter variant from SemEval-2016 Task 7.
Configuration Fileconfig.yaml
This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.
# Sentiment Composition of Phrases (SCL) via Best-Worst Scaling
# Based on the NRC Sentiment Composition Lexicons:
# - Kiritchenko & Mohammad (NAACL 2016), "Sentiment Composition of Words
# with Opposing Polarities" (SCL-OPP)
# - Kiritchenko & Mohammad (WASSA 2016), "The Effect of Negators, Modals,
# and Degree Adverbs on Sentiment Composition" (SCL-NMA)
# - Arabic Twitter terms from SemEval-2016 Task 7 (Kiritchenko, Mohammad,
# Salameh).
#
# Goal: measure how sentiment COMPOSES - how a negator ("not"), a modal
# ("might"), or a degree adverb ("very", "hardly") changes the sentiment of
# a word or phrase. Studying single words and their modified forms in the
# same annotation shows, for example, that "not good" is less positive than
# "good" but usually not as negative as "bad".
#
# Best-Worst Scaling (BWS / MaxDiff) annotation design:
# - Each item is a tuple of FOUR phrases (words and/or modified phrases).
# - The annotator picks the MOST POSITIVE phrase and the MOST NEGATIVE
# phrase in the tuple.
# - Every phrase appears in several 4-tuples; a real-valued sentiment
# score in [-1, +1] is later computed as (proportion chosen most
# positive) - (proportion chosen most negative).
#
# Multilingual note: sample data includes English tuples and an Arabic
# Twitter tuple. Judge sentiment within the language of the tuple.
#
# Annotation guidelines:
# 1. Judge the phrase as a whole, accounting for negators/modifiers.
# 2. "Most positive" and "most negative" must be two DIFFERENT phrases.
# 3. If all four seem neutral, still pick the relatively most positive and
# most negative.
# 4. Use Skip only if you cannot read the language of the tuple.
annotation_task_name: "Sentiment Composition (BWS)"
task_dir: "."
data_files:
- sample-data.json
item_properties:
id_key: "id"
text_key: "prompt"
text_display_key: "prompt"
list_display_key: "options"
output_annotation_dir: "annotation_output/"
output_annotation_format: "json"
annotation_schemes:
- annotation_type: radio
name: most_positive
description: "Which phrase is the MOST POSITIVE?"
labels:
- "Phrase 1"
- "Phrase 2"
- "Phrase 3"
- "Phrase 4"
- annotation_type: radio
name: most_negative
description: "Which phrase is the MOST NEGATIVE?"
labels:
- "Phrase 1"
- "Phrase 2"
- "Phrase 3"
- "Phrase 4"
allow_all_users: true
instances_per_annotator: 100
annotation_per_instance: 4
allow_skip: true
skip_reason_required: false
Sample Datasample-data.json
[
{
"id": "scl_001",
"prompt": "Which phrase is most positive vs. most negative?\n\nPhrase 1: good\nPhrase 2: not good\nPhrase 3: very good\nPhrase 4: bad",
"options": [
"good",
"not good",
"very good",
"bad"
]
},
{
"id": "scl_002",
"prompt": "Which phrase is most positive vs. most negative?\n\nPhrase 1: happy\nPhrase 2: hardly happy\nPhrase 3: extremely happy\nPhrase 4: not happy at all",
"options": [
"happy",
"hardly happy",
"extremely happy",
"not happy at all"
]
}
]
// ... and 6 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/emotion-sentiment/scl-sentiment-composition-bws potato start config.yaml
Dataset & paper
Kiritchenko & Mohammad, NAACL 2016
Citation (BibTeX)
@inproceedings{kiritchenko-mohammad-2016-sentiment,
title = "Sentiment Composition of Words with Opposing Polarities",
author = "Kiritchenko, Svetlana and Mohammad, Saif",
booktitle = "Proceedings of the 2016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies",
month = jun,
year = "2016",
address = "San Diego, California",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/N16-1128",
pages = "1102--1108"
}Details
Annotation Types
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
Aspect-Based Sentiment Analysis
Identification of aspect terms in review text with sentiment polarity classification for each aspect. Based on SemEval-2016 Task 5 (ABSA).
Determining Sentiment Intensity of English and Arabic Phrases
Determine the sentiment intensity of English and Arabic phrases using Best-Worst Scaling: annotators see four phrases at a time and select the most positive and most negative, which are aggregated into real-valued intensity scores in [0,1]. Based on SemEval-2016 Task 7.
Multilingual and Crosslingual Fact-Checked Claim Retrieval
Fact-checked claim retrieval task requiring annotators to judge whether a previously fact-checked claim matches a claim from a social media post, supporting multilingual and crosslingual evaluation. Based on SemEval-2025 Task 7.