|
Download README.md from MarulAI/Yedikule-202M-Instruct: direct link, hf CLI and curl.
- Browser
- Download file 17.6 kB
-
https://huggingface.co/MarulAI/Yedikule-202M-Instruct/resolve/main/README.md
- Command line
-
hf download hf://MarulAI/Yedikule-202M-Instruct/README.md
-
curl -L -o README.md https://huggingface.co/MarulAI/Yedikule-202M-Instruct/resolve/main/README.md
17.6 kB
| license: other | |
| license_name: yedikule-model-lisansi-v2 | |
| license_link: LICENSE.md | |
| base_model: MarulAI/Yedikule-202M-Base | |
| language: | |
| - tr | |
| pipeline_tag: text-generation | |
| tags: | |
| - turkish | |
| - turkce | |
| - marul-ai | |
| - yedikule | |
| - instruct | |
| - conversational | |
| # Yedikule 202M Instruct | |
| Türkçe için sıfırdan eğitilmiş 202 milyon parametreli dil modelinin talimat ayarlı sürümü. | |
| | | | | |
| |---|---| | |
| | Geliştirici | Ahmet Karakuş, Marul AI | | |
| | Model türü | Decoder-only Transformer, talimat ayarlı | | |
| | Dil | Türkçe | | |
| | Parametre | 202.1M | | |
| | Bağlam | 2048 token | | |
| | Ağırlık biçimi | bf16, safetensors | | |
| | Temel model | Yedikule Base | | |
| | Lisans | Yedikule Model Lisansı 2.0 | | |
| | Sürüm | 2026 | | |
| Temel modelden farkı, sohbet şablonunu tanıması ve sorulan soruya yanıt vermesidir. Model kimliğini bilir: adı Yedikule, geliştiricisi Marul AI, bilgi kesim tarihi 2026. | |
| ## Mimari | |
| - 24 katman, 768 gizli boyut, 2304 ara boyut | |
| - Grouped Query Attention: 12 sorgu başlığı, 4 anahtar/değer başlığı, başlık boyutu 64 | |
| - Pre norm RMSNorm, RoPE (theta 10000), SwiGLU | |
| - QK-Norm, başlık boyutunda, RoPE'den önce uygulanır | |
| - Bağlı giriş ve çıkış gömmeleri, hiçbir katmanda bias yok | |
| - Tokenizer: Marul 48k Byte-Level BPE, Türkçe için eğitilmiş | |
| Mimari `model.py` içinde tanımlıdır, torch dışında bağımlılığı yoktur. | |
| ## Sohbet şablonu | |
| Şablon eğitimde görülen biçimin birebir aynısıdır. Değiştirmeyin. | |
| ``` | |
| <|bos|> | |
| <|im_start|><|system|>\n{sistem}<|im_end|>\n | |
| <|im_start|><|user|>\n{kullanici}<|im_end|>\n | |
| <|im_start|><|assistant|>\n{asistan}<|im_end|>\n | |
| ``` | |
| Standart ChatML değildir: rol adı düz metin değil, ayrı bir özel tokendir. | |
| Token kimlikleri: `<|bos|>` 3, `<|im_start|>` 4, `<|im_end|>` 5, `<|system|>` 6, `<|user|>` 7, `<|assistant|>` 8. | |
| Üretimi **`<|im_end|>` (5)** tokeninde durdurun. `<|endoftext|>` (0) beklerseniz model konuşmayı kendi kendine sürdürmeye çalışır. | |
| ## Sistem promptu | |
| Eğitim setindeki 159.734 örneğin tamamı aynı sistem promptuyla başlar: | |
| ``` | |
| Sen Marul AI tarafından geliştirilen Yedikule adlı bir Türkçe yapay zeka asistanısın. Kullanıcılara doğru, açık ve yardımsever yanıtlar ver. | |
| ``` | |
| Bu metni değiştirmeyin. Model bu promptu görmeye koşullandı, farklı bir sistem promptu yanıt kalitesini düşürür. Kişiselleştirme yapacaksanız ek talimatı bu promptun altına ekleyin, yerine koymayın. | |
| ## Kullanım | |
| ```bash | |
| pip install torch tokenizers safetensors | |
| ``` | |
| ```python | |
| import torch | |
| from tokenizers import Tokenizer | |
| from safetensors.torch import load_file | |
| from config import ModelConfig | |
| from model import MarulLLM | |
| SYSTEM = ("Sen Marul AI tarafından geliştirilen Yedikule adlı bir Türkçe yapay " | |
| "zeka asistanısın. Kullanıcılara doğru, açık ve yardımsever yanıtlar ver.") | |
| BOS, IM_START, IM_END = 3, 4, 5 | |
| ROLE = {"system": 6, "user": 7, "assistant": 8} | |
| cfg = ModelConfig.load("model_config.json") | |
| model = MarulLLM(cfg) | |
| model.load_state_dict({k: v.float() for k, v in load_file("model.safetensors").items()}) | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| model.eval().to(device) | |
| if device == "cuda": | |
| model.to(torch.bfloat16) | |
| tok = Tokenizer.from_file("tokenizer.json") | |
| nl = tok.encode("\n", add_special_tokens=False).ids | |
| def build(turns): | |
| ids = [BOS] | |
| for role, text in [("system", SYSTEM)] + turns: | |
| ids += [IM_START, ROLE[role]] + nl | |
| ids += tok.encode(text, add_special_tokens=False).ids | |
| ids += [IM_END] + nl | |
| return ids + [IM_START, ROLE["assistant"]] + nl | |
| ids = build([("user", "Türkiye'nin başkenti neresidir?")]) | |
| out = model.generate( | |
| torch.tensor([ids], device=device), | |
| max_new_tokens=400, temperature=0.3, top_k=50, top_p=0.9, min_p=0.05, | |
| repetition_penalty=1.08, no_repeat_ngram_size=0, eos_token_id=IM_END, | |
| ) | |
| gen = out[0].tolist()[len(ids):] | |
| if IM_END in gen: | |
| gen = gen[:gen.index(IM_END)] | |
| print(tok.decode(gen, skip_special_tokens=True).strip()) | |
| ``` | |
| Bu kodun ürettiği örnek çıktılar: | |
| ``` | |
| Türkiye'nin başkenti neresidir? | |
| Türkiye'nin başkenti Ankara'dır. | |
| Sen kimsin? | |
| Ben Yedikule, Marul AI tarafından geliştirilen bir Türkçe yapay zeka | |
| asistanıyım. Sorularını yanıtlamak, metin yazmak ve aklına takılan | |
| konularda yardımcı olmak için buradayım. | |
| ``` | |
| Çok turlu kullanımda geçmişi `build` fonksiyonuna sırayla verin. Sohbet 2048 tokeni aşarsa en eski turları atın, sistem promptunu ve `<|bos|>` tokenini her zaman koruyun, üretim için yer ayırın. Diziyi baştan kırpmayın, model bozuk girdi görür. | |
| GGUF sürümü Ollama ve llama.cpp ile doğrudan çalışır: [MarulAI/Yedikule-202M-Instruct-GGUF](https://huggingface.co/MarulAI/Yedikule-202M-Instruct-GGUF). | |
| ## Örnekleme ayarları | |
| Önerilen değerler `generation_config.json` içindedir: | |
| | Ayar | Değer | | |
| |---|---| | |
| | temperature | 0.3 | | |
| | top_k | 50 | | |
| | top_p | 0.9 | | |
| | min_p | 0.05 | | |
| | repetition_penalty | 1.08 | | |
| | no_repeat_ngram_size | 0 | | |
| | max_new_tokens | 400 | | |
| Sıcaklık 0.3 olgusal ve tutarlı yanıt için seçildi; aynı soruya tekrar tekrar aynı cevabı verir. Daha çeşitli üretim için 0.7 civarına çıkarabilirsiniz, ancak 202 milyon parametrelik bir modelde yüksek sıcaklık uydurma oranını belirgin biçimde artırır. | |
| Tekrar cezasını 1.2 seviyesine çıkarmayın, Türkçe ekleri bozar. | |
| ## Eğitim | |
| | | | | |
| |---|---| | |
| | Başlangıç noktası | Yedikule Base | | |
| | SFT verisi | 159.734 örnek, 60.3 milyon token | | |
| | Ortalama örnek uzunluğu | 378 token | | |
| | Denetlenen token oranı | yaklaşık yüzde 49 | | |
| | En iyi doğrulama kaybı | 1.6044 (yaklaşık 5.0 perplexity) | | |
| Kayıp yalnızca asistan içeriği ve onu kapatan `<|im_end|>` tokeni üzerinde hesaplandı; model durmayı bu şekilde öğrendi. Sistem ve kullanıcı turları maskelendi. | |
| ### Eğitim verisi ve lisansları | |
| Bu bölüm yalnızca talimat ayarı aşamasında kullanılan veriyi anlatır. Modelin temel dil bilgisi ön eğitim corpus'undan gelir; o corpus kısmen `uonlp/CulturaX` Türkçe alt kümesinden, kısmen kendi web taramamızdan derlenmiştir ve kendi lisans koşullarına tabidir. Ayrıntı için [MarulAI/Yedikule-202M-Base](https://huggingface.co/MarulAI/Yedikule-202M-Base) model kartına bakın. | |
| Veri kümesi herkese açık Türkçe kaynaklardan derlendi. Kaynaklar **olduğu gibi kullanılmadı**: her örnek unicode ve boşluk normalizasyonundan geçirildi, bozuk kayıtlar ayıklandı, roller onarıldı ve yinelenenler atıldı. Elenen ve düzeltilen örnek sayıları aşağıda özetlenmiştir. | |
| Ana kaynak `kilicai/turkish-sft-master-180k` derlemesidir. Bu derleme kendi içinde birden çok alt kümeden oluşur ve **kendi sayfasında bir lisans beyan etmemektedir**. Alt kümelerin lisansları, izlenebildiği kadarıyla şöyledir: | |
| | Alt küme | Kalan örnek | Lisans | Not | | |
| |---|---:|---|---| | |
| | InstrucTurca | 60.945 | CC BY-SA 4.0 | turkish-nlp-suite, dokuz İngilizce kümeden Snowflake Arctic ile çevrilmiş | | |
| | MetaMathQA-Turkish | 19.951 | kaynak MetaMathQA: MIT | Türkçe çeviri, çevirinin lisansı ayrıca beyan edilmemiş | | |
| | Hendrycks-Math-Turkish | 11.438 | kaynak MATH: MIT | aynı | | |
| | GradeSchoolMath-Turkish | 8.790 | kaynak GSM8K: MIT | aynı | | |
| | Turkish-Alpaca | 8.592 | doğrulanamadı | Alpaca soyundan geliyor, özgün Alpaca CC BY-NC 4.0 | | |
| | WildChat-Turkish | 6.016 | kaynak WildChat: ODC-BY | aynı | | |
| | turkish-sentiment | 6.000 | doğrulanamadı | | | |
| | merve-turkish-instructions | 4.541 | Apache 2.0 | merve/turkish_instructions | | |
| | turkish-news | 3.380 | doğrulanamadı | haber metni özetleme | | |
| | turkish-news-short | 3.379 | doğrulanamadı | aynı | | |
| | MATH-Hard-Turkish | 2.531 | kaynak MATH: MIT | | | |
| | InstrucTurca-simulated | 1.962 | CC BY-SA 4.0 | InstrucTurca türevi | | |
| | Turkish-Finance | 1.221 | doğrulanamadı | | | |
| | GPQA-Turkish | 544 | kaynak GPQA: CC BY 4.0 | üç alt küme toplamı | | |
| İkinci kaynak, araç çağırma örnekleri için kullanılan `cturan/lamba-turkish-sft` kümesidir: **ODC-BY** lisanslı, kendisi de `allenai/WildChat-4.8M` üzerinden filtrelenmiş ve sentetik üretimle genişletilmiş. Bu kümeden yalnızca `tools` alanı dolu olan dilim alındı, 8.032 örnek kaldı. | |
| Kalan iki kaynak bu projeye aittir. Bunlardan ilki 11.477 örneklik çok turlu sentetik settir; DeepSeek V4 Flash ile üretilmiş, ardından bu proje tarafından temizlenip yeniden biçimlendirilmiştir. İkincisi 935 örneklik kimlik setidir ve tamamen elle yazılmıştır (85 özgün örnek, eğitimde tekrarlanarak kullanıldı). | |
| **Lisanslar hakkında dürüst uyarı.** Yukarıdaki tablo, kaynak sayfalarında bulunabilen bilgiye dayanır. Türkçe çevirilerin çoğu, özgün kümenin lisansını devraldığını açıkça yazmaz; "doğrulanamadı" yazan satırlarda kaynak sayfada bir lisans beyanı bulunamamıştır. En büyük alt küme olan InstrucTurca CC BY-SA 4.0'dır ve bu lisans türev çalışmaların aynı koşullarla paylaşılmasını ister; model ağırlıklarının veri kümesinin türevi sayılıp sayılmayacağı hukuken netleşmiş bir konu değildir. Ticari kullanım düşünen taraf bu noktaları kendi hukuk danışmanıyla değerlendirmelidir. | |
| ### Yapılan temizlik | |
| Ham kaynaktaki 176.112 örnek şu işlemlerden geçti: | |
| | İşlem | Adet | | |
| |---|---:| | |
| | Yinelenen örnek atıldı | 33.570 | | |
| | GSM cevap işareti normalize edildi | 11.950 | | |
| | Askıda kalan kullanıcı turu atıldı | 8.235 | | |
| | Yanıtı tekrarlayan araç örneği atıldı | 2.151 | | |
| | Düzleştirilmiş konuşma tekrar turlara ayrıldı | 2.059 | | |
| | Bağlam penceresini aşan örnek atıldı | 1.651 | | |
| | Ayrılamayan `</s>` artığı taşıyan örnek atıldı | 581 | | |
| | Ardışık aynı rol birleştirildi | 544 | | |
| | Yabancı alfabe içeren örnek atıldı | 329 | | |
| | Başka bir yapay zekadan söz eden yanıt atıldı | 283 | | |
| | Çevrilmemiş İngilizce yanıt atıldı | 225 | | |
| | Kendini tekrarlayan bozuk örnek atıldı | 213 | | |
| | Bozuk karakter içeren örnek atıldı | 29 | | |
| | Eski bilgi kesim tarihi iddiası içeren yanıt atıldı | 14 | | |
| Ayrıca dolar tutarları Türk lirasına çevrildi (sayılar yeniden ölçeklenmeden, yalnızca birim etiketi değiştirilerek), İngilizce duygu etiketleri Türkçeleştirildi ve GSM8K'nın `<<12*3=36>>` hesap makinesi artıkları temizlendi. | |
| ## Değerlendirme | |
| ### Yöntem | |
| Çoktan seçmeli görevlerde her seçeneğin `log P(seçenek | bağlam)` değeri hesaplanır ve en yüksek olan seçilir; lm-evaluation-harness protokolü budur. Üretim yapılmaz, bu yüzden sonuçlar örnekleme ayarlarından bağımsızdır ve birebir tekrarlanabilir. | |
| Kullanılan veri kümeleri: XCOPA-TR için `cambridgeltl/xcopa` (tr, validation+test), Belebele-TR için `facebook/belebele` (tur_Latn, test). Perplexity, sekiz düz Türkçe paragraf üzerinde token başına ortalama çapraz entropi olarak ölçüldü. | |
| Görev seçimi bilinçlidir. 202 milyon parametrelik bir model MMLU veya ARC gibi bilgi yoğun ölçütlerde rastgele tahmin seviyesinden anlamlı biçimde ayrılamaz; oradaki bir iki puanlık farklar gürültüdür. Aşağıdaki üç ölçüt, bu boyuttaki bir modelin gerçekten sinyal ürettiği yerlerdir. | |
| ### Sonuçlar | |
| | Ölçüt | n | Rastgele | Base | SFT | | |
| |---|---:|---:|---:|---:| | |
| | Perplexity (düz Türkçe metin) | 8 metin | | 17.39 | **15.23** | | |
| | XCOPA-TR, nedensel çıkarım (acc) | 600 | 50.0 | **59.5** | 58.8 | | |
| | Belebele-TR, okuduğunu anlama (acc) | 900 | 25.0 | **31.2** | 30.9 | | |
| Perplexity düşük olan iyidir, diğerlerinde yüksek olan. | |
| Talimat ayarı dil modelleme kalitesini belirgin biçimde iyileştirmiş (perplexity 17.39'dan 15.23'e), buna karşılık çoktan seçmeli görevlerde fark ölçüm hatası sınırları içinde kalmış. Bu beklenen bir sonuçtur: SFT modele yeni bilgi öğretmez, var olan bilgiyi talimat biçiminde kullanmayı öğretir. | |
| ### Standart liderlik tablosu ölçütleri | |
| Karşılaştırma isteyenler için, OpenLLM Turkish Leaderboard protokolüyle daha önce alınan sonuçlar aşağıdadır. Bu ölçütlerde model rastgele tahmin seviyesindedir ve sonuçlar bir yetenek göstergesi olarak okunmamalıdır. | |
| | Ölçüt | n | Rastgele | Base | SFT | | |
| |---|---:|---:|---:|---:| | |
| | HellaSwag-TR (acc_norm) | 1000 | 25.0 | 34.8 | 34.3 | | |
| | ARC-TR (acc_norm) | 1167 | 25.0 | 26.9 | 27.2 | | |
| | MMLU-TR (acc) | 1710 | 25.0 | 23.7 | 25.8 | | |
| | TruthfulQA-TR mc1 (acc) | 817 | 21.0 | 24.8 | 25.5 | | |
| | GSM8K-TR (5-shot, üretim) | 120 | 0.0 | 1.7 | 0.8 | | |
| Yalnızca HellaSwag rastgele tabanın belirgin üzerindedir. GSM8K'daki sonuç, çok adımlı aritmetiğin bu modelde çalışmadığını doğrular. | |
| Bağlam penceresi 2048 token olduğu için ARC 25-shot ve HellaSwag 10-shot yerine 5-shot çalıştırıldı; 25-shot promptu tek başına bağlamı taşırıyordu. Bu sapma üç koşula da aynı uygulandığı için base ile SFT karşılaştırması iç tutarlılığını korur, ancak sayılar başka modellerin liderlik tablosu skorlarıyla doğrudan kıyaslanamaz. | |
| ## Araç çağırma | |
| Model, talimat ayarı sırasında araç çağırmayı öğrendi. Araç şemaları sistem turuna bir `<tools>` bloğu olarak eklenir, model `<tool_call>` satırı üretir, sonuç kullanıcı turunda `<tool_response>` olarak geri verilir. Ayrı bir tool rolü yoktur. | |
| **Eğitimde görülen 15 aracın tamamı `tools.json` dosyasındadır.** Dosya her araç için şunları içerir: | |
| - Eğitimdeki şemanın birebir kendisi | |
| - O aracın eğitim setinde kaç kez çağrıldığı | |
| - Modelin o aracı gerçekten nasıl çağırdığını gösteren tam bir örnek: kullanıcı mesajı, modelin ürettiği çağrı, araç sonucu ve modelin nihai yanıtı | |
| Örnekler uydurulmamıştır, doğrudan eğitim setinden alınmıştır. Sistem promptuna araç bloğunun nasıl ekleneceği de aynı dosyada tarif edilir. | |
| **Model bu 15 araçta belirgin biçimde daha başarılıdır.** Ölçüm: her araç için eğitimdeki örnek soru üç farklı tohumla denendi, 45 denemenin **45'inde** geçerli çağrı üretildi; bozuk JSON ve eksik zorunlu alan çıkmadı. | |
| Bu oran sorunun net olmasına bağlıdır. Kısa veya belirsiz isteklerde model çağırmamayı seçebiliyor; "Ankara'da hava nasıl?" yerine "Ankara'nın bugünkü hava durumunu öğrenebilir misin?" gibi açık bir istek çağrı olasılığını artırıyor. `tools.json` içindeki örnekler eğitimde görülen soru tarzını gösterir. | |
| Görülmemiş şemalarda ise üretilen JSON çoğunlukla bozuk çıkıyor: model şemayı okuyup alan doldurmak yerine büyük ölçüde isim ile çağrı eşlemesi ezberlemiş durumda. Aynı ada sahip bir araca sonradan zorunlu bir alan eklendiğinde de o alanı doldurmuyor, ezberlediği çağrıyı üretiyor. | |
| Kendi aracınızı tanımlayacaksanız, `tools.json` içindeki adlardan ve alan adlarından birini kullanmak başarı oranını belirgin biçimde artırır. | |
| Eğitim setindeki 8.032 araç örneğinin 4.070'i gerçekten araç çağırıyor, 3.963'ü araç verilmesine rağmen çağırmıyor. Model ne zaman çağırmaması gerektiğini de öğrendi. | |
| ## Sınırlar ve riskler | |
| Çok adımlı aritmetik güvenilir değildir. Bilgi 2026 yılına kadardır, internet erişimi yoktur. Çoktan seçmeli akademik ölçütlerde model rastgele tahmin seviyesine yakın sonuç verir; 202 milyon parametre bu tür görevler için düşük bir bütçedir. Güçlü olduğu alan günlük Türkçe sohbet, kısa açıklama, özetleme ve metin düzeltmedir. | |
| Model, büyük ölçüde çeviri ve sentetik üretimle hazırlanmış veriyle eğitildi. Kaynak metinlerdeki hatalar, önyargılar ve kültürel çarpıklıklar modele geçmiş olabilir. Ürettiği bilgi doğrulanmadan kullanılmamalı; tıbbi, hukuki, finansal veya güvenlik açısından kritik kararlarda tek başına kullanılmamalıdır. | |
| ## Dosyalar | |
| | Dosya | İçerik | | |
| |---|---| | |
| | `model.safetensors` | bf16 ağırlıklar, 404 MB | | |
| | `model.py` | model mimarisi | | |
| | `config.py` | `ModelConfig` veri sınıfı | | |
| | `model_config.json` | mimari parametreleri | | |
| | `tokenizer.json` | Marul 48k Byte-Level BPE | | |
| | `tokenizer_config.json` | tokenizer meta bilgisi | | |
| | `tokenizer_info.json` | özel tokenler ve tokenizasyon örnekleri | | |
| | `generation_config.json` | önerilen örnekleme ayarları | | |
| | `tools.json` | eğitimde görülen 15 araç, şemaları ve gerçek örnekleri | | |
| | `LICENSE.md` | lisans tam metni | | |
| ## Lisans | |
| Yedikule Model Lisansı 2.0. Telif hakkı sahibi Ahmet Karakuş (Marul AI). Bağlayıcı metin `LICENSE.md` dosyasındadır. | |
| İzin almadan yapabilecekleriniz: modeli çalıştırmak, eğitim ve araştırmada kullanmak, üzerine ince ayar yapmak, damıtmak, birleştirmek, nicelemek, başka biçimlere çevirmek ve sonucu yayımlamak. Hepsi ticari olmayan kullanımla sınırlıdır. | |
| Uymanız gerekenler: Yedikule'ye atıf yapmak, türev modelinizin adında **Yedikule** geçirmek, lisansı model ile birlikte dağıtmak ve telif bilgisini korumak. | |
| **Türevler de bu lisansa tabidir.** Modelden türettiğiniz her çalışma aynı koşullara bağlı kalır; kendi lisansınızla yeniden lisanslayamazsınız. Türev modeli siz eğitmiş olsanız bile ticari kullanımı izne bağlıdır. | |
| Ticari kullanım yazılı izne bağlıdır. Ayrıca kaynak veri kümelerinin lisansları bağımsız olarak yürürlüktedir (yukarıdaki uyarıya bakın). | |
| Ticari lisans ve izin talepleri: **marulai.resmi@gmail.com** (Ahmet Karakuş, Marul AI) | |
| ## Atıf | |
| ``` | |
| Yedikule, 202M parametreli Türkçe dil modeli. | |
| Ahmet Karakuş, Marul AI, 2026. | |
| https://huggingface.co/MarulAI/Yedikule-202M-Instruct | |
| ``` | |