--- language: tr license: cc-by-sa-3.0 tags: - tokenizer - bpe - byte-level-bpe - turkish - chat-template - tool-calling --- # Türkçe Byte-Level BPE Tokenizer Türkçe Wikipedia makaleleri üzerinde eğitilmiş, 128.008 kelime dağarcığına (vocab) sahip byte-level BPE tokenizer. Kendi tasarımımız olan **Yılmaz Chat Template** ile birlikte gelir — sohbet mesajlarını (system/user/assistant/tool) doğru biçimde sarmalayan, thinking ve tool-calling desteği olan bir Jinja2 şablonu. ## Detaylar - **Vocab boyutu:** 128.008 (128.000 temel + 10 özel token) - **Algoritma:** Byte-Level BPE (GPT-2/LLaMA tarzı) - **Eğitim verisi:** Türkçe Wikipedia (wikimedia/wikipedia, tr) - **Kütüphane:** Hugging Face `tokenizers` - **Chat template:** `chat_template.jinja` (bu repoda ayrı dosya olarak bulunur) ## Temel kullanım ```python from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("Resad2173/BPE_Magibu") metin = "Türkiye ve Azerbaycan kardeş ülkelerdir." ids = tokenizer.encode(metin) print(ids) print(tokenizer.decode(ids)) ``` ## Yılmaz Chat Template Bu tokenizer'a, ChatML mantığından esinlenen ama kendi markalı özel token'larımızı kullanan bir sohbet şablonu bağlanmıştır. `role` alanları (`system`/`user`/`assistant`/`tool`) standart `messages` formatıyla uyumlu bırakılmış; marka kimliği yalnızca özel token isimlendirmesindedir. ### Tur formatı ``` <|yilmaz_start|>ROL İÇERİK<|yilmaz_end|> ``` ### Eklenen özel token'lar | Token | Amacı | |---|---| | `<\|yilmaz_start\|>` | Tur başlangıcı (ardından rol adı gelir) | | `<\|yilmaz_end\|>` | Tur bitişi | | `<\|yilmaz_think\|>` ... `<\|yilmaz_think_end\|>` | Model muhakemesi / düşünme bloğu (opsiyonel) | | `<\|yilmaz_tool_call\|>` ... `<\|yilmaz_tool_call_end\|>` | Fonksiyon çağrısı (JSON formatında) | | `<\|yilmaz_tool_result\|>` ... `<\|yilmaz_tool_result_end\|>` | Fonksiyon çağrısının sonucu | | `<\|yilmaz_error\|>` ... `<\|yilmaz_error_end\|>` | Başarısız tool çağrısının hata mesajı | Bu 10 token, `add_special_tokens` ile vocab'a eklendi ve her biri tek bir id'ye karşılık gelir — tokenize edilirken alt-parçalara bölünmezler. ### Kullanım örneği ```python from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("Resad2173/BPE_Magibu") messages = [ {"role": "system", "content": "Sen yardımsever bir bankacılık asistanısın."}, {"role": "user", "content": "Hesap bakiyemi nasıl görebilirim?"}, ] prompt = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) print(prompt) ``` Çıktı: ``` <|yilmaz_start|>system Sen yardımsever bir bankacılık asistanısın.<|yilmaz_end|> <|yilmaz_start|>user Hesap bakiyemi nasıl görebilirim?<|yilmaz_end|> <|yilmaz_start|>assistant ``` ### Tool-calling ve thinking örneği ```python messages = [ {"role": "user", "content": "Ankara'da hava nasıl?"}, { "role": "assistant", "content": "", "reasoning_content": "Kullanıcı hava durumu soruyor, get_weather çağırmalıyım.", "tool_calls": [ {"function": {"name": "get_weather", "arguments": {"city": "Ankara"}}} ], }, {"role": "tool", "content": '{"city": "Ankara", "temp_c": 27}'}, ] prompt = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True, enable_thinking=True ) print(prompt) ``` Çıktı: ``` <|yilmaz_start|>user Ankara'da hava nasıl?<|yilmaz_end|> <|yilmaz_start|>assistant <|yilmaz_think|> Kullanıcı hava durumu soruyor, get_weather çağırmalıyım. <|yilmaz_think_end|> <|yilmaz_tool_call|>{"name": "get_weather", "arguments": {"city": "Ankara"}}<|yilmaz_tool_call_end|><|yilmaz_end|> <|yilmaz_start|>user <|yilmaz_tool_result|>{"city": "Ankara", "temp_c": 27}<|yilmaz_tool_result_end|><|yilmaz_end|> <|yilmaz_start|>assistant <|yilmaz_think|> ``` ## Neler yapıldı (güncelleme geçmişi) 1. Mevcut 128.000 kelimelik vocab'a 10 yeni özel token eklendi (`add_special_tokens`), her biri benzersiz bir id aldı (128000–128009). 2. Kendi tasarımımız olan `chat_template.jinja` şablonu tokenizer'a bağlandı — `system`/`user`/`assistant`/`tool` rollerini sarmalıyor, opsiyonel thinking ve tool-calling (başarı + hata durumları dahil) destekliyor. 3. `Banka_Diyalog_Magibu` dataset'inden gerçek örneklerle doğrulandı — hem tek turlu hem çok turlu diyaloglarda doğru çıktı üretiyor.