Faruq IndoLaw Alignment Models โ๏ธ๐ฎ๐ฉ
Koleksi checkpoint model dan LoRA adapters untuk penalaran hukum pidana Indonesia berbasis putusan tingkat pertama Mahkamah Agung Republik Indonesia. Proyek riset ini mengevaluasi adaptasi domain peradilan (Supervised Fine-Tuning) serta penyelarasan preferensi (Direct Preference Optimization vs Proximal Policy Optimization) untuk menghasilkan pertimbangan hukum (ratio decidendi) dan amar putusan (dictum) yang akurat, setia pada fakta persidangan, dan patuh pada asas pembuktian Pasal 184 KUHAP.
Repository ini diorganisasikan sebagai satu project induk bertingkat (multi-folder model repository), di mana setiap checkpoint, konfigurasi pelatihan, dan artefak evaluasi dikelompokkan ke dalam subdirektori masing-masing.
๐ Source Code & Research Repository: ADDI-LAW/faruq-project (GitHub)
๐ Struktur Direktori Model
| Subfolder | Arsitektur / Metode | Epochs / Steps | Eval Loss | Eval Token Acc | Status / Catatan |
|---|---|---|---|---|---|
models/sft-v2-5epoch |
Qwen2.5-1.5B + LoRA | 5.0 ep / 705 steps | 0.5520 | 87.45% | Canonical SFT (Recommended) โ Pertimbangan lengkap + Amar berbutir + Stop EOS |
models/sft-v2-1epoch |
Qwen2.5-1.5B + LoRA | 1.0 ep / 141 steps | 0.6757 | 81.41% | Baseline SFT 1-Epoch |
models/dpo-qwen25-1.5b |
DPO Alignment Policy | Upcoming | - | - | Tahap 2: DPO vs PPO comparative alignment |
models/ppo-qwen25-1.5b |
PPO Actor-Critic Policy | Upcoming | - | - | Tahap 2: DPO vs PPO comparative alignment |
models/reward-model |
Bradley-Terry Reward Model | Upcoming | - | - | Reward modeling untuk hukum pembuktian |
Setiap folder memuat:
adapter_model.safetensors&adapter_config.json(bobot LoRA)tokenizer.json,tokenizer_config.json,chat_template.jinjatraining_recipe.yaml(resep hiperparameter reproduksi lengkap)training_metrics.json(metrik loss dan akurasi per step)README.md(petunjuk pemakaian mandiri subfolder)
๐ Quickstart & Cara Penggunaan
Gunakan argumen subfolder saat memuat model dengan pustaka transformers dan peft:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base_model_id = "Qwen/Qwen2.5-1.5B"
repo_id = "ruwwww/faruq-alignment-models"
subfolder = "models/sft-v2-5epoch" # Pilih subfolder model yang diinginkan
# 1. Load Tokenizer & Base Model
tokenizer = AutoTokenizer.from_pretrained(repo_id, subfolder=subfolder)
base_model = AutoModelForCausalLM.from_pretrained(
base_model_id,
torch_dtype=torch.bfloat16 if torch.cuda.is_available() else torch.float32,
device_map="auto" if torch.cuda.is_available() else None,
)
# 2. Load LoRA Adapter dari Subfolder
model = PeftModel.from_pretrained(base_model, repo_id, subfolder=subfolder)
model.eval()
# 3. Format Kasus Hukum (ChatML)
messages = [
{
"role": "system",
"content": (
"Anda adalah asisten hukum Indonesia. Gunakan hanya dakwaan dan fakta persidangan yang diberikan. "
"Susun pertimbangan hukum yang ringkas dan amar putusan secara setia pada sumber."
),
},
{
"role": "user",
"content": (
"[SURAT DAKWAAN]\n"
"Bahwa terdakwa didakwa melanggar Pasal 362 KUHP tentang Pencurian karena telah mengambil "
"satu unit sepeda motor milik korban tanpa izin.\n\n"
"[FAKTA PERSIDANGAN & ALAT BUKTI]\n"
"Saksi menerangkan melihat terdakwa mendorong sepeda motor korban di malam hari. "
"Barang bukti berupa 1 unit sepeda motor dan kunci kontak diamankan. "
"Terdakwa mengakui perbuatannya di depan persidangan."
),
},
]
prompt = tokenizer.apply_chat_template(messages, add_generation_prompt=True, tokenize=False)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# 4. Generate Pertimbangan & Amar Putusan
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=512,
do_sample=False,
repetition_penalty=1.1,
eos_token_id=tokenizer.eos_token_id,
pad_token_id=tokenizer.pad_token_id,
)
output_text = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
print(output_text)
Atau jalankan skrip inferensi bawaan:
python scripts/infer.py --subfolder models/sft-v2-5epoch
๐ ๏ธ Konfigurasi Reproduksi & Pelatihan
Pelatihan dilakukan di atas GPU NVIDIA RTX 5060 Ti (16GB VRAM) menggunakan arsitektur SFT v2:
- Panjang Konteks: 4.096 token (mencegah pemotongan fakta dakwaan dan amar putusan)
- Token Budget: Prompt (Dakwaan + Fakta) maks 2.500 token, Completion (Pertimbangan + Amar) maks 1.500 token.
- Loss Masking: Completion-only loss masking presisi pada respon asisten setelah tag
<|im_start|>assistant\n. - Pembersihan Data: Normalisasi kontekstual token sintetis
_unk_OCR (pada nominal denda dan nomor seri) dan deduplikasi klaster identik untuk mencegah split data leakage. - LoRA Hyperparameters:
- Rank ($r$): 16, Alpha ($\alpha$): 32, Dropout: 0.05
- Target Modules:
[q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj] - Effective Batch Size: 8 (Batch Size 1 $\times$ Gradient Accumulation 8)
- Precision:
bfloat16+gradient_checkpointing
๐ Sitasi & Referensi
Jika menggunakan model atau dataset ini, silakan sitasi repositori riset induk:
@misc{faruq2026indolaw,
author = {Faruq and contributors},
title = {IndoLaw Alignment: Supervised Fine-Tuning and Preference Alignment on Indonesian Supreme Court Decisions},
year = {2026},
publisher = {GitHub},
howpublished = {\url{https://github.com/ADDI-LAW/faruq-project}}
}
Model tree for ruwwww/faruq-alignment-models
Base model
Qwen/Qwen2.5-1.5B