Merhabalar, bu yazımda DeepSeek-R1 muhakeme modelini Türkçe için nasıl uyarladığımı anlatacağım. OpenAI’ın o1 modeli ile başlayan muhakeme devrimi [1], DeepSeek-R1’in açık kaynak olarak yayınlanmasıyla [2] artık herkese erişilebilir hale geldi.

Blogun içeriği :

  1. Sorun: Türkçe Muhakeme İzlerinin Eksikliği
  2. Çözüm: İki Aşamalı Eğitim
  3. Bu Yazıda Neler Var?
  4. 1. Muhakeme Modelleri ve DeepSeek-R1
    1. Klasik Düşünce Zinciri vs Uzun Muhakeme İzleri
    2. DeepSeek-R1’in Bilgi Damıtımı (Knowledge Distillation) Yaklaşımı
    3. Qwen3-8B: Güçlü Temel
  5. 2. Türkçe Uyarlama Zorlukları
    1. Veri Kıtlığı Sorunu
    2. Dil Tutarlılığı Sorunu
  6. 3. İki Aşamalı Eğitim Süreci
    1. 1. Aşama: Denetimli İnce Ayar (SFT)
      1. Veri Seti Hazırlama: Kaliteli Temelden Türkçe Muhakeme Veri Setine
      2. Eğitim Yapılandırması
    2. 2. Aşama: Grup Göreceli Politika Optimizasyonu (GRPO)
      1. GRPO vs PPO: Neden Değişim Gerekti?
      2. Matematik Veri Seti: GSM8K-TR
      3. Özel Ödül Fonksiyonları Tasarımı
      4. TÜDÜM Sistem Komutu
      5. GRPO Eğitim Optimizasyonları
  7. 4. Sonuçlar ve Değerlendirme
    1. GRPO Eğitim Süreci Analizi
    2. SFT vs GRPO Karşılaştırması
    3. Muhakeme Kalitesi İyileştirmeleri
  8. 5. Model Paylaşımı: TÜDÜM v0.1
    1. Hugging Face Entegrasyonu
    2. Sistem Gereksinimleri
    3. Kullanım Örneği (transformers)
  9. 6. Topluluk Katkısı ve Gelecek Planları
    1. Açık Kaynak Katkıları
    2. Gelecek Çalışmalar
  10. Sonuç
  11. Kaynaklar

Sorun: Türkçe Muhakeme İzlerinin Eksikliği

Mevcut muhakeme modelleri Türkçe sorulara cevap verebilseler de düşünce süreçlerini genellikle İngilizce üretiyorlar. Bu hem modelin düşünme biçimini anlayabilmemizi engelliyor hem de Türkçe kullanıcılar için optimal olmayan bir deneyim yaratıyor.

Çözüm: İki Aşamalı Eğitim

Bu projede DeepSeek-R1-0528-Qwen3-8B modelini temel alarak:

  1. Denetimli İnce Ayar (SFT) ile Türkçe veri setinde eğitim
  2. Grup Göreceli Politika Optimizasyonu (GRPO) [3] ile muhakeme kalitesini artırma

Sonuçta ortaya TÜDÜM çıktı: TÜrkçe Düşünen Üretken Model.

Bu Yazıda Neler Var?

  • Muhakeme modellerinin Türkçe uyarlama zorlukları
  • İki aşamalı eğitim sürecinin detayları
  • Özel ödül fonksiyonları tasarımı
  • Sonuçlar ve topluluk ile paylaşım

Hazırsanız başlayalım!

1. Muhakeme Modelleri ve DeepSeek-R1

Klasik Düşünce Zinciri vs Uzun Muhakeme İzleri

Geleneksel dil modelleri sorulara hızla cevap verirken, muhakeme modelleri tamamen farklı bir yaklaşım benimsiyor. Bu modeller soruyu aldıktan sonra önce uzun uzun “düşünüyor” ve sonra final cevabını veriyor.

Klasik düşünce zinciri (Chain of Thought) [4] kısa ve insan tarafından okunabilir açıklamalar sunarken, uzun muhakeme izleri binlerce kelimelik detaylı düşünce süreçleri içeriyor. DeepSeek-R1 gibi modellerde bu süreç <think>...</think> etiketleri arasında gerçekleşiyor [2].

