Instructions to use datanikah9/tuwili with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use datanikah9/tuwili with Transformers:
# Use a pipeline as a high-level helper # Warning: Pipeline type "translation" is no longer supported in transformers v5. # You must load the model directly (see below) or downgrade to v4.x with: # 'pip install "transformers<5.0.0' from transformers import pipeline pipe = pipeline("translation", model="datanikah9/tuwili")# Load model directly from transformers import AutoTokenizer, AutoModelForSeq2SeqLM tokenizer = AutoTokenizer.from_pretrained("datanikah9/tuwili") model = AutoModelForSeq2SeqLM.from_pretrained("datanikah9/tuwili", device_map="auto") - Notebooks
- Google Colab
- Kaggle
🌺 Tuwili — Model Penerjemah Indonesia ↔ Gorontalo
📖 Tentang Tuwili
Tuwili adalah model Neural Machine Translation (NMT) yang di-fine-tune dari mBART-50 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
pip install transformers sentencepiece protobuf torch gradio
Quick Start (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
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:
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)
{
"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
Bahasa Gorontalo bukan bahasa resmi di mBART-50 — Model menggunakan language code
id_IDsebagai 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.Kualitas terjemahan bervariasi — Performa terbaik pada kata/frasa pendek yang ada di dataset training. Kalimat panjang atau kompleks mungkin kurang akurat.
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.
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.
- ✅ 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 untuk model mBART-50
- Badan Bahasa Kemdikbudristek untuk data KBBI v6.1.0
- Komunitas bahasa Gorontalo untuk dataset kosa kata dasar
📧 Kontak
Jika ada pertanyaan atau masukan, silakan buka Issue di halaman model ini.
- Downloads last month
- 24
Model tree for datanikah9/tuwili
Base model
facebook/mbart-large-50-many-to-many-mmtSpace using datanikah9/tuwili 1
Evaluation results
- Eval Lossself-reported0.673