Setiap keputusan fine-tuning dimulai dari dua pilihan: model apa yang disesuaikan, dan data apa yang dipakai. LLM sungguhan bermiliar-miliar parameter dan tidak mungkin dilatih pada CPU dalam hitungan detik, jadi proyek ini memakai padanan konseptual: model bahasa mini level karakter dengan 27257 parameter. Struktur intinya meniru LLM — token masuk menjadi vektor embedding, diproses berlapis, lalu diproyeksikan kembali ke kosakata untuk memprediksi token berikut — persis pola yang dibahas pada chapter Pengenalan LLM . Dataset-nya pun meniru skenario nyata: korpus umum sebagai bahan pra-latih, lalu korpus domain kopi yang jauh lebih kecil sebagai bahan fine-tuning.
Membaca Korpus Tiga Subset #
Berkas data/korpus.txt memuat 30 kalimat bahasa Indonesia yang ditulis oleh skrip data/generate_data.py. Skrip tersebut deterministik: seluruh kalimat tersimpan sebagai daftar Python, sehingga menjalankan ulang skrip selalu menghasilkan berkas identik.
KORPUS_UMUM = [
"saya suka membaca buku setiap sore.",
"kami berjalan ke taman kota bersama.",
# ... 18 kalimat tema sehari-hari lainnya
]
KORPUS_KOPI_LATIH = [
"kopi hitam panas disajikan pagi hari.",
"barista menuang susu ke gelas kopi.",
# ... 6 kalimat domain kopi lainnya
]
KORPUS_KOPI_VALIDASI = [
"kopi panas dibuat dengan biji pilihan.",
"gelas kopi diletakkan di atas meja.",
]Jalankan skripnya dari folder proyek untuk memeriksa isi korpus:
python3 data/generate_data.pyOutput yang Dihasilkan:
korpus ditulis : korpus.txt
jumlah kalimat : 30
jumlah karakter : 1160
jumlah huruf unik : 26
karakter unik :
-.abcdefghijklmnoprstuwy
pembagian : 20 umum + 8 kopi latih + 2 kopi validasiBaris “karakter unik” memuat 26 tanda karena karakter baris baru ikut terhitung di berkas; kosakata model nanti berisi 25 token karena dibangun dari kalimat yang sudah dipisah per baris. Pemisahan tiga subset menjadi ketentuan proyek ini: 20 kalimat umum melatih model dasar, 8 kalimat kopi menjadi data fine-tuning, dan 2 kalimat kopi terakhir hanya dipakai untuk validasi — pola pembagian latih/validasi yang diulas pada chapter Pembagian Data Training, Validasi, dan Testing .
Kenapa Domain Kopi #
Domain kopi dipilih karena dua sifatnya yang cocok untuk demonstrasi. Pertama, kosakatanya sempit dan berulang — kata “kopi” muncul pada setiap kalimat subset — sehingga pergeseran perilaku model setelah fine-tuning terlihat jelas pada generasi teks di Bagian 5. Kedua, ukurannya sengaja kecil (8 kalimat latih) agar efek penyesuaian terjadi dalam 60 epoch tanpa menunggu lama; skenario dataset kecil inilah yang di dunia nyata menjadi alasan utama memakai LoRA alih-alih full fine-tuning, sebagaimana dibahas pada chapter Parameter-Efficient Fine-Tuning .
Anatomi Model Padanan Konseptual #
Model ModelBahasa di src/model_bahasa.py terdiri atas tiga komponen: nn.Embedding berdimensi 32, sel LSTM manual dengan state tersembunyi 64, dan kepala nn.Linear ke kosakata. Hasil pemeriksaan anatomi dari eksekusi python3 src/model_bahasa.py:
jumlah karakter kosakata : 25
karakter : -.abcdefghijklmnoprstuwy
dimensi embedding : 32
dimensi state tersembunyi: 64
parameter embedding : 800
parameter lstm.gab : 24576 + bias 256
parameter kepala : 1600 + bias 25
total parameter : 27257Dua angka layak dicermati. Lapisan lstm.gab menampung 24576 bobot karena satu nn.Linear gabungan menghitung keempat gerbang LSTM sekaligus — struktur gerbang input, forget, cell, dan output yang dibedah pada chapter Long Short-Term Memory
. Lapisan inilah yang nanti dibekukan dan diberi adapter LoRA, bersama kepala proyeksi, karena keduanya menyumbang 26457 dari 27257 parameter.
Model dan korpus kini sudah dikenal: 25 token karakter, 27257 parameter, tiga subset teks. Bagian berikutnya mengubah korpus tersebut menjadi jendela latih 32 token yang siap masuk training loop.