DeepSeek-R1’in Bilgi Damıtımı (Knowledge Distillation) Yaklaşımı

DeepSeek-R1-0528-Qwen3-8B, 671 milyar parametreli dev modelin bilgisinin 8 milyar parametreli Qwen3 modeline aktarılmasıyla elde edilmiş [2]. Bu damıtma süreci, denetimli ince ayar (SFT) yöntemiyle gerçekleştirilmiştir:

Damıtma Süreci:

  1. Öğretmen Model Çıktıları: Büyük DeepSeek-R1 modeli çeşitli sorulara detaylı muhakeme izleri (<think>...</think>) ile cevaplar üretir
  2. SFT Veri Seti Oluşturma: Bu çıktılar, küçük modelin eğitimi için instruction-response çiftleri haline getirilir
  3. Pattern Transfer: Küçük model, büyük modelin muhakeme desenlerini ve düşünce yapısını öğrenir
  4. Performans Korunması: 671B parametreli modelin reasoning yetenekleri 8B modele başarıyla aktarılır

Sonuçlar:

  • Erişilebilir boyut: Tek grafik kartında veya Apple Silicon işlemcilerinde çalışabilir
  • Güçlü performans: AIME 2024’te Qwen3-8B’yi %10 geçerek Qwen3-235B-thinking ile eşit performans
  • Açık kaynak avantajı: MIT lisansı ile ticari kullanıma uygun

Bu yaklaşım, büyük modellerin reasoning yeteneklerinin küçük modellere aktarılabileceğini kanıtlamış ve açık kaynak topluluğu için erişilebilir muhakeme modelleri geliştirme yolunu açmıştır.

Qwen3-8B: Güçlü Temel

Qwen3-8B’nin seçilmesinin önemli nedenleri var [5]:

Çok Dilli Yetenek: 119 dil ve lehçe desteği ile güçlü Türkçe temeli
Geniş Bağlam: 128K token bağlam penceresi (context length) Verimli Eğitim: 36 trilyon token ile kapsamlı eğitim süreci
Lisans: Apache-2.0 lisansı ile ticari kullanıma uygun

2. Türkçe Uyarlama Zorlukları

Veri Kıtlığı Sorunu

Türkçe muhakeme verileri İngilizce’ye kıyasla son derece sınırlı. Bu durum iki temel soruna yol açıyor:

Kaliteli Muhakeme Örneklerinin Azlığı: Mevcut Türkçe veri setlerinin çoğu basit soru-cevap formatında, detaylı muhakeme izleri içermiyor.

Etki Alanı Çeşitliliği Eksikliği: Matematik, fizik, kimya gibi farklı alanlarda Türkçe muhakeme örnekleri bulmak oldukça zor.

Dil Tutarlılığı Sorunu

Güncel muhakeme modellerinde ciddi bir sorun var: dil karışımı. Araştırmalarım sonucunda:

Tam Türkçe Düşünemeyen Modeller: Birçok muhakeme modeli Türkçe soru alsa bile düşünce sürecini tamamen İngilizce yürütüyor.

Karışık Dil Kullanımı: Modellerin çoğu düşünce izlerinde Türkçe-İngilizce karışık ifadeler kullanıyor. Örneğin:

<think>
Bu problem için önce calculation yapalım. 
Let me think step by step burada...
Sonuç olarak cevap şu olacak: the answer is...
</think>

Tutarsız Terminoloji: Aynı model bazen “hesaplama” bazen “calculation” diyor, bu da kullanıcı deneyimini olumsuz etkiliyor.

Bu sorunları çözebilmek için özel ödül fonksiyonları tasarladım ve iki aşamalı eğitim süreci uyguladım.

3. İki Aşamalı Eğitim Süreci

1. Aşama: Denetimli İnce Ayar (SFT)

Veri Seti Hazırlama: Kaliteli Temelden Türkçe Muhakeme Veri Setine

