IndoBERT Sentiment Classification 2 Kelas Fase II

Model ini adalah versi pengembangan lanjutan (fase ke-2) dari siRendy/indobert-analisis-sentimen-review-produk. Awalnya, model tersebut merupakan hasil fine-tuning dari indobenchmark/indobert-base-p2 untuk klasifikasi sentimen 2 kelas (POSITIF, NEGATIF) terhadap 10.600 data ulasan produk. Pada fase ke-2 ini, model di-pretrain terlebih dahulu menggunakan 65.849 baris ulasan produk agar lebih mengenali gaya bahasa informal yang umum digunakan dalam review, seperti singkatan "banget" β†’ "bgt", "enggak" β†’ "gk", dsb. Kemudian, model di-finetune lagi menggunakan 11.000 data ulasan dari Tokopedia & Shopee.

⚠️ coution usage

Meskipun begitu, tetap disarankan untuk berhati-hati saat menggunakan model ini, karena masih ada kemungkinan model belum mempelajari semua kosakata tidak baku yang bisa menyebabkan hasil inferensi kurang akurat. Pre-processing terhadap emotikon, penulisan URL, dan teks sumbang (noise) tetap perlu dilakukan untuk memastikan hasil klasifikasi yang optimal.


🎯 Tujuan

Klasifikasi komentar atau ulasan produk dalam Bahasa Indonesia menjadi dua kelas:

  • POSITIF
  • NEGATIF

Cocok untuk data yang mengandung kata tidak baku dan singkatan.


🧠 Base Model


βš™οΈ Training Arguments

Pretraining (Domain-Adaptive Pretraining)

Berikut adalah konfigurasi pre-train training (TrainingArguments) yang digunakan saat pelatihan:

from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./indobert-dapt",
    overwrite_output_dir=True,
    num_train_epochs=20,
    push_to_hub=False,
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    eval_strategy="epoch",  # <-- Tambahkan evaluasi di tiap epoch
    save_steps=1000,
    save_total_limit=2,
    logging_steps=100,
    report_to=[],
)

Finetune Training Arguments (Klasifikasi Sentimen)

Berikut adalah konfigurasi finetune training (TrainingArguments) yang digunakan saat pelatihan:

from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=4,
    per_device_eval_batch_size=4,
    weight_decay=0.05,
    eval_strategy="epoch",
    save_strategy="epoch",
    seed=42,
    load_best_model_at_end=True,
    metric_for_best_model="f1",
    logging_dir="./logs",
    report_to="tensorboard",
    logging_steps=100,
    warmup_ratio=0.05,
)

πŸ“Š Evaluasi Hasil

Hasil Pre-Train model indobenchmark/indobert-base-p2

Model dievaluasi selama 20 epoch menggunakan metrik training dan validation loss. Berikut adalah performa model pada setiap epoch:

Epoch Training Loss Validation Loss
1 3.9040 3.8402
5 2.9779 3.1023
10 2.6053 2.8402
15 2.3478 2.6833
20 2.1556 2.5688

Pretraining dilakukan selama 20 epoch menggunakan dataset ulasan produk (tanpa label) untuk memperkuat pemahaman model terhadap bahasa domain e-commerce.


Hasil Evaluasi Finetuning Model yang Sudah di Pretrain

Model dievaluasi selama 3 epoch menggunakan metrik Accuracy dan F1 Score. Berikut adalah performa model pada setiap epoch:

Epoch Training Loss Validation Loss Accuracy F1 Score
1 0.1962 0.2990 93.84% 93.80%
2 βœ… 0.1874 0.2200 94.82% 94.78%
3 0.2223 0.2102 94.62% 94.65%

Model terbaik diambil dari epoch ke-2 berdasarkan nilai F1 tertinggi.


πŸ‘¨β€πŸ’» Cara Inferensi

# Load model dan tokenizer
from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline
import torch

# Load dari Hugging Face Hub
model = AutoModelForSequenceClassification.from_pretrained("siRendy/indobert-analisis-sentimen-review-produk-p2")
tokenizer = AutoTokenizer.from_pretrained("siRendy/indobert-analisis-sentimen-review-produk-p2")

# Fungsi prediksi
def predict_sentiment(text):
    classifier = pipeline(
        "text-classification",
        model=model,
        tokenizer=tokenizer,
        device=0 if torch.cuda.is_available() else -1
    )

    result = classifier(text)[0]
    return {
        "sentiment": str(result["label"]),
        "confidence": round(result["score"], 4)
    }

# Contoh penggunaan
text = ""Keripiknya garing bgt, cocok bgt bwt ngemil sambil santuy. Pas smp tuh masih utuh, gk ada yg hancur, dan kerasa fresh bgt pas dibuka. Beneran kek baru digoreng.""
prediction = predict_sentiment(text)
print(prediction)
Downloads last month
0
Safetensors
Model size
124M params
Tensor type
F32
Β·
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for siRendy/indobert-analisis-sentimen-review-produk-p2

Finetuned
(44)
this model