| --- |
| 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. |
|
|