Bu projenin en kritik adımlarından biri kaliteli bir Türkçe muhakeme veri seti hazırlamaktı. Hali hazırda Türkçe muhakeme izleri oluşturabilen bir modelimiz var (DeepSeek-R1-0508) bize sadece bu modelin bilgisini damıtabileceği bir kaliteli Türkçe talimat (prompt) seti lazım. Bu amaçla FineTome-100k veri setini temel aldım.

FineTome-100k Neden Özel?

FineTome-100k, mlabonne tarafından oluşturulmuş özenle seçilmiş bir veri setidir [6]. Bu veri seti:

  • Yüksek Kalite: HuggingFaceFW/fineweb-edu-classifier ile eğitim kalitesi açısından filtrelenmiş
  • Geniş Çeşitlilik: Farklı alanlardan (matematik, bilim, dil, kod) örnekler içeriyor

Veri Seti Dönüşüm Süreci:

  1. Stratified Örnekleme: FineTome-100k’dan konulara göre dengeli şekilde 5K örnek seçtim
  2. Türkçe Çeviri: o4-mini ile profesyonel kalitede çeviri yapıldı
  3. Muhakeme İzi Üretimi: DeepSeek-R1-0508 ile Türkçe düşünce süreçleri oluşturdum

Sonuç Veri Seti: barandinho/OpenTurkishDiverseReasoning-5k

Veri setinden bir örnek:

Soru: Kokleanın yapısı, farklı ses frekanslarını algılayabilme yetimize nasıl katkıda bulunur?

Cevap: <think>
Kullanıcı, kokleanın yapısının ses frekanslarını nasıl algılamamıza yardımcı olduğunu soruyor. Koklea, iç kulağımızda bulunan ve sesi işlemekten sorumlu salyangoz şeklindeki bir yapıdır. Ses dalgaları orta kulaktan geçerek kokleaya ulaşır ve burada sıvı titreşimleri oluşturur.

Kokleanın içi, baziler membran adı verilen bir yapıyla bölünmüştür. Bu membran, kokleanın tabanında dar ve sert, tepesinde ise geniş ve daha esnektir. Bu fiziksel özellikler, farklı frekansların farklı bölgelerde rezonansa girmesine neden olur. Yüksek frekanslı sesler (yüksek perdeler) tabanı titreştirirken, düşük frekanslı sesler (düşük perdeler) tepeyi titreştirir.

Bu mekanik titreşimler, baziler membran üzerinde oturan saç hücrelerini uyarır. Saç hücreleri, hareket ettiklerinde sinir sinyalleri üretir. Her saç hücresi grubu belirli bir frekansa en duyarlıdır, böylece koklea boyunca bir "frekans haritası" oluşur. Beyin, bu sinyalleri işleyerek sesin perdesini yorumlar.

Bu sürece "yer teorisi" denir, çünkü frekansın algılanması, kokleadaki konuma bağlıdır. Kokleanın yapısı, fiziksel özellikleri sayesinde sesi bileşen frekanslarına ayırır ve her bir frekans için özelleşmiş sinir hücreleri aracılığıyla kodlar.

Özetle, kokleanın şekli ve baziler membranın değişken özellikleri, farklı ses frekanslarının farklı bölgelerde işlenmesini sağlar. Bu da frekans ayrımı ve ses algısı için kritik öneme sahiptir.
</think>
Koklea, iç kulakta ses işlemeyi sağlayan salyangoz şeklinde bir yapıdır. Ses dalgaları koklea içindeki sıvıyı titreştirir ve bu titreşimler **baziler membran** adı verilen esnek bir zar boyunca yayılır. Baziler membranın fiziksel özellikleri (tabanda dar/sert, tepede geniş/esnek) frekans ayrımının temelini oluşturur:
- **Yüksek frekanslar** (örneğin tiz sesler) membranın **sert taban kısmında** maksimum titreşim oluşturur.
- **Düşük frekanslar** (örneğin bas sesler) membranın **esnek tepe kısmında** maksimum titreşim oluşturur.

Bu titreşimler, membran üzerindeki **saç hücrelerini** mekanik olarak uyarır. Uyarılan saç hücreleri, elektriksel sinyalleri işitme siniri yoluyla beyne iletir. Koklea boyunca her bölge belirli bir frekans aralığına duyarlıdır ("tonotopik organizasyon"). Bu yapısal özellikler, beynin sesin perdesini (frekansını) konuma dayalı olarak kodlamasına ve ayırt etmesine olanak tanır.

