Bagian sebelumnya berhenti pada loss data latih — angka yang bisa terus turun hanya karena model menghafal delapan kalimat kopi. Evaluasi yang jujur membutuhkan dua ukuran berbeda: perplexity pada data validasi kopi (dua kalimat yang tidak pernah dilatih) untuk mengukur penyesuaian domain, dan perplexity pada subset umum untuk memeriksa apakah kemampuan lama masih bertahan. Metrik perplexity sendiri — eksponensial dari rata-rata negative log-likelihood per token — dibahas pada chapter Evaluasi LLM
; implementasinya di src/model_bahasa.py hanya dua baris lewat fungsi hitung_ppl.
Tiga Model, Dua Ukuran #
Skrip src/evaluasi.py membangun tiga model dari titik pra-latih yang identik: model beku total (pembanding tanpa fine-tuning), model LoRA r=4, dan model full fine-tune. Ketiganya lalu diuji pada kedua ukuran:
python3 src/evaluasi.pyOutput yang Dihasilkan:
== data ==
jendela umum (pra-latih) : 46
jendela kopi (latih) : 17
jendela kopi (validasi) : 3
== sebelum fine-tuning (model pra-latih beku) ==
ppl kopi-validasi : 8.66
ppl umum : 2.96
== perplexity setelah fine-tuning (semakin kecil semakin baik) ==
model ppl kopi-val ppl umum
beku 8.66 2.96
lora 5.98 5.86
full 5.86 5.15
== pembacaan hasil ==
penurunan ppl kopi LoRA : 8.66 -> 5.98 (31%)
naiknya ppl umum LoRA : 2.96 -> 5.86 (98%)
naiknya ppl umum full : 2.96 -> 5.15 (74%)Tabel hasil memuat tiga baris yang perlu dibaca perlahan. Model beku menjadi patokan: perplexity 8.66 pada teks kopi berarti model dasar “bingung” di antara sekitar sembilan kandidat karakter saat membaca domain yang belum dipelajarinya, sementara di domain umum ia hanya bingung di antara sekitar tiga kandidat.
Membaca Dua Arah Perubahan #
Dua baris berikutnya menunjukkan pertukaran yang khas pada fine-tuning dataset kecil:
| Model | ppl kopi-validasi | ppl umum | Penyesuaian domain | Kemampuan lama |
|---|---|---|---|---|
| beku | 8.66 | 2.96 | tidak ada | utuh |
| lora | 5.98 | 5.86 | turun 31 persen | naik 98 persen |
| full | 5.86 | 5.15 | turun 32 persen | naik 74 persen |
Kedua jalur berhasil menurunkan perplexity kopi hampir sama kuat (31 dan 32 persen), tetapi keduanya juga menaikkan perplexity umum — kemampuan lama tergeser karena delapan kalimat kopi terus-menerus menjadi satu-satunya sumber gradient selama 60 epoch. Fenomena tergesernya kemampuan lama ini dikenal sebagai catastrophic forgetting, dan pada korpus mini kita ia muncul dalam bentuk yang sangat terlihat. Jujur saja: pada skala ini full fine-tuning unggul di kedua ukuran sekaligus, sehingga keunggulan LoRA bukan pada angka ppl, melainkan pada biaya — 1764 parameter dilatih, bobot dasar tetap utuh sehingga adapter bisa dilepas atau ditukar tanpa menyentuh model dasar.
Perlu dicatat pula kejujuran desain evaluasinya. Dua kalimat validasi kopi tidak pernah menjadi sumber loss pada jalur mana pun; kosakata memang dibangun dari seluruh korpus, tetapi pada level karakter hal tersebut hanya berarti setiap huruf mendapat indeks tetap — pola kalimat validasi tidak pernah terlihat pelatihan. Pola pengaman semacam ini dibedah pada chapter Data Leakage .
Angka-angka ini juga menjadi titik awal eksperimen yang berharga karena seluruh jalur sudah deterministik. Naikkan rank menjadi 8 pada pemanggilan pasang_lora(dasar, r=8) dan lihat apakah ppl kopi turun lebih jauh dengan anggaran parameter yang masih jauh di bawah full fine-tuning. Campurkan beberapa jendela subset umum ke dalam data fine-tuning untuk meredam kenaikan ppl umum — teknik penyeimbangan data yang sederhana namun efektif. Terakhir, coba learning rate lebih kecil (misalnya 1e-3) pada siklus LoRA dan amati trade-off kecepatan penurunan loss. Catat setiap hasil sebagai tabel kecil seperti di atas; kebiasaan mencatat ini adalah versi manual dari experiment tracking yang dibahas pada chapter Experiment Tracking
.
Angka sudah bicara; tinggal satu pertanyaan: seperti apa wujud teks yang dihasilkan model yang ppl-nya 5.98 itu. Bagian penutup menjalankan inference greedy dan membaca perilaku kedua model secara langsung.