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
pip install torch tokenizers safetensors
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.
Ö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 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