KawanTumbuh Sentimen: Klasifikasi Sentimen Ulasan Aplikasi (IndoBERT)

Model klasifikasi sentimen biner (Negatif / Positif) untuk ulasan aplikasi berbahasa Indonesia. Model ini adalah hasil fine-tuning indolem/indobert-base-uncased pada ulasan Google Play Store aplikasi MobileJKN dan PrimaKu.

Demo: dimeneid/sentimen-analisis-kawantumbuh

Label diturunkan dari rating bintang: bintang 1 = Negatif, bintang 5 = Positif. Ulasan bintang 2 sampai 4 tidak dipakai.

Cara Pakai

from transformers import pipeline

clf = pipeline("text-classification", model="dimeneid/kawantumbuh-sentimen")

clf("aplikasi ini sangat bagus dan sangat membantu!")
# [{'label': 'Positif', 'score': 0.99...}]

clf("aplikasi jelek banget tidak bisa dibuka sama sekali!")
# [{'label': 'Negatif', 'score': 0.99...}]

Model dilatih pada teks yang sudah dibersihkan: URL, mention, dan simbol dihapus, huruf berulang dirapikan, kata slang dinormalkan, dan tanda baca . , ! ? dipertahankan. Untuk hasil terbaik, lakukan pembersihan serupa sebelum prediksi.

Data

Ulasan diambil dengan google-play-scraper (bahasa id, negara id, urutan terbaru), hanya bintang 1 dan 5. Nama pengguna tidak disimpan, dan data mentah tidak dipublikasikan.

Aplikasi Bintang 1 Bintang 5
MobileJKN 4.000 4.000
PrimaKu 490 1.496
Total mentah 4.490 5.496 (9.986 ulasan)

Pembersihan. Teks duplikat dibuang sebelum data dibagi, sehingga tidak ada teks yang sama di data latih, validasi, dan uji.

Tahap Jumlah
Data mentah 9.986
Setelah buang teks kosong / hanya simbol 9.912
Setelah buang reviewId ganda 9.912
Setelah buang teks duplikat 7.508

Komposisi setelah pembersihan:

Aplikasi Negatif Positif Total
MobileJKN 3.830 2.248 6.078
PrimaKu 467 963 1.430
Total 4.297 3.211 7.508

Kelas dilanjutkan dengan undersampling acak pada kelas negatif hingga seimbang (3.211 per kelas, total 6.422). Data kemudian dibagi 80/10/10 secara stratified berdasarkan kombinasi aplikasi dan label (random_state=42): train 5.143, validation 636, test 643.

Pelatihan

Pengaturan Nilai
Model dasar indolem/indobert-base-uncased
Learning rate 2e-5, scheduler linear
Batch size 16 (train), 32 (eval)
Epoch maksimum 10, dengan early stopping (patience 2); berhenti di epoch 6
Warmup 10% dari total langkah
Weight decay 0,01
Max length token 256 (padding dinamis per batch)
Loss Cross-entropy dengan bobot kelas (ยฑ1,0 karena data sudah seimbang)
Pemilihan model Validation loss terendah
Presisi / seed FP16, seed 42
Epoch Train loss Val loss Val accuracy
1 0,179 0,334 0,9245
2 0,229 0,277 0,9245
3 0,198 0,313 0,9277
4 0,156 0,272 0,9340
5 0,128 0,389 0,9214
6 0,091 0,364 0,9245

Bobot yang disimpan berasal dari epoch 4 (validation loss terendah).

Evaluasi

Set Akurasi
Train 0,9774
Validation 0,9340
Test (n = 643) 0,9207

Selisih akurasi train dan validation sekitar 4,4 poin, menandakan overfitting ringan. Validation loss juga naik setelah epoch 4 (0,272 menjadi 0,389 di epoch 5), sehingga bobot dari epoch 4 yang dipakai.

Hasil pada test set: akurasi 92,07% (592/643), interval kepercayaan 95% (Wilson) 89,7% sampai 93,9%, macro F1 0,9206.

Kelas Precision Recall F1 Jumlah
Negatif 0,8974 0,9503 0,9231 322
Positif 0,9470 0,8910 0,9181 321

Per aplikasi (test):

Aplikasi Label Akurasi Jumlah
MobileJKN Negatif 0,9510 286
MobileJKN Positif 0,8711 225
PrimaKu Negatif 0,9444 36
PrimaKu Positif 0,9375 96

Jumlah sampel PrimaKu pada test set kecil, sehingga angkanya hanya gambaran kasar. Karena data sudah di-undersampling sebelum dibagi, test set seimbang (322 negatif dan 321 positif) dan tidak mewakili distribusi asli ulasan (sekitar 57% negatif setelah pembersihan).

Analisis Kesalahan

Dari 643 data test ada 51 salah prediksi: 16 negatif ditebak positif dan 35 positif ditebak negatif. Kelompok dengan akurasi terendah adalah ulasan positif MobileJKN. Pola yang terlihat:

  • Ulasan campuran atau sarkastik, yang memuji sekaligus mengeluh.
  • Frasa negasi parsial seperti "kurang baik" yang kadang ditebak positif dengan keyakinan tinggi.
  • Kata slang atau istilah yang jarang muncul di data latih.
  • Rating yang tidak cocok dengan isi teks (misalnya bintang 5 untuk teks berisi keluhan). Ini kelemahan label dari rating, bukan semata kesalahan model.

Keterbatasan

  • Data didominasi MobileJKN (sekitar 81% setelah pembersihan), dan nama aplikasi berkaitan dengan label (MobileJKN cenderung negatif, PrimaKu cenderung positif). Model bisa sebagian memanfaatkan gaya tulisan aplikasi.
  • Performa pada aplikasi atau domain lain, termasuk aplikasi yang tidak ada dalam data latih, belum diuji.
  • Label otomatis dari rating, bukan anotasi manual.
  • Hanya dua kelas. Teks netral tetap akan dipaksa menjadi Negatif atau Positif.
  • Ulasan sarkastik, bahasa campuran, dan bahasa Inggris dapat salah diklasifikasi.
  • Hasil berasal dari satu kali pelatihan. Data diambil sekali (urutan terbaru), sehingga scraping ulang akan menghasilkan angka yang sedikit berbeda.

Sitasi Model Dasar

@inproceedings{koto2020indolem,
  title={IndoLEM and IndoBERT: A Benchmark Dataset and Pre-trained Language Model for Indonesian NLP},
  author={Koto, Fajri and Rahimi, Afshin and Lau, Jey Han and Baldwin, Timothy},
  booktitle={Proceedings of the 28th COLING},
  year={2020}
}
Downloads last month
20
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

Model tree for dimeneid/kawantumbuh-sentimen

Finetuned
(404)
this model

Space using dimeneid/kawantumbuh-sentimen 1

Evaluation results

  • Accuracy on Ulasan Google Play (MobileJKN dan PrimaKu), test split
    self-reported
    0.921
  • Macro F1 on Ulasan Google Play (MobileJKN dan PrimaKu), test split
    self-reported
    0.921