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.jinja
  • training_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}}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for ruwwww/faruq-alignment-models

Finetuned
(414)
this model