π¦ BaliBERT: Named Entity Recognition untuk Sastra Satua Bali
BaliBERT adalah model Transformer ekstraksi entitas bernama (Named Entity Recognition / NER) khusus bahasa Bali yang di-fine-tune dari fondasi indobenchmark/indobert-base-p1. Model ini dilatih secara khusus untuk mengenali dan mengklasifikasikan 5 kategori entitas karakter tokoh pada korpus cerita rakyat dan sastra Bali (Satua Bali).
π Informasi Model
- Nama Repositori:
Dramaniako/BaliBERT - Arsitektur Dasar: IndoBERT-base (124M parameter, WordPiece tokenization)
- Tugas (Task): Token Classification / Named Entity Recognition (NER)
- Skema Pelabelan: BIO (Begin, Inside, Outside) dengan 11 label token
- Bahasa: Basa Bali (
ban), Bahasa Indonesia (id) - Akurasi Token Keseluruhan: 95.58%
- Micro F1-Score (Chunk-Level
seqeval): 78.91%
π·οΈ Taksonomi Kelas Entitas
Model ini mengenali 5 kategori karakter tokoh dalam sastra dan narasi bahasa Bali:
| Label | Kategori Entitas | Deskripsi & Contoh dalam Satua Bali |
|---|---|---|
PNAME |
Person Name | Nama tokoh manusia (I Pekak Dukuh, I Tiwas, Raden Galuh, Pan Karsa). |
ANM |
Animal Character | Tokoh satwa/hewan dalam fabel Satua Tantri (Sang Lutung, I Kakua, I Macan, I Siap Selem). |
OBJ |
Kinship Role / Object | Sebutan persona kekerabatan, peran sosial, atau objek keramat (memene, pianakne, kurenane, Gada sakti). |
GODS |
Deities & Spiritual | Nama dewa, bhatara, atau entitas spiritual (Bhatara Guru, Sang Hyang Anantaboga, Betara Surya). |
ADJ |
Adjective Modifier | Gelar penanda sifat karakter tokoh (Men Sugih, anak ririh, I Belog, tualen). |
O |
Outside | Kata umum non-entitas (kata kerja, kata hubung, preposisi, tanda baca). |
π Cara Menggunakan Model (Quickstart)
1. Menggunakan Hugging Face pipeline (Paling Praktis)
from transformers import pipeline
# Inisialisasi pipeline NER
ner = pipeline(
"token-classification",
model="Dramaniako/BaliBERT",
tokenizer="Dramaniako/BaliBERT",
aggregation_strategy="simple"
)
# Kalimat uji bahasa Bali
teks = "I Pekak Dukuh lantas ngaukin Sang Lutung ane sedeng ngamah biu di duur punyane."
# Jalankan ekstraksi entitas
hasil = ner(teks)
for entitas in hasil:
print(f"β’ Entitas : {entitas['word']:<20} | Kelas: {entitas['entity_group']:<6} | Skor: {entitas['score']:.4f}")
Contoh Output:
β’ Entitas : I Pekak Dukuh | Kelas: PNAME | Skor: 0.9990
β’ Entitas : Sang Lutung | Kelas: ANM | Skor: 0.9905
2. Inferensi Manual PyTorch dengan Word Boundary Snapping
import torch
from transformers import AutoTokenizer, AutoModelForTokenClassification
model_name = "Dramaniako/BaliBERT"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForTokenClassification.from_pretrained(model_name)
model.eval()
text = "Gelisang satua Bhatara Guru lantas micayang panugrahan ring Sang Hyang Anantaboga."
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
predictions = torch.argmax(outputs.logits, dim=-1)[0].tolist()
tokens = tokenizer.convert_ids_to_tokens(inputs["input_ids"][0])
id2label = model.config.id2label
for token, pred_id in zip(tokens, predictions):
if token not in ["[CLS]", "[SEP]", "[PAD]"]:
print(f"{token:<15} -> {id2label[pred_id]}")
π Hasil Evaluasi & Performa (Benchmark)
Evaluasi dilakukan pada dataset blind test independen (data/test.xlsx) berisi 30.395 kata token dan 2.052 kalimat:
Laporan Klasifikasi CoNLL seqeval (Tingkat Entitas Utuh)
| Kelas Entitas | Precision | Recall | F1-Score | Support (Jumlah Entitas) |
|---|---|---|---|---|
ADJ |
0.93 | 0.95 | 93.63% | 132 |
PNAME |
0.84 | 0.86 | 84.96% | 845 |
ANM |
0.81 | 0.83 | 81.95% | 872 |
GODS |
0.65 | 0.71 | 68.05% | 162 |
OBJ |
0.66 | 0.64 | 64.91% | 577 |
| Micro Average | 0.78 | 0.80 | 78.91% | 2.588 |
| Macro Average | 0.78 | 0.80 | 78.70% | 2.588 |
Metrik Akurasi Tingkat Token
- Overall Token Accuracy (termasuk label
O): 95.58% - Entity Token Accuracy (Micro, khusus kata entitas): 85.35%
- Pelanggaran Transisi BIO (Illegal Transitions): 0 (Eliminasi total orphan I- dan mixed-class)
βοΈ Detail Pelatihan (Training Setup)
- Dataset Latih: 59.522 kata token / 4.398 kalimat sastra Satua Bali
- Strategi Subword Alignment: First-Subword Strategy (morfem akar kata pertama, token lanjutan diabaikan
-100) - Loss Function: Smoothed Class-Weighted Cross-Entropy Loss untuk menangani ketimpangan kelas mayoritas
O - Optimizer: AdamW (
weight_decay=0.01) - Learning Rate:
3e-5dengan Linear Warmup 100 langkah - Batch Size: 16
- Epochs: 5
- Hardware: NVIDIA GeForce RTX 4060 Laptop GPU (CUDA 12.4, Mixed Precision
fp16)
β οΈ Batasan (Limitations)
- Ambiguitas Konteks Satwa vs Manusia: Pada beberapa cerita fabel, tokoh satwa dapat menggunakan gelar manusia (contoh: "Ida Sang Prabu" yang merujuk pada Raja Singa). Model memprediksi berdasarkan konteks kalimat lokal.
- Entitas Spiritual Langka (
GODS): Kosakata tokoh dewa atau bhatara yang sangat jarang muncul di korpus latih memiliki variasi representasi yang lebih menantang. - Domain Teks: Model ini dioptimalkan untuk sastra narasi tradisional Bali (Satua Bali). Penggunaan pada teks percakapan modern atau formal administratif mungkin memerlukan adaptasi lanjutan.
π Lisensi & Sitasi
Model ini dirilis di bawah lisensi Apache 2.0. Jika Anda menggunakan model ini dalam penelitian atau proyek Anda, silakan berikan atribusi kepada repositori ini:
@misc{balibert2026,
author = {Dramaniako},
title = {BaliBERT: Named Entity Recognition for Balinese Literature using IndoBERT},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/Dramaniako/BaliBERT}}
}
- Downloads last month
- 51