--- base_model: unsloth/Llama-3.2-1B-Instruct-bnb-4bit tags: - text-generation-inference - transformers - unsloth - llama - trl license: apache-2.0 language: - en --- # Uploaded model - **Developed by:** srhskrkc - **License:** apache-2.0 - **Finetuned from model :** unsloth/Llama-3.2-1B-Instruct-bnb-4bit This llama model was trained 2x faster with [Unsloth](https://github.com/unslothai/unsloth) [](https://github.com/unslothai/unsloth)
Hafta 2.1 Ödev: Fine-Tune Edilen Modelin Benchmark Testine Sokulması ## ⎉ 🇹🇷 Türkçe MMLU Benchmark Karşılaştırması Modelin genel mantık yürütme ve Türkçe anlama kapasitesini ölçmek için Ali Bayram Hocanın Türkçe MMLU veri setinin 3.100 soruluk (yaklaşık %50'lik) kısmı üzerinde test yapılmıştır. | Model | Test Edilen Soru | Başarı Skoru | | :--- | :--- | :--- | | `unsloth/Llama-3.2-1B-Instruct-bnb-4bit` (Base Model) | 3,100 | %27.87 | | `srhskrkc/odysseia-llama-lora` (Fine-Tuned Model) | 3,100 | **%27.94** | **Sonuç Değerlendirmesi:** Yapılan LoRA fine-tuning işlemi (Odysseia verisi ile) modelde *Catastrophic Forgetting (Yıkıcı Unutma)* yaratmamış; aksine modelin genel çoktan seçmeli soru çözme başarısını koruyup ufak bir artış sağlamıştır.
⚡︎ ⌲ Kullanım (Inference) Kodu Bu LoRA adaptörünü kendi projelerinizde veya testlerinizde base model üzerine yükleyerek şu şekilde kullanabilirsiniz: ```python from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel import torch # 1. Base modeli ve tokenizer'ı yükleyin base_model_id = "unsloth/Llama-3.2-1B-Instruct-bnb-4bit" tokenizer = AutoTokenizer.from_pretrained(base_model_id) base_model = AutoModelForCausalLM.from_pretrained( base_model_id, torch_dtype=torch.float16, device_map="auto" ) # 2. LoRA adaptörünü base model üzerine entegre edin model = PeftModel.from_pretrained(base_model, "srhskrkc/odysseia-llama-lora") # 3. Test promptu oluşturun prompt = "Girdiğiniz metin veya soru buraya yazılır..." inputs = tokenizer(prompt, return_tensors="pt").to("cuda") outputs = model.generate(**inputs, max_new_tokens=128) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ```
▤ Tıklayın: MMLU Değerlendirme (Evaluation) Kodu Modelin başarı skorlarını (3.100 soru üzerinden) hesaplarken kullanılan MMLU benchmark test kodunun temel yapısı: ```python from unsloth import FastLanguageModel import pandas as pd import torch mmlu_veri = pd.read_parquet("hf://datasets/alibayram/yapay_zeka_turkce_mmlu_model_cevaplari/data/train-00000-of-00001.parquet") test_verisi = mmlu_veri.head(3100) # İlk 3.100 soru model_id = "srhskrkc/odysseia-llama-lora" model, tokenizer = FastLanguageModel.from_pretrained(model_name = model_id, max_seq_length = 2048, load_in_4bit = True) FastLanguageModel.for_inference(model) harfler = ['A', 'B', 'C', 'D', 'E'] dogru_cevap_sayisi = 0 for i in range(len(test_verisi)): soru_metni = test_verisi.iloc[i]['soru'] + "\n" secenekler = test_verisi.iloc[i]['secenekler'] dogru_harf = harfler[test_verisi.iloc[i]['cevap']] for j in range(len(secenekler)): soru_metni += harfler[j] + ": " + secenekler[j] + "\n" prompt = "Sana soru ve seçenekleri veriyorum. Sadece hangi seçeneğin sorunun doğru cevabı olduğunu yaz.\nSoru: " + soru_metni + "Cevap:" inputs = tokenizer([prompt], return_tensors="pt").to("cuda") outputs = model.generate(**inputs, max_new_tokens=5, pad_token_id=tokenizer.eos_token_id) cevap_metni = tokenizer.batch_decode(outputs, skip_special_tokens=True)[0] verilen_cevap = cevap_metni.split("Cevap:")[-1].strip().upper() if len(verilen_cevap) > 0 and verilen_cevap[0] == dogru_harf: dogru_cevap_sayisi += 1 print(f"Başarı Oranı: %{(dogru_cevap_sayisi / len(test_verisi)) * 100:.2f}") ```
## 🎛️ Eğitim Hiperparametreleri Model, kaynak optimizasyonu sağlamak adına Unsloth kütüphanesi ve LoRA (Low-Rank Adaptation) tekniği kullanılarak eğitilmiştir: | Parametre | Değer | | :--- | :--- | | **Max Sequence Length** | 2048 | | **LoRA R (Rank)** | 16 | | **LoRA Alpha** | 32 | | **Learning Rate** | 2e-4 | | **Optimizer** | AdamW 8-bit | | **Quantization** | 4-bit (BitsAndBytes NF4) | ## ⚛︎ Veri Seti ve Hazırlık Süreci Bu LoRA adaptörü, klasik MMLU veya hazır veri setleri yerine, tamamen özgün olarak derlenen **Odysseia Destanı Türkçe** veri seti ile eğitilmiştir. * **Veri Seti:** (https://huggingface.co/datasets/srhskrkc/odysseia-destani-tr) * **Tokenizer:** Metinlerin tokenizasyonu için hazır bir model kullanmak yerine, bu projeye özel olarak sıfırdan eğitilmiş BPE (Byte-Pair Encoding) tabanlı (https://huggingface.co/srhskrkc/odysseia-bpe-tokenizer) kullanılmıştır.
Hafta 2.2 Ödev: Özel Benchmark Oluşturma Ödevi ## ⌖ ⌬ Model Değerlendirmesi ve Benchmark Karşılaştırması Proje kapsamında geliştirilen `srhskrkc/odysseia-llama-lora` modeli, Homeros'un Odysseia destanındaki bağlamsal ilişkileri ölçmek amacıyla özel olarak hazırlanan **100 soruluk Odysseia Benchmark Veri Seti** üzerinde teste tabi tutulmuştur. Ödev yönergesi gereği, modelin başarısını kıyaslayabilmek adına aynı test (Zero-Shot formatında) 4 farklı açık kaynaklı temel model üzerinde daha uygulanmış ve sonuçlar aşağıda listelenmiştir. ### 🎚️ Test Sonuçları Tablosu | Model Adı | Parametre / Tür | Doğru Sayısı | Başarı Oranı | | :--- | :--- | :---: | :---: | | **Llama-3.2-3B-Instruct** | 3B (Temel Model) | 64 | %64.00 | | **srhskrkc/odysseia-llama-lora** | **Özel Fine-Tune** | **53** | **%53.00** | | **Mistral-7B-Instruct-v0.3** | 7B (Temel Model) | 27 | %27.00 | | **Gemma-3-1B-IT** | 1B (Temel Model) | 20 | %20.00 | | **Qwen2.5-1.5B-Instruct** | 1.5B (Temel Model) | 10 | %10.00 | **Sonuç Analizi:** 4 seçenekli (rastgele başarı ihtimali %25 olan) bu benchmark setinde test edilen temel modeller (Gemma, Mistral, Qwen) %10 ile %27 arasında sonuç vermiştir. Hedef alana özel olarak fine-tune edilen `srhskrkc/odysseia-llama-lora` modeli ise %53 başarı oranına ulaşmıştır. * **Benchmark Veri Seti:** (https://huggingface.co/datasets/srhskrkc/odysseia-benchmark) --- ### 🧬 Veri Seti Kalite Kontrol ve İnsan Doğrulama Süreci Benchmark veri setindeki 100 sorunun 10'u ödev yönergesi gereği tamamen manuel olarak, 90'ı ise LLM desteğiyle (sentetik olarak) üretilmiştir. Sentetik veriler üretildikten sonra doğrudan kabul edilmemiş, aşağıdaki **insan doğrulama (human-in-the-loop)** süreçlerinden geçirilerek kalite kontrolü sağlanmıştır: 1. **Halüsinasyon (Hallucination) Teyidi:** Sentetik olarak üretilen soruların cevapları, Odysseia destanının kaynak metinleriyle manuel olarak çapraz kontrole sokulmuş ve modelin uydurma yapmadığı doğrulanmıştır. 2. **Çeldirici (Distractor) Kalitesi ve Bias:** A, B, C, D seçeneklerindeki çeldirici şıkların mantıklı olması, soruyu çok kolaylaştıracak absürtlükte olmaması ve doğru cevapların dengeli dağılması manuel olarak sağlanmıştır. 3. **Format Standardizasyonu:** Soruların MMLU yapısına uygunluğu ve JSON alanlarının (question, choices, answer) regex ile tam uyumlu çalışacak şekilde temizlenmesi sağlanmıştır. ### 🌌 Tartışma: Dar Alan Öğrenmesi ve Catastrophic Forgetting Uygulanan ince ayar (fine-tuning) sonucunda modelin Odysseia Benchmark testinde %53 başarıya ulaşırken, Genel Türkçe MMLU testindeki başarısının taban modele kıyasla neredeyse aynı kalması (%27.87'den %27.94'e) bir dezavantaj değil, planlanan bir başarıdır: * Bu durum, modelin sadece dar alanda öğrenip genelleme yapamadığı şeklinde değil; aksine **Catastrophic Forgetting (Yıkıcı Unutma)** probleminin başarıyla engellendiği şeklinde yorumlanmalıdır. * Model, hedef bağlam olan Odysseia destanı üzerinde uzmanlaşırken, temel dil yeteneklerini ve genel dünya bilgisini (Genel MMLU) bozmamıştır. Uygulanan LoRA konfigürasyonu, temel modelin ağırlıklarını yıkmadan yeni bilgiyi entegre etmede başarılı olmuştur.