Eğitim Yapılandırması

Model eğitimi için aşağıdaki ayarları kullandım:

# Temel model yükleme
MODEL_ID = "deepseek-ai/DeepSeek-R1-0528-Qwen3-8B"
model = AutoModelForCausalLM.from_pretrained(
    MODEL_ID,
    attn_implementation="flash_attention_2",
    torch_dtype=torch.bfloat16,
    device_map="auto"
)

# SFT eğitim parametreleri
args = SFTConfig(
    max_steps=300,
    per_device_train_batch_size=16,
    gradient_accumulation_steps=2,
    learning_rate=2e-5,
    bf16=True,
    gradient_checkpointing=True,
    optim="adamw_torch_fused"
)

Kritik Optimizasyonlar:

  • Flash Attention 2 [7]: Bellek verimliliği için
  • bfloat16 Precision: Kararlı eğitim ve hız artışı
  • Gradient Checkpointing: Bellek tasarrufu
  • AdamW Fused: Optimize edilmiş optimizer

2. Aşama: Grup Göreceli Politika Optimizasyonu (GRPO)

GRPO vs PPO: Neden Değişim Gerekti?

Geleneksel PPO algoritması muhakeme modeli eğitiminde bazı sorunlara yol açıyor [8]. GRPO’nun PPO’ya göre avantajlarını anlamak için aşağıdaki mimari karşılaştırmasına bakabiliriz:

PPO Açıklaması: PPO (Proximal Policy Optimization), ödül modelinden gelen geri bildirimle ajanı güncelleyen popüler bir pekiştirmeli öğrenme algoritmasıdır. Bu yapıda, model bir “generating policy” ile yanıtlar üretir, bir “reference policy” ile mevcut politikadan sapmayı ölçer ve bir “value model” ile her yanıtın beklenen ödülünü tahmin eder. Ödül modeli, insan tercihleri veya başka bir değerlendirme mekanizmasıyla yanıtları puanlar. Politika güncellemeleri, hem ödül hem de referans politikadan sapma (KL divergence) dikkate alınarak yapılır.

PPO’nun Sorunları:

  • Yüksek Bellek Kullanımı: Ayrı value function modeli gerektirir
  • Karmaşık Mimari: Actor, Critic, Reference ve Reward olmak üzere 4 ayrı model
  • Kararsızlık: Büyük politika güncellemeleri sırasında dengesizlik

GRPO Açıklaması: GRPO (Group Regularized Policy Optimization), PPO’nun karmaşıklığını ve bellek gereksinimini azaltmak için geliştirilmiş yeni bir algoritmadır. GRPO’da, value function tamamen kaldırılır ve bunun yerine aynı soruya verilen çoklu yanıtların ortalaması üzerinden avantaj hesaplanır. Ödül doğrudan “ground truth” (doğru/yanlış) üzerinden verilir. KL divergence (politikadan sapma) ise doğrudan loss fonksiyonuna entegre edilerek, ayrı bir referans modeliyle karmaşık hesaplamalara gerek kalmaz. Bu sayede hem mimari sadeleşir hem de bellek kullanımı ciddi oranda azalır.

GRPO’nun Yenilikleri [3]:

  • %50 Bellek Tasarrufu: Value function eliminasyonu
  • Grup Tabanlı Avantaj Hesabı: Aynı soruda çoklu yanıt üretip ortalama üzerinden hesaplama
  • Doğrudan KL Divergence: Loss function’a entegre penaltı sistemi

Matematik Veri Seti: GSM8K-TR

GRPO eğitimi için Türkçe matematik problemleri içeren GSM8K-TR veri setini kullandım [9]. Bu veri seti:

  • İlkokul-Ortaokul Seviyesi Matematik: Basit aritmetik işlemlerden kelime problemlerine
  • Türkçe Çeviri: Orijinal GSM8K’nın kaliteli Türkçe çevirisi
  • Doğrulanabilir Cevaplar: Her problemin kesin sayısal cevabı mevcut
  • Muhakeme Uygun: Adım adım çözüm gerektiren problem türleri

