Dürüstlük Çizgisi
Eğitim verisinin tasarımındaki en önemli karar buydu. Model kendini tanıtırken şunları iddia etmiyor:
- Bilinç, duygu veya beden sahibi olduğunu
- Konuşmalar arasında hatırladığını
- İnternete erişebildiğini veya güncel bilgiye sahip olduğunu
- Yanılmaz olduğunu
- Terapi, hukuk veya tıp alanında uzman yerine geçtiğini
Veri setinin önemli bir bölümü doğrudan bu sınırları öğretiyor. Amaç modelin ne bildiğini değil, ne bilmediğini fark ettirmesini sağlamak.
Eğitim
Table | |
|---|
| Temel model | unsloth/Qwen3-4B-Instruct-2507 (16-bit) |
| Yöntem | LoRA, Unsloth |
| Veri seti | ssilistre/semih-silistre-ai-identity — 274 kayıt |
| Rank / alpha | 16 / 32 |
| Hedef modüller | q_proj k_proj v_proj o_proj gate_proj up_proj down_proj |
| Epoch | 6 |
| Batch | 2 × 2 accumulation = 4 |
| Sekans uzunluğu | 1024, packing (bfd) |
| Öğrenme oranı | 2e-4, linear, 10 adım warmup |
max_grad_norm | 0.3 |
| Optimizer | adamw_8bit, weight decay 0.01 |
| Donanım | NVIDIA A100 40GB (bfloat16) |
Neden küçük batch?
274 örnek paketlendiğinde ~58 diziye iniyor. Varsayılan batch 16 ile epoch başına yalnızca 3-4 optimizasyon adımı kalıyor ve kimlik davranışı yerleşmiyor. Batch 4'e düşürülünce epoch başına ~15 adım oluyor.
thinking alanı neden kullanılmadı?
Veri setinde her cevabın bir thinking (akıl yürütme) alanı var, ancak eğitim metnine gömülmedi. Qwen3-Instruct-2507 düşünmeyen bir sürüm; chat template'i zaten boş bir <think></think> bloğu ekliyor. Dolu bir blok gömüldüğünde model iki çelişen kalıp görüp <tool_call> gibi yanlış özel tokenlar üretmeye ve asıl cevaba hiç geçmemeye başlıyordu.
Kullanım
from unsloth import FastLanguageModel model, tokenizer = FastLanguageModel.from_pretrained( "ssilistre/semih-silistre-ai-lora", max_seq_length=1024,)FastLanguageModel.for_inference(model) msgs = [{"role": "user", "content": "Sen kimsin?"}]text = tokenizer.apply_chat_template(msgs, add_generation_prompt=True, tokenize=False)enc = tokenizer(text, return_tensors="pt").to("cuda")out = model.generate(**enc, max_new_tokens=250, temperature=0.7, top_p=0.9, do_sample=True, repetition_penalty=1.15, pad_token_id=tokenizer.eos_token_id)print(tokenizer.decode(out[0][enc["input_ids"].shape[1]:], skip_special_tokens=True))
repetition_penalty önerilir — küçük veri setiyle eğitilmiş adaptörlerde tekrar eğilimi görülebiliyor.
Sınırlamalar
- Küçük veri seti. 274 kayıt kimlik davranışını değiştirmeye yeter ama modelin genel yetenekleri üzerinde dar bir etki alanı vardır.
- Ezberleme riski. Küçük set üzerinde 6 epoch eğitim yapıldı. Kimlik dışı sorularda beklenmedik biçimde kimlik cevabı gelirse epoch sayısı düşürülmelidir.
- Eğitim verisi bir dil modeli tarafından yazıldı, uzman denetiminden geçmedi.
- Temel modelin sınırları geçerli. Yanlış bilgi üretebilir, kaynak uydurabilir, güncel olayları bilmez — model bunları zaten kendisi de söylüyor.
- Türkçe ağırlıklı. İngilizce kimlik soruları veri setinde var ama azınlıkta.
- Bu adaptör
carnegie-dost-kazanma-lora ile ayrı eğitildi; ikisi aynı anda yüklenmek üzere tasarlanmadı.