---
license: cc-by-nc-sa-4.0
language:
- id
- gor
tags:
- mbart
- translation
- gorontalo
- indonesian
- bahasa-daerah
- low-resource
- seq2seq
- nmt
- hulontalo
datasets:
- custom
metrics:
- loss
model-index:
- name: tuwili
results:
- task:
type: translation
name: Machine Translation
metrics:
- name: Eval Loss
type: loss
value: 0.6733
pipeline_tag: translation
library_name: transformers
base_model: facebook/mbart-large-50-many-to-many-mmt
widget:
- text: "Terjemahkan kata atau kalimat berikut dari bahasa Indonesia ke bahasa Gorontalo. Selamat pagi"
example_title: "Indonesia โ Gorontalo"
- text: "Terjemahkan kata atau kalimat berikut dari bahasa Gorontalo ke bahasa Indonesia. kumando"
example_title: "Gorontalo โ Indonesia"
- text: "Terjemahkan kata atau kalimat berikut dari bahasa Indonesia ke bahasa Gorontalo. Terima kasih"
example_title: "Terima kasih"
- text: "Terjemahkan kata atau kalimat berikut dari bahasa Indonesia ke bahasa Gorontalo. Saya makan nasi"
example_title: "Kalimat sederhana"
---
# ๐บ Tuwili โ Model Penerjemah Indonesia โ Gorontalo
**Model AI pertama untuk menerjemahkan antara Bahasa Indonesia dan Bahasa Gorontalo (Hulontalo)**
[](https://creativecommons.org/licenses/by-nc-sa/4.0/)
[](https://huggingface.co/facebook/mbart-large-50-many-to-many-mmt)
[](#dataset)
---
## ๐ Tentang Tuwili
**Tuwili** adalah model Neural Machine Translation (NMT) yang di-fine-tune dari [mBART-50](https://huggingface.co/facebook/mbart-large-50-many-to-many-mmt) untuk menerjemahkan secara **dua arah (bidirectional)** antara:
- ๐ฎ๐ฉ **Bahasa Indonesia** โ **Bahasa Gorontalo** (Hulontalo)
- ๐๏ธ **Bahasa Gorontalo** (Hulontalo) โ **Bahasa Indonesia**
Bahasa Gorontalo adalah bahasa daerah yang digunakan oleh masyarakat di Provinsi Gorontalo, Sulawesi, Indonesia. Sebagai bahasa dengan sumber daya rendah (*low-resource language*), model ini bertujuan membantu pelestarian dan digitalisasi bahasa Gorontalo melalui teknologi AI.
---
## ๐ Cara Menggunakan
### Instalasi
```bash
pip install transformers sentencepiece protobuf torch gradio
```
### Quick Start (Python)
```python
from transformers import MBartForConditionalGeneration, MBart50TokenizerFast
# Muat model
model_name = "datanikah9/tuwili"
tokenizer = MBart50TokenizerFast.from_pretrained(model_name)
model = MBartForConditionalGeneration.from_pretrained(model_name)
tokenizer.src_lang = "id_ID"
def translate(text, direction="id2gor"):
"""
Terjemahkan teks.
direction: "id2gor" (Indonesia โ Gorontalo) atau "gor2id" (sebaliknya)
"""
if direction == "id2gor":
prompt = f"Terjemahkan kata atau kalimat berikut dari bahasa Indonesia ke bahasa Gorontalo. {text}"
else:
prompt = f"Terjemahkan kata atau kalimat berikut dari bahasa Gorontalo ke bahasa Indonesia. {text}"
inputs = tokenizer(prompt, return_tensors="pt", max_length=128, truncation=True)
generated = model.generate(
**inputs,
max_length=64,
num_beams=5,
forced_bos_token_id=tokenizer.lang_code_to_id["id_ID"],
)
return tokenizer.decode(generated[0], skip_special_tokens=True)
# Contoh penggunaan
print(translate("Selamat pagi", direction="id2gor"))
print(translate("kumando", direction="gor2id"))
print(translate("Saya makan nasi", direction="id2gor"))
```
### Batch Translation
```python
def translate_batch(texts, direction="id2gor", batch_size=16):
results = []
for i in range(0, len(texts), batch_size):
batch = texts[i:i+batch_size]
if direction == "id2gor":
prompts = [f"Terjemahkan kata atau kalimat berikut dari bahasa Indonesia ke bahasa Gorontalo. {t}" for t in batch]
else:
prompts = [f"Terjemahkan kata atau kalimat berikut dari bahasa Gorontalo ke bahasa Indonesia. {t}" for t in batch]
inputs = tokenizer(prompts, return_tensors="pt", max_length=128, truncation=True, padding=True)
generated = model.generate(**inputs, max_length=64, num_beams=5, forced_bos_token_id=tokenizer.lang_code_to_id["id_ID"])
results.extend(tokenizer.batch_decode(generated, skip_special_tokens=True))
return results
# Terjemahkan banyak kata sekaligus
words = ["Rumah", "Air", "Terima kasih", "Selamat malam"]
translations = translate_batch(words)
```
### ๐จ Demo Interaktif dengan Gradio
Jalankan aplikasi web lokal untuk mencoba model secara interaktif:
```python
import gradio as gr
import torch
from transformers import MBartForConditionalGeneration, MBart50TokenizerFast
# Muat model
print("โณ Memuat model Tuwili...")
model_name = "datanikah9/tuwili"
tokenizer = MBart50TokenizerFast.from_pretrained(model_name)
model = MBartForConditionalGeneration.from_pretrained(
model_name,
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32
)
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
model.eval()
tokenizer.src_lang = "id_ID"
print("โ
Model siap!")
def terjemahkan(teks, arah):
if not teks.strip():
return "โ ๏ธ Masukkan teks terlebih dahulu."
if arah == "๐ฎ๐ฉ Indonesia โ Gorontalo":
prompt = f"Terjemahkan kata atau kalimat berikut dari bahasa Indonesia ke bahasa Gorontalo. {teks}"
else:
prompt = f"Terjemahkan kata atau kalimat berikut dari bahasa Gorontalo ke bahasa Indonesia. {teks}"
inputs = tokenizer(prompt, return_tensors="pt", max_length=128, truncation=True).to(device)
with torch.no_grad():
generated = model.generate(
**inputs,
max_length=64,
num_beams=5,
forced_bos_token_id=tokenizer.lang_code_to_id["id_ID"],
)
return tokenizer.decode(generated[0], skip_special_tokens=True)
# Bangun antarmuka Gradio
demo = gr.Interface(
fn=terjemahkan,
inputs=[
gr.Textbox(
label="Teks",
placeholder="Ketik kata atau kalimat di sini...",
lines=3,
),
gr.Radio(
choices=["๐ฎ๐ฉ Indonesia โ Gorontalo", "๐๏ธ Gorontalo โ Indonesia"],
value="๐ฎ๐ฉ Indonesia โ Gorontalo",
label="Arah Terjemahan",
),
],
outputs=gr.Textbox(label="Hasil Terjemahan", lines=3),
title="๐บ Tuwili โ Penerjemah Indonesia โ Gorontalo",
description="Model AI untuk menerjemahkan antara Bahasa Indonesia dan Bahasa Gorontalo (Hulontalo).",
examples=[
["Selamat pagi", "๐ฎ๐ฉ Indonesia โ Gorontalo"],
["Terima kasih", "๐ฎ๐ฉ Indonesia โ Gorontalo"],
["Saya makan nasi", "๐ฎ๐ฉ Indonesia โ Gorontalo"],
["kumando", "๐๏ธ Gorontalo โ Indonesia"],
["bele", "๐๏ธ Gorontalo โ Indonesia"],
],
theme=gr.themes.Soft(),
flagging_mode="never",
)
demo.launch(share=True) # share=True untuk mendapatkan link publik
```
Setelah dijalankan, buka browser di `http://localhost:7860` atau gunakan link publik yang ditampilkan di terminal.
> **Tip:** Di Google Colab, tambahkan `demo.launch(share=True, debug=True)` agar bisa diakses dari luar.
---
## ๐ Detail Training
### Konfigurasi Model
| Parameter | Nilai |
| :--- | :--- |
| Base Model | `facebook/mbart-large-50-many-to-many-mmt` |
| Arsitektur | MBartForConditionalGeneration (Encoder-Decoder Transformer) |
| Total Parameter | **611 Juta** |
| Encoder/Decoder Layers | 12 / 12 |
| Attention Heads | 16 |
| Hidden Size (d_model) | 1024 |
| FFN Dim | 4096 |
| Vocab Size | 250.054 |
| Format Weights | SafeTensors |
### Hyperparameters Training
| Parameter | Nilai |
| :--- | :--- |
| Epochs | 3 |
| Batch Size | 8 (per device) |
| Gradient Accumulation | 4 steps |
| **Effective Batch Size** | **32** |
| Learning Rate | 5e-5 |
| LR Scheduler | Cosine |
| Warmup Steps | 500 |
| Weight Decay | 0.01 |
| Max Source Length | 128 tokens |
| Max Target Length | 64 tokens |
| Precision | FP16 (Mixed Precision) |
| Gradient Checkpointing | โ
(saat training) |
| Optimizer | AdamW |
### Hasil Training
| Metrik | Nilai |
| :--- | :--- |
| Total Training Steps | 27.591 |
| Train Loss (awal) | 25.52 |
| Train Loss (akhir) | 1.54 |
| **Penurunan Loss** | **94%** |
| **Best Eval Loss** | **0.6733** |
| Total FLOPs | 2.39 ร 10ยนโท |
### Kurva Konvergensi
Training menunjukkan konvergensi yang baik:
- Loss turun drastis pada 500 step pertama (dari 25.5 ke ~4.5)
- Stabil konvergen di sekitar step 20.000+
- Eval loss stabil di ~0.673 pada 3 evaluasi terakhir โ **tidak ada tanda overfitting**
---
## ๐ Dataset {#dataset}
Model ini dilatih menggunakan **309.788 instruksi fine-tuning** dua arah (bidirectional) dalam format Alpaca:
### Komposisi Dataset
| Sumber | Jumlah Entri | Deskripsi |
| :--- | :--- | :--- |
| Kamus Gorontalo-Indonesia (bidirectional) | 102.782 | Kosa kata dan frasa asli bahasa Gorontalo |
| KBBI v6.1.0 โ Mapped | 24.628 | Kata KBBI yang ditemukan padanan Gorontalo-nya |
| KBBI v6.1.0 โ Loanwords (Serapan) | 182.378 | Istilah teknis/akademik yang dipertahankan sebagai kata serapan |
| **Total** | **309.788** | |
### Format Data (Alpaca)
```json
{
"instruction": "Terjemahkan kata atau kalimat berikut dari bahasa Indonesia ke bahasa Gorontalo.",
"input": "bergotong royong",
"output": "mohuyula"
}
```
Setiap entri memiliki pasangan terbalik (IndonesiaโGorontalo dan GorontaloโIndonesia) untuk memastikan kemampuan terjemahan dua arah.
---
## โ ๏ธ Batasan & Catatan
1. **Bahasa Gorontalo bukan bahasa resmi di mBART-50** โ Model menggunakan language code `id_ID` sebagai proxy karena mBART-50 tidak memiliki language code khusus untuk bahasa Gorontalo. Ini berarti model belajar "menerjemahkan" melalui mekanisme instruksi, bukan melalui language token yang sebenarnya.
2. **Kualitas terjemahan bervariasi** โ Performa terbaik pada kata/frasa pendek yang ada di dataset training. Kalimat panjang atau kompleks mungkin kurang akurat.
3. **Kata serapan dominan** โ Sebagian besar entri KBBI (~59%) adalah kata serapan yang dipertahankan bentuk aslinya. Ini berguna untuk cakupan kosakata tetapi bukan terjemahan "asli" Gorontalo.
4. **Hardware training** โ Dilatih di Google Colab dengan Tesla T4 (15 GB VRAM) menggunakan gradient checkpointing dan mixed precision (FP16).
---
## ๐ท๏ธ Informasi Teknis
- **Framework**: PyTorch + Hugging Face Transformers v5.13.1
- **Tokenizer**: MBart50TokenizerFast (SentencePiece-based)
- **Format**: SafeTensors (lebih aman dan cepat dari PyTorch .bin)
- **Ukuran Model**: ~2.44 GB
- **Kompatibilitas**: Transformers โฅ 4.30.0
---
## ๐ Lisensi
Model ini dirilis di bawah lisensi [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/).
- โ
Boleh digunakan untuk riset dan edukasi
- โ
Boleh dimodifikasi dan didistribusikan ulang (dengan atribusi)
- โ Tidak boleh digunakan untuk tujuan komersial tanpa izin
- โ ๏ธ Data KBBI adalah milik Badan Pengembangan dan Pembinaan Bahasa, Kemdikbudristek RI
---
## ๐ Ucapan Terima Kasih
- [Facebook/Meta AI](https://huggingface.co/facebook/mbart-large-50-many-to-many-mmt) untuk model mBART-50
- [Badan Bahasa Kemdikbudristek](https://kbbi.kemdikbud.go.id/) untuk data KBBI v6.1.0
- Komunitas bahasa Gorontalo untuk dataset kosa kata dasar
---
## ๐ง Kontak
Jika ada pertanyaan atau masukan, silakan buka [Issue](https://huggingface.co/datanikah9/tuwili/discussions) di halaman model ini.