Özel Ödül Fonksiyonları Tasarımı

GRPO’nun gücü ödül fonksiyonlarında yatıyor. Bu proje için 4 özel fonksiyon tasarladım:

1. Format Kontrolü:

def match_format_exactly(completions, **kwargs):
    # <think>...</think> formatının tam kontrolü
    score = 3.0 if correct_format else 0.0

2. Türkçe Tutarlılık Ödülü:

def turkish_consistency_reward(completions, **kwargs):
    # Hem düşünce hem cevap kısmında Türkçe tutarlılığını kontrol
    answer_lang = get_lang_consistent(answer_part)
    thinking_lang = get_lang_consistent(thinking_part)
    
    score = 0.0
    if answer_lang == "tr": score += 1.5
    if thinking_lang == "tr": score += 0.5

3. Matematik Doğruluğu:

def check_answer_math_verify(prompts, completions, answer, **kwargs):
    # math_verify kütüphanesi ile otomatik doğrulama

TÜDÜM Sistem Komutu

Modelin kimliğini belirlemek için özel bir sistem komutu oluşturdum:

Sen TÜDÜM (TÜrkçe Düşünen Üretken Model) isimli yardımsever bir yapay zeka modelisin.
Türkçe cevap ver ve cevabını tamamla.

GRPO Eğitim Optimizasyonları

# GRPO yapılandırması
training_args = GRPOConfig(
    learning_rate=5e-6,  # SFT'den daha düşük
    num_generations=4,   # Grup büyüklüğü
    temperature=0.6,     # DeepSeek'in önerdiği değer
    top_p=0.95,
    use_vllm=True,       # Hız optimizasyonu
    vllm_gpu_memory_utilization=0.25,
    use_liger_loss=True  # Bellek optimizasyonu
)

4. Sonuçlar ve Değerlendirme

GRPO Eğitim Süreci Analizi

GRPO eğitimi boyunca ödül fonksiyonlarının performansını izledim. 1000 adımlık eğitim sürecinde:

Türkçe Tutarlılık Ödülü: 2.0 seviyesinde kararlı bir performans gösterdi, bu da modelin Türkçe düşünmeyi öğrendiğini gösteriyor.

Format Kontrolü: 2.5 civarında dalgalı ama genel olarak artan bir trend gözlemlendi.

Matematik Doğruluğu: 2.0 civarında değişken bir performans, matematik problemlerinin zorluğunu yansıtıyor.

Genel Ödül Skoru: 7-8 arasında sürekli artış trendi, modelin genel performansının iyileştiğini gösteriyor.

SFT vs GRPO Karşılaştırması

Aynı soruya verilen cevapları karşılaştırdığımızda GRPO’nun etkisi görülüyor:

Soru: “lollapalooza kelimesinde kaç tane l harfi vardır?”

Sadece SFT Sonrası:

<think>
Hmm, kullanıcı "lollapalooza" kelimesinde kaç tane "l" harfi olduğunu soruyor. Bu oldukça basit bir kelime oyunu gibi görünüyor. 

Öncelikle kelimeyi yazıp harfleri bir bir kontrol etmeliyim. "L-O-L-L-A-P-A-L-O-O-Z-A" şeklinde yazdım. Şimdi her harfi saymaya başlayayım:

İlk harf "L" - bir tane
İkinci harf "O" - değil
Üçüncü harf "L" - ikinci tane
Dördüncü harf "L" - üçüncü tane
Beşinci harf "A" - değil
Altıncı harf "P" - değil
Yedinci harf "A" - değil
Sekizinci harf "L" - dördüncü tane
Dokuzuncu harf "O" - değil
Onuncu harf "O" - değil
On birinci harf "Z" - değil
On ikinci harf "A" - değil

Toplamda dört tane "L" harfi var. 

Kullanıcının bu soruyu sorması muhtemelen kelime oyunu oynamak veya basit bir test yapmak için. Belki de çocuklukta oynadığı bir oyun hatırlıyor olabilir. 

Cevabı net ve doğru bir şekilde vermeliyim. "Lollapalooza" kelimesinin bu kadar sık "L" harfi içerdiğini bilmiyordum ama şimdi saydım. 

