Indigo
Model bahasa kecil GPT-style yang dibangun dari nol (tanpa library transformers) sebagai proyek pembelajaran. Backend PyTorch; tersedia juga varian TensorFlow/Keras terpisah. Bobot disimpan dalam format aman .safetensors.
Arsitektur
| Nilai default | |
|---|---|
| Tipe | Decoder-only transformer (pre-LN, SDPA) |
| Parameter | ~0.81M |
| Layer / Head | 4 / 4 |
| Dimensi | 128 |
| Konteks | 96 token |
| Tokenizer | karakter atau BPE (--tokenizer bpe) |
File penting
indigo/model.py arsitektur GPT (attention kausal + KV-cache)
indigo/bpe.py tokenizer BPE byte-level minimal
indigo/tokenizer.py tokenizer karakter
train.py training (best-checkpoint, resume penuh, split val per-file)
generate.py generasi (top-k, top-p, repetition penalty)
out/indigo_best.safetensors bobot terbaik + _meta.json
Cara pakai
pip install -r requirements.txt
python train.py --data data/sample.txt --steps 2000
python train.py --data data/tekskamu.txt --tokenizer bpe --vocab-size 512
python generate.py --prompt "Indigo" --max-new 300 \
--temperature 0.8 --top-k 40 --top-p 0.9 --repetition-penalty 1.2
python train.py --init-from out/indigo_best.safetensors --steps 1000 # lanjutkan training
Generasi memakai KV-cache sehingga cepat untuk output panjang.
Penjaga kamus (kualitas ejaan)
--guard memuat kamus kata (satu kata per baris, mis. wordlist KBBI berlisensi MIT dari
hf.co/datasets/Deddy/Indonesia-dataset-2023), lalu memilih kandidat generasi dengan
rasio kata dikenal tertinggi โ menyaring ejaan tak-baku tanpa mengubah model:
python generate.py --prompt "kepekaan" --max-new 120 --guard data/kamus_id.txt
# metrik otomatis per run di manifest.json ("kamus_ratio")
python pipeline.py --tag run03 --data data/ --steps 2000 --guard data/kamus_id.txt
Kata berimbuhan dicek lewat formula morfologi: data/prefiks.txt & data/sufiks.txt
(mis. dipahami โ akar paham, termasuk asimilasi meny-โs, pem-โp).
Edit kedua file itu untuk memperluas cakupan tanpa menyentuh kode.
Pipeline
pipeline.py merangkai semuanya: menyalin data lokal dan/atau menarik dataset HF,
melatih, menyimpan manifest.json (statistik + konfigurasi run), lalu opsional
mempromosikan checkpoint terbaik ke out/ dan mengunggahnya ke Hub.
# data lokal + dataset HF, tokenizer BPE
python pipeline.py --tag run01 --data data/tekskamu.txt --hf-dataset adyoi/indigo \
--tokenizer bpe --vocab-size 512 --steps 900 --device cpu
# promosikan hasil terbaik ke out/ sekaligus upload ke Hub
python pipeline.py --tag run02 --data data/ --steps 2000 --finalize --push
Batasan
- Dilatih pada data sangat kecil โ output belum koheren; cocok untuk edukasi bukan produksi.
- Gunakan checkpoint
indigo_best(terpilih berdasarkan validasi), bukan checkpoint akhir.
Keamanan
Bobot disimpan sebagai .safetensors (tanpa pickle, tidak mengeksekusi kode saat dimuat). State optimizer (*_optimizer.pt) hanya untuk resume lokal โ jangan dibagikan.