372 MB
3 files
Updated about 1 month ago
Name
Size
.gitattributes2.52 kB
xet
README.md6.55 kB
xet
output_kanun_tokensli.json372 MB
xet
README.md

📚 Veri Seti Hakkında

Veri seti, hukuk öğrencilerinden doktora seviyesindeki araştırmacılara kadar geniş bir kitleye hitap eden, kanun maddeleri ve mahkeme kararlarına atıfta bulunan zengin içerikli soru-cevap çiftlerinden oluşmaktadır.

1. Veri Toplama ve İşleme

  • Kaynaklar: 2025 yılının ilk çeyreğinde, Türkiye'nin önde gelen hukuk platformlarından olan ayboga.com.tr, barandogan.av.tr, kadimhukuk.com.tr, kalemci.av.tr, oner.av.tr, or.av.tr, sen.av.tr ve zulkufarslan.com.tr sitelerindeki tüm makaleler derlenmiştir.
  • Segmentasyon: Toplanan bu geniş metin arşivi, daha yönetilebilir ve işlenebilir olması amacıyla yaklaşık 285-300 adet .txt dosyasına bölünmüştür.

2. Soru-Cevap Üretimi (Data Generation)

  • Yapay Zeka Modeli: Her bir metin segmenti, Google AI Studio aracılığıyla gemini-2.5-pro modeline sunulmuştur.
  • Prompt Mühendisliği: Veri setinin kalitesini ve çeşitliliğini artırmak amacıyla, iki farklı seviyede ve hedef kitleye yönelik prompt'lar kullanılarak modelden JSON formatında çıktılar alınmıştır. Bu çıktılar, kanun maddesi ve mahkeme kararı referansları içerecek şekilde tasarlanmıştır.

Prompt 1 (Doktora Seviyesi):

"Bana, ekteki verilerden hukuk alanında doktora yapan öğrencilerin seviyesine uygun 200 adet sınav sorusu hazırla. Her soru-cevapta varsa ilgili kanun maddesine, ilgili mahkeme kararına atıfta bulun veya parantez içinde belirt ve aşağıdaki JSON formatında soru-cevap şeklinde sunulmalı:

[
  {"soru": "Soru metni burada yer alacak.", "cevap": "Cevap metni burada yer alacak, ilgili kanun maddeleri referans gösterilecek ve ayrıntılı açıklama yapılacak."},
  {"soru": "Soru metni burada yer alacak.", "cevap": "Cevap metni burada yer alacak, ilgili kanun maddeleri referans gösterilecek ve ayrıntılı açıklama yapılacak."}
]

Prompt 2 (Lisans Seviyesi):

"Bana, ekteki verilerden hukuk öğrencilerinin seviyesine uygun 200 adet sınav sorusu hazırla. Her soru-cevapta varsa ilgili kanun maddesine, ilgili mahkeme kararına atıfta bulun veya parantez içinde belirt ve aşağıdaki JSON formatında soru-cevap şeklinde sunulmalı:

[
  {"soru": "Soru metni burada yer alacak.", "cevap": "Cevap metni burada yer alacak, ilgili kanun maddeleri referans gösterilecek ve ayrıntılı açıklama yapılacak."},
  {"soru": "Soru metni burada yer alacak.", "cevap": "Cevap metni burada yer alacak, ilgili kanun maddeleri referans gösterilecek ve ayrıntılı açıklama yapılacak."}
]

🤖 Model Eğitimi (Fine-Tuning)

Oluşturulan bu zengin veri seti, google/gemma-3-1b-pt temel modelini fine-tune etmek için kullanılmıştır. Eğitim süreci, hyperbolic.ai üzerinden kiralanan H100 GPU'lar ve Unsloth kütüphanesinin sağladığı optimizasyonlar ile gerçekleştirilmiştir.