Sonuç olarak cevap 4 olacak. Kullanıcıya basit ve anlaşılır bir şekilde bu sonucu sunmalıyım.
</think>

"lollapalooza" kelimesinde **4** tane "l" harfi vardır.

GRPO Sonrası (TÜDÜM):

<think>
Kullanıcı "lollapalooza" kelimesinde kaç tane "l" harfi olduğunu soruyor. Önce kelimeyi yazıp harflerini saymalıyım.

Kelime: l-o-l-l-a-p-a-l-o-o-z-a

Şimdi her harfi kontrol edelim:
- İlk harf: l → bir l
- İkinci harf: o → değil
- Üçüncü harf: l → ikinci l
- Dördüncü harf: l → üçüncü l
- Beşinci harf: a → değil
- Altıncı harf: p → değil
- Yedinci harf: a → değil
- Sekizinci harf: l → dördüncü l
- Dokuzuncu harf: o → değil
- Onuncu harf: o → değil
- On birinci harf: z → değil
- On ikinci harf: a → değil

Yani l harfleri: 1. pozisyonda, 3. pozisyonda, 4. pozisyonda, 8. pozisyonda.
Toplam 4 tane.

Daha kolay bir yöntem: kelimeyi yazıp l'leri işaretleyerek sayabilirim.
l o l l a p a l o o z a
İlk l, üçüncü l, dördüncü l, sekizinci l → 4 tane.

Kelimeyi bilgisayarda saydıramam ama mantıken zaten 4. Şimdi cevap 4.
Kullanıcıya cevap olarak 4 demeliyim.

Düşünce sürecimde zaten hesapladım, şimdi özet kısmına geçeyim.
Özet: "lollapalooza" kelimesinde 4 tane "l" harfi vardır.
</think>

"lollapalooza" kelimesinde toplam 4 tane "l" harfi bulunmaktadır.

GRPO sonrası modelin düşünce süreci daha yapılandırılmış, odaklı ve Türkçe tutarlılığı korunmuş durumda.

Muhakeme Kalitesi İyileştirmeleri

GRPO eğitimi sonrasında modelde gözlemlenen iyileştirmeler:

  1. Daha Yapılandırılmış Düşünce: Problemleri adım adım çözüme kavuşturma
  2. Türkçe Tutarlılık: Hem düşünce hem cevap kısmında tam Türkçe kullanım
  3. Format Uyumu: <think>...</think> etiketlerinin doğru kullanımı
  4. Gereksiz Detaylardan Kaçınma: Odaklı ve verimli muhakeme süreçleri

5. Model Paylaşımı: TÜDÜM v0.1

Hugging Face Entegrasyonu

TÜDÜM modelini HuggingFace’den indirip deneyebilirsiniz:

Modeli Python içinde kullanmak ve serverda çalıştırmak için:

Ana Model: barandinho/TDM-8b-v0.1

  • Format: bfloat16 precision
  • Boyut: 17 GB
  • VRAM Gereksinimi: 16 GB (bitsandbytes kütüphanesiyle quantize edebilirsiniz)

Modeli yerel olarak LMStudio(önerilen) veya Ollama vs. gibi LLM çalıştırıcılarında kendi bilgisayarınızda kullanmak için:

GGUF Versiyonu: barandinho/TDM-8b-v0.1-Q8_0-GGUF

  • Format: 8-bit quantized
  • Boyut: 9 GB
  • VRAM Gereksinimi: 8 GB

Sistem Gereksinimleri

Minimum Donanım:

  • GGUF Versiyonu: 8 GB VRAM (RTX 3070, RTX 4060 Ti 16GB vs. veya Apple M-Serisi İşlemcileri)
  • bfloat16 Versiyonu: 16 GB VRAM (RTX 4080, RTX 4090, L4, A100)

Önerilen Kullanım:

  • Yerel Kullanım: LM Studio
  • Entegrasyon: Transformers kütüphanesi ile doğrudan kullanım
  • API: vLLM veya SGLang ile sunucu kurulum

Kullanım Örneği (transformers)

