Skip to main content

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

Python License Status NLP


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

bisindo_trans-1.2.0.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bisindo_trans-1.2.0-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

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

Hashes for bisindo_trans-1.2.0.tar.gz
Algorithm Hash digest
SHA256 a0c148aeb22a3f6a805efd09fae31a442e85a86e38f829f49ca92577d3baa73e
MD5 91896ec15afb1d928e8d1b074efa51fe
BLAKE2b-256 e3e7bc27e1926874c7515b48825e75ac948848f03cf6e9f280a6b1142773bd53

See more details on using hashes here.

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

Hashes for bisindo_trans-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 747aa0486f2881a68a64b596c21043de1902d58fb9b08a3e3178869591a21993
MD5 982edd1a62a75253b554d1b4a31fe806
BLAKE2b-256 bceff33f814809d902a34c8bc5bbf1ea9084e3aeb01ce9b04a6fac8a24b89e26

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page