Teknik Detaylar ve Hiperparametreler

  • Temel Model (Base Model): google/gemma-3-1b-pt
  • Eğitim Kütüphaneleri: Unsloth, PyTorch, Transformers, TRL, Accelerate
  • Fine-Tuning Metodu: PEFT (Parameter-Efficient Fine-Tuning) - LoRA
  • Donanım: NVIDIA H100
  • Hassasiyet (Precision): BF16 (BFloat16)
  • Prompt Formatı: Alpaca

LoRA Konfigürasyonu:

  • r: 256
  • lora_alpha: 512
  • lora_dropout: 0.05
  • target_modules: ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"]

Eğitim Argümanları:

  • per_device_train_batch_size: 64
  • gradient_accumulation_steps: 2 (Efektif Batch Boyutu: 128)
  • optimizer: adamw_8bit
  • learning_rate: 2e-4
  • lr_scheduler_type: cosine
  • max_steps: ~1 epoch + 3500 adım (Early Stopping ile en iyi model seçildi)
  • early_stopping_patience: 3 (Değerlendirme kaybı 3 adımda iyileşmezse durdur)

Eğitim Kodunun Özeti

Aşağıda, model eğitim sürecinde kullanılan temel Python betiğinin basitleştirilmiş bir versiyonu bulunmaktadır. Bu kod, Unsloth kütüphanesi kullanılarak H100 GPU'larda verimli bir fine-tuning süreci gerçekleştirmektedir.

import os
import torch
from unsloth import FastLanguageModel
from datasets import load_dataset
from huggingface_hub import login
from trl import SFTTrainer
from transformers import TrainingArguments, EarlyStoppingCallback

# 1. Hugging Face'e Giriş
hf_token = "YOUR_HF_TOKEN"
login(token=hf_token)

# 2. Model ve Tokenizer'ı Unsloth ile Yükleme
model_id = "google/gemma-3-1b-pt"
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name=model_id,
    max_seq_length=2048,
    dtype=None,      # H100 için otomatik olarak bf16 seçilir
    load_in_4bit=False, # H100'de tam hassasiyet (bf16) kullanılır
)

# 3. Veri Setini Hazırlama
dataset = load_dataset("sinanelms/output_kanun_tokensli.json", split="train")
dataset_split = dataset.train_test_split(test_size=0.1, seed=42)
train_dataset = dataset_split["train"]
eval_dataset = dataset_split["test"]

# 4. PEFT LoRA Yapılandırması
model = FastLanguageModel.get_peft_model(
    model,
    r=256,
    lora_alpha=512,
    lora_dropout=0.05,
    bias="none",
    use_gradient_checkpointing="unsloth",
    target_modules=[
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj",
    ],
)

# 5. Eğitim Argümanlarını Belirleme
training_args = TrainingArguments(
    output_dir="gemma-3b-hukuk-unsloth-H100-optimized",
    per_device_train_batch_size=64,
    gradient_accumulation_steps=2,
    bf16=True,
    optim="adamw_8bit",
    max_steps=6031, # Örnek adım sayısı
    learning_rate=2e-4,
    lr_scheduler_type="cosine",
    eval_strategy="steps",
    eval_steps=200,
    save_strategy="steps",
    save_steps=200,
    load_best_model_at_end=True,
    metric_for_best_model="loss",
    greater_is_better=False,
    seed=3407,
)

# 6. SFTTrainer ile Eğitimi Başlatma
trainer = SFTTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
    dataset_text_field="text",
    max_seq_length=2048,
    args=training_args,
    callbacks=[EarlyStoppingCallback(early_stopping_patience=3)],
)

# Eğitimi başlat
trainer.train()

# Modeli kaydet ve Hugging Face Hub'a yükle
final_model_path = "sinanelms/Gemma3B-Hukuk-r256-a512-BF16-H100-v1.0"
trainer.model.push_to_hub(final_model_path, token=hf_token)
tokenizer.push_to_hub(final_model_path, token=hf_token)



---
license: mit
---
Total size
372 MB
Files
3
Last updated
Jun 4
Pre-warmed CDN
US EU US EU

Contributors