Kullanım sırasında sınırsız düşünme ve kendini tekrarlama gibi problemlerin önüne geçmek için lütfen önerilen parametrelerle modeli deneyiniz:

  • temperature=0.6
  • top_p=0.95
  • do_sample=True
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer

MODEL_ID = "barandinho/TDM-8b-v0.1"

model = AutoModelForCausalLM.from_pretrained(
    MODEL_ID, 
    torch_dtype="auto", 
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)

SYSTEM_PROMPT = """Sen TÜDÜM (TÜrkçe Düşünen Üretken Model) isimli yardımsever bir yapay zeka modelisin.
Türkçe cevap ver ve cevabını tamamla."""

messages = [
    {"role": "system", "content": SYSTEM_PROMPT},
    {"role": "user", "content": "101'in karekökü nedir?"}
]

streamer = TextStreamer(tokenizer, skip_prompt=True)

text = tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True,
    )

model_inputs = tokenizer([text], return_tensors="pt").to(model.device)

generated_ids = model.generate(
        **model_inputs, 
        max_new_tokens=16384, 
        temperature=0.6, 
        top_p=0.95,
        do_sample=True,
        streamer=streamer
    ) 
# NOT : streamer kullanmıyorsanız tokenizer ile generated_ids'i decode edip print ile ekrana bastırabilirsiniz.

6. Topluluk Katkısı ve Gelecek Planları

Açık Kaynak Katkıları

Bu proje kapsamında toplulukla paylaştığım kaynaklar:

  1. Veri Seti: barandinho/OpenTurkishDiverseReasoning-5k - Türkçe muhakeme örnekleri
  2. Eğitim Kodları: SFT ve GRPO eğitim notebook’ları
  3. Model Ağırlıkları: Hem bfloat16 hem GGUF formatlarında
  4. Özel Ödül Fonksiyonları: Türkçe tutarlılık kontrolü için yeniden kullanılabilir kod

Gelecek Çalışmalar

TÜDÜM modelini geliştirmek için planlanan adımlar:

Daha Büyük SFT: Mevcut 5K örnekten 20-50K’ya çıkarak veri çeşitliliğini artırmak
Daha Kapsamlı GRPO: Daha zorlu matematik problemlerinde, kodlama problemlerinde GRPO eğitimi

Sonuç

TÜDÜM projesi, muhakeme modellerinin Türkçe için nasıl uyarlanabileceğini gösteren bir çalışma oldu. İki aşamalı eğitim süreci (SFT + GRPO) ve özel ödül fonksiyonları sayesinde, tam Türkçe düşünebilen bir model elde ettik.

Bu çalışmanın temel katkıları:

  1. Türkçe Tutarlılık: Modelin hem düşünce hem cevap aşamalarında Türkçe kullanması
  2. Açık Kaynak Paylaşım: Topluluk için erişilebilir model ve kaynaklar
  3. Tekrarlanabilir Süreç: Diğer diller için uyarlanabilir metodoloji

Türkçe NLP alanında muhakeme modellerinin gelişimi için bu çalışmanın bir başlangıç olmasını umuyorum. TÜDÜM’ün veri setleri ve model ağırlıklarının tamamı açık kaynak olarak paylaşılmıştır.

Gelecekte daha büyük veri setleri ve gelişmiş tekniklerle TÜDÜM ailesini genişletmeyi planlıyorum.

Kaynaklar

[1] OpenAI. “Learning to reason with LLMs.” https://openai.com/index/learning-to-reason-with-llms/, September 2024.

[2] DeepSeek-AI et al. “DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning.” arXiv:2501.12948, 2025.

[3] Zhihong Shao et al. “DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models.” arXiv:2402.03300, 2024.

[4] Jason Wei et al. “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models.” arXiv:2201.11903, 2022.

[5] Qwen Team. “Qwen3 Technical Report.” arXiv:2505.09388, 2025.

[6] https://huggingface.co/datasets/mlabonne/FineTome-100k

[7] Tri Dao et al. “FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning.” arXiv:2307.08691, 2023.

[8] John Schulman et al. “Proximal Policy Optimization Algorithms.” arXiv:1707.06347, 2017.

[9] https://huggingface.co/datasets/malhajar/gsm8k-tr