🌀️ IndoBERT Sentiment Analysis

Model Klasifikasi Sentimen Bahasa Indonesia

Task Language Model Status

Tiga kelas utama: negatif β€’ netral β€’ positif
Akurasi tinggi berdasarkan dataset ulasan Bahasa Indonesia.


1. Overview

Model ini dikembangkan untuk melakukan klasifikasi sentimen teks Bahasa Indonesia, khususnya untuk ulasan e-commerce.
Untuk meningkatkan performa pada kelas minoritas, model menggunakan Focal Loss, serta Optuna Hyperparameter Tuning untuk mendapatkan konfigurasi pelatihan terbaik.

Model dapat digunakan untuk:

  • Analisis sentimen ulasan produk
  • Pemantauan brand sentiment
  • Sistem rekomendasi e-commerce
  • Riset NLP Bahasa Indonesia

Load model and tokenizer

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

model_id = "alifviansyah/indobert-sentiment-focalloss"

# Load tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_id)

# Load model
model = AutoModelForSequenceClassification.from_pretrained(model_id)

# Example prediction
label_map = {0: "negatif", 1: "netral", 2: "positif"}

def predict(text):
    inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
    with torch.no_grad():
        logits = model(**inputs).logits
        pred = torch.argmax(logits, dim=1).item()
    return label_map[pred]

print(predict("Pengiriman cepat banget dan barangnya bagus!"))

2. Task Definition

Jenis task: Text Classification – Sentiment Analysis
Label yang digunakan:

Label ID Sentimen
0 negatif
1 netral
2 positif

3. Dataset

Dataset terdiri dari kumpulan ulasan e-commerce Indonesia.
Struktur data:

  • text : isi ulasan
  • sentimen : label kategori sentimen

Karakteristik dataset:

  • Teks mengandung emoji dan ekspresi informal
  • Emoji dipertahankan selama preprocessing
  • Pembagian data:
    • Train: 80%
    • Validation: 10%
    • Test: 10%

Distribusi kelas tidak seimbang sehingga digunakan Focal Loss.

🎯 Focal Loss untuk Menangani Ketidakseimbangan Kelas

Pada kasus klasifikasi dengan distribusi kelas yang tidak seimbang, model sering kali terlalu fokus pada kelas mayoritas sehingga performa pada kelas minoritas menurun. Focal Loss dirancang untuk mengatasi masalah ini dengan memberikan bobot lebih besar pada sampel yang sulit diprediksi dan bobot lebih kecil pada sampel yang mudah diprediksi.


πŸ” Konsep Dasar

Focal Loss memodifikasi fungsi Cross Entropy Loss dengan menambahkan faktor pengali yang secara dinamis menurunkan kontribusi sampel mudah (easy examples).

Dengan demikian, model terdorong untuk lebih fokus belajar dari hard examples yang probabilitas prediksinya rendah.

Pendekatan ini sangat efektif untuk:

  • masalah class imbalance
  • data dengan noise tinggi
  • kasus di mana kelas tertentu jauh lebih jarang

πŸ”’ Rumus Focal Loss

Formulasi matematis Focal Loss menurut Lin et al. (2017):

FL(pt)=βˆ’Ξ±β€‰(1βˆ’pt)γ log⁑(pt) FL(p_t) = -\alpha \, (1 - p_t)^\gamma \, \log(p_t)

Dengan definisi:

Jika label benar = 1:

pt=p p_t = p

Jika label benar = 0:

pt=1βˆ’p p_t = 1 - p


πŸ“Œ Keterangan Variabel

p adalah probabilitas prediksi model untuk kelas positif.

pt p_t adalah probabilitas terhadap kelas yang benar.

Ξ± adalah balancing factor untuk menangani ketimpangan antar kelas.

Ξ³ adalah focusing factor yang mengatur tingkat penekanan pada sampel yang mudah diprediksi.

4. Model Architecture

Komponen Detail
Backbone IndoBERT-base
Classification Head Linear layer size 768 β†’ 3
Loss Function Focal Loss (gamma=2, alpha adaptif)
Optimizer AdamW
Scheduler Linear learning rate scheduler
Tuning Optuna search untuk LR, WD, batch size

5. Training Configuration

Parameter Nilai
Epochs 4
Batch size 16
Learning rate 3.21e-05
Weight decay 0.01
Max length 256
Evaluation per epoch
Save best model yes
Loss Focal Loss

6. Summary Metrics (Tabel)

Metric Score
Accuracy 0.9361
Balanced Accuracy 0.8172
Precision Macro 0.8824
Recall Macro 0.8172
F1 Score Macro 0.8445
Precision Weighted 0.9347
Recall Weighted 0.9361
F1 Score Weighted 0.9347
Loss 0.0998

7. Detailed Classification Report

Kelas Precision Recall F1-Score
Negatif 0.9351 0.9655 0.9500
Netral 0.7647 0.5603 0.6468
Positif 0.9476 0.9258 0.9366

8. Citation

Jika Anda menggunakan model ini dalam penelitian atau publikasi, silakan sitasi dalam format berikut:

@model{indobert_sentiment_focalloss_2025,
  title   = {IndoBERT Sentiment with Focal Loss},
  author  = {Alifviansyah},
  year    = {2025},
  url     = {https://huggingface.co/alifviansyah/indobert-sentiment-focalloss}
}
Downloads last month
9
Safetensors
Model size
0.1B params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support