NusaX - Sentiment Analysis for Indonesian Local Languages
Three-way sentiment annotation for low-resource Indonesian languages, following the NusaX scheme (Winata et al., EACL 2023, Outstanding Paper): the first high-quality human-annotated parallel sentiment corpus for 10 Indonesian local languages - Acehnese, Balinese, Banjarese, Buginese, Javanese, Madurese, Minangkabau, Ngaju, Sundanese and Toba Batak - plus Indonesian and English. Built by the IndoNLP community, it mirrors AfriSenti and IndicNLP-SA for a different, underrepresented language region. Annotators label each text as positive, negative, or neutral; sample items include an English gloss for reference only.
Configuration Fileconfig.yaml
This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.
# NusaX - Sentiment Analysis for Indonesian Local Languages
# Based on Winata et al., EACL 2023 (Outstanding Paper)
# Paper: https://aclanthology.org/2023.eacl-main.57/
# Dataset: https://github.com/IndoNLP/nusax
#
# NusaX is the first high-quality, human-annotated parallel sentiment corpus
# for 10 low-resource Indonesian local languages (Acehnese, Balinese,
# Banjarese, Buginese, Javanese, Madurese, Minangkabau, Ngaju, Sundanese,
# Toba Batak), alongside Indonesian and English. It was created by the
# IndoNLP community and demonstrates the same participatory, native-speaker
# annotation model as Masakhane (Africa) and AfriSenti.
#
# Sentiment Labels:
# - Positive: expresses approval, satisfaction, happiness, or praise
# - Negative: expresses disapproval, dissatisfaction, sadness, or criticism
# - Neutral: factual or balanced, with no clear positive or negative stance
#
# Annotation Guidelines:
# 1. Read the text in the source language (an English gloss is provided for
# reference in this showcase only).
# 2. Judge the overall sentiment expressed by the author.
# 3. Focus on attitude and tone, not merely the topic.
annotation_task_name: "NusaX - Indonesian Local Language Sentiment"
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
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the overall sentiment of this text?"
labels:
- "Positive"
- "Negative"
- "Neutral"
keyboard_shortcuts:
"Positive": "1"
"Negative": "2"
"Neutral": "3"
tooltips:
"Positive": "Expresses approval, satisfaction, happiness, or praise"
"Negative": "Expresses disapproval, dissatisfaction, sadness, or criticism"
"Neutral": "Factual or balanced, with no clear positive or negative stance"
annotation_instructions: |
You will see a short text written in an Indonesian local language, with its
language identifier and (for this showcase only) an English gloss. Classify
the overall sentiment as Positive, Negative, or Neutral, based on the
author's attitude and tone rather than the topic alone.
html_layout: |
<div style="padding: 15px; max-width: 800px; margin: auto;">
<div style="background: #ecfdf5; border: 1px solid #a7f3d0; border-radius: 8px; padding: 12px; margin-bottom: 12px;">
<strong style="color: #065f46;">Language:</strong>
<span style="font-size: 15px; margin-left: 8px;">{{language}}</span>
</div>
<div style="background: #f0f9ff; border: 1px solid #bae6fd; border-radius: 8px; padding: 16px; margin-bottom: 8px;">
<strong style="color: #0369a1;">Text:</strong>
<p style="font-size: 17px; line-height: 1.7; margin: 8px 0 0 0;">{{text}}</p>
</div>
<div style="color: #6b7280; font-size: 13px; font-style: italic; margin-bottom: 16px;">
English gloss (reference only): {{gloss}}
</div>
</div>
allow_all_users: true
instances_per_annotator: 50
annotation_per_instance: 3
allow_skip: true
skip_reason_required: false
Sample Datasample-data.json
[
{
"id": "nsx_001",
"language": "Indonesian (ind)",
"text": "Makanan di restoran ini sangat enak dan pelayanannya ramah sekali.",
"gloss": "The food at this restaurant is very tasty and the service is very friendly."
},
{
"id": "nsx_002",
"language": "Indonesian (ind)",
"text": "Saya kecewa karena paket saya datang terlambat lagi minggu ini.",
"gloss": "I am disappointed because my package arrived late again this week."
}
]
// ... 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/cross-lingual/nusax-indonesian-sentiment potato start config.yaml
Dataset & paper
Winata et al., EACL 2023
Citation (BibTeX)
@inproceedings{winata-etal-2023-nusax,
title = "{N}usa{X}: Multilingual Parallel Sentiment Dataset for 10 {I}ndonesian Local Languages",
author = "Winata, Genta Indra and Aji, Alham Fikri and Cahyawijaya, Samuel and Mahendra, Rahmad and Koto, Fajri and others",
booktitle = "Proceedings of the 17th Conference of the European Chapter of the Association for Computational Linguistics",
month = may,
year = "2023",
address = "Dubrovnik, Croatia",
publisher = "Association for Computational Linguistics",
pages = "815--834",
url = "https://aclanthology.org/2023.eacl-main.57"
}Details
Annotation Types
Domain
Use Cases
Tags
Found an issue or want to improve this design?
Open an IssueRelated Designs
MasakhaNER 2.0 - Named Entity Recognition for African Languages
Span-level named entity recognition for African-language text, following the MasakhaNER 2.0 annotation scheme (Adelani et al., EMNLP 2022): the largest human-annotated NER dataset for African languages, covering 20 languages such as Swahili, Hausa, Yoruba, Igbo, Nigerian-Pidgin and isiZulu. Native-speaker annotators, trained on the MUC-6 guidelines, highlight four entity types - Person (PER), Organization (ORG), Location (LOC) and Date & Time (DATE) - then confirm the overall entity composition of the sentence. Illustrative sample items include an English gloss for reference only; real annotation is done by native speakers without glosses.
MasakhaNEWS - News Topic Classification for African Languages
Single-label news topic classification for African-language news articles, following the MasakhaNEWS scheme (Adelani et al., IJCNLP-AACL 2023), the largest news topic benchmark for African languages, covering 16 languages such as Amharic, Hausa, Yoruba, Swahili, Somali, Lingala and isiXhosa. Masakhane community annotators label each headline/article into one of eight topics: business, entertainment, health, politics, religion, sports, technology, or uncategorized. Illustrative sample items include an English gloss for reference only.
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.