Penerjemah BISINDO ke Bahasa Indonesia — N-gram Bigram & GPT-2 | BLEU 27.90 | v1.2.0: bug fix + studi ablasi + benchmark lengkap
Project description
BisindoTrans
Hybrid Sign Language Translation System for Indonesian
Tentang Proyek
BisindoTrans adalah sistem penerjemahan bahasa isyarat Indonesia (BISINDO) ke teks Bahasa Indonesia natural yang dikembangkan sebagai bagian dari penelitian Skripsi S1 Ilmu Komputer.
Proyek ini mengeksplorasi pendekatan Hybrid yang menggabungkan:
- Statistical Language Model (N-gram Bigram) untuk efisiensi dan presisi
- Neural Language Model (GPT-2 Indonesian) untuk fleksibilitas generasi
Sistem ini juga membandingkan dua strategi decoding:
- Beam Search — deterministik, konsisten
- Nucleus Sampling — stokastik, variatif
Evaluasi dilakukan menggunakan metrik standar NLP:
- BLEU Score — n-gram precision
- chrF Score — character-level F-score
Instalasi
# Clone repository
git clone https://github.com/username/bisindo-trans.git
cd bisindo-trans
# Install package (development mode)
pip install -e .
# Dengan dukungan Neural LM (GPT-2)
pip install -e ".[neural]"
Requirements:
- Python 3.9+
- pandas, nltk, openpyxl
- torch, transformers (opsional, untuk mode neural)
Quick Start
from bisindotrans import Translator
# Inisialisasi dengan N-gram model
translator = Translator(model_type="ngram")
# Terjemahkan glosa ke bahasa natural
hasil = translator.translate("SAYA MAKAN NASI", method="beam")
print(hasil) # Output: "Saya makan nasi."
# Dengan nama (ejaan jari)
hasil = translator.translate("NAMA SAYA M U H A M M A D A L D I", method="beam")
print(hasil) # Output: "Nama saya Muhammad Aldi."
# Perbandingan metode
beam_result = translator.translate("SELAMAT PAGI", method="beam")
nucleus_result = translator.translate("SELAMAT PAGI", method="nucleus")
Fitur Unggulan
| Fitur | Deskripsi |
|---|---|
| Hybrid Model | Pilih antara Statistical N-gram atau Neural GPT-2 sesuai kebutuhan |
| Dual Decoding | Beam Search (presisi tinggi) dan Nucleus Sampling (variasi output) |
| Smart NER | Deteksi otomatis nama orang dari ejaan jari (fingerspelling) |
| Auto-Capitalization | Kapitalisasi otomatis untuk nama dan awal kalimat |
| Model Persistence | Simpan/muat model untuk loading instan (~10 detik vs ~5 menit training) |
| Anti-Hallucination | Filter bawaan untuk mencegah output yang tidak relevan pada Neural LM |
| Preprocessing Pipeline | Normalisasi glosa, penggabungan ejaan jari, koreksi frasa |
| Batch Translation | Terjemahkan banyak kalimat sekaligus |
Benchmark
Perbandingan Model
| Model | Decoding | BLEU ↑ | chrF ↑ | Latency ↓ |
|---|---|---|---|---|
| N-gram | Beam Search | 17.12 | 58.80 | 4.89 ms |
| N-gram | Nucleus Sampling | 5.09 | 42.52 | 1.86 ms |
| Neural (GPT-2) | Beam Search | 12.07 | 57.89 | 270.06 ms |
| Neural (GPT-2) | Nucleus Sampling | 11.73 | 57.90 | 162.07 ms |
🏆 Best overall: N-gram + Beam Search — BLEU 17.12, chrF 58.80, latency 4.89 ms
⚡ Best speed: N-gram — ~55× faster than Neural model
Test Coverage: 3.460 exhaustive scenarios × 4 configurations = 13.840 total inferences
Konfigurasi Pengujian
| Parameter | N-gram | Neural |
|---|---|---|
| Corpus Size | ~19.5 juta kata | Pre-trained |
| Vocab Size | ~1.47 juta | 50,257 token |
| Beam Width | 3 | 5 |
| Top-p (Nucleus) | 0.5 | 0.7 |
| Temperature | — | 0.6 |
| Label Glosa | 73 kelas | 73 kelas |
| Test Scenarios | 3.460 (exhaustive) | 3.460 (exhaustive) |
Struktur Package
bisindotrans/
├── __init__.py # Public API
├── translator.py # Main Translator class
├── preprocessing/
│ ├── normalisasi.py # Cleaning & deduplication
│ └── naturalisasi.py # NER & phrase mapping
├── models/
│ ├── ngram.py # Statistical bigram model
│ └── neural.py # GPT-2 wrapper
├── decoding/
│ └── strategies.py # Beam Search & Nucleus Sampling
└── utils/
└── postprocessing.py # Output formatting
Penggunaan Lanjutan
Ganti Model
# Mode N-gram (cepat, offline)
t = Translator(model_type="ngram")
# Mode Neural (butuh GPU/CPU kuat)
t = Translator(model_type="neural")
Custom Model Path
# Load model dari lokasi custom
t = Translator(model_type="ngram", model_path="path/to/custom_model.pkl")
Batch Processing
glosses = ["SELAMAT PAGI", "TERIMA KASIH", "SAMPAI JUMPA"]
results = translator.translate_batch(glosses, method="beam")
Referensi
- Holtzman, A., et al. (2019). The Curious Case of Neural Text Degeneration
- Radford, A., et al. (2019). Language Models are Unsupervised Multitask Learners
- Papineni, K., et al. (2002). BLEU: a Method for Automatic Evaluation of Machine Translation
Author
Muhammad Aldi Alfatih
📧 aldialfatih016@gmail.com
Skripsi S1 Ilmu Komputer — 2026
License
MIT License — Silakan gunakan untuk keperluan akademis dan pengembangan.
Acknowledgments
Proyek ini dikembangkan dengan dukungan ekosistem open-source berikut yang tersedia melalui Python Package Index (PyPI):
| Library | Versi | Fungsi |
|---|---|---|
pandas |
≥1.5.0 | Manipulasi data & evaluasi |
nltk |
≥3.8.0 | BLEU score & tokenisasi |
openpyxl |
≥3.0.0 | Ekspor hasil ke Excel |
torch |
≥2.0.0 | Backend untuk Neural LM |
transformers |
≥4.30.0 | GPT-2 Indonesian model |
Model Neural menggunakan pre-trained cahya/gpt2-small-indonesian-522M dari HuggingFace Hub.
Published on PyPI: pypi.org/project/bisindo-trans
Terima kasih kepada komunitas Python Indonesia dan seluruh kontributor open-source yang membuat proyek ini mungkin terlaksana.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bisindo_trans-1.2.0.tar.gz.
File metadata
- Download URL: bisindo_trans-1.2.0.tar.gz
- Upload date:
- Size: 20.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0c148aeb22a3f6a805efd09fae31a442e85a86e38f829f49ca92577d3baa73e
|
|
| MD5 |
91896ec15afb1d928e8d1b074efa51fe
|
|
| BLAKE2b-256 |
e3e7bc27e1926874c7515b48825e75ac948848f03cf6e9f280a6b1142773bd53
|
File details
Details for the file bisindo_trans-1.2.0-py3-none-any.whl.
File metadata
- Download URL: bisindo_trans-1.2.0-py3-none-any.whl
- Upload date:
- Size: 23.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
747aa0486f2881a68a64b596c21043de1902d58fb9b08a3e3178869591a21993
|
|
| MD5 |
982edd1a62a75253b554d1b4a31fe806
|
|
| BLAKE2b-256 |
bceff33f814809d902a34c8bc5bbf1ea9084e3aeb01ce9b04a6fac8a24b89e26
|