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
Model tree for siRendy/indobert-analisis-sentimen-review-produk-p2
Base model
indobenchmark/indobert-base-p2