Türkçe BPE Tokenizer

Türkçe metin için sıfırdan eğitilmiş, byte-level BPE tokenizer.

Neden?

Genel amaçlı tokenizer'lar Türkçe'yi verimsiz bölüyor. Türkçe sondan eklemeli bir dil — ev, evler, evlerimiz, evlerimizden aynı kökten türüyor. İngilizce ağırlıklı bir sözlük bu ekleri tanımadığı için kelimeleri gereksiz parçalara ayırıyor ve aynı metin çok daha fazla token tutuyor.

Ölçümler

300 Türkçe metin parçası üzerinde:

Tokenizer Sözlük Fertility (token/kelime)
Bu tokenizer 24.433 1.425
gpt2 50.257 3.877

Fertility düşük olması iyidir: aynı metni daha az token ile temsil eder. Bu tokenizer, gpt2'nin yarısı kadar sözlükle Türkçe'de 2,7 kat daha verimli.

Pratik anlamı: aynı bağlam penceresine yaklaşık 2,7 kat daha fazla Türkçe metin sığar, eğitim ve çıkarım maliyeti buna oranla düşer.

Bölütleme örnekleri

"İnsanların isimlerini hatırlamak, onlara değer verdiğinizi gösterir."
→ 9 token:  İnsanların | isimlerini | hatırlamak | , | onlara | değer | verdiğinizi | gösterir | .

"Eleştirmek yerine karşımızdakini anlamaya çalışmak ilişkileri güçlendirir."
→ 10 token: Eleştir | mek | yerine | karşımız | dakini | anlamaya | çalışmak | ilişkileri | güçlendirir | .

Sık kullanılan kelimeler tek token; türetilmiş biçimler kök ve ek olarak bölünüyor.

Teknik Detaylar

  • Model: BPE (Byte-Pair Encoding)
  • Pre-tokenizer: ByteLevel (add_prefix_space=False)
  • Decoder: ByteLevel
  • Sözlük boyutu: 24.433
  • Minimum frekans: 2
  • Korpus: ~1,7 MB Türkçe metin

ByteLevel kullanıldığı için bilinmeyen karakter sorunu yok — her bayt temsil edilebilir. ç ğ ı İ ö ş ü dahil tüm Türkçe karakterler encode/decode döngüsünden kayıpsız geçer (6/6 test başarılı).

Özel Tokenlar

Token Amaç
<|endoftext|> Dizi sonu / başlangıcı
<|pad|> Dolgu
<|unk|> Bilinmeyen (ByteLevel sayesinde pratikte kullanılmaz)
<|im_start|> Sohbet mesajı başlangıcı
<|im_end|> Sohbet mesajı sonu
<|think|> Akıl yürütme bloğu başlangıcı
<|/think|> Akıl yürütme bloğu sonu

Kullanım

from transformers import PreTrainedTokenizerFast

tok = PreTrainedTokenizerFast.from_pretrained("ssilistre/turkish-bpe-tokenizer")

ids = tok.encode("İnsanların isimlerini hatırlamak önemlidir.")
print(len(ids), tok.decode(ids))

Doğrudan tokenizers kütüphanesiyle:

from tokenizers import Tokenizer

tok = Tokenizer.from_pretrained("ssilistre/turkish-bpe-tokenizer")
print(tok.encode("Merhaba dünya").tokens)

Sınırlamalar

  • Küçük korpus. ~1,7 MB metinle eğitildi. Daha büyük ve çeşitli bir korpus, özellikle nadir kelimelerde daha iyi bölütleme verirdi.
  • Dar alan. Korpus insan ilişkileri ve iletişim konularından oluşuyor. Teknik, hukuki ya da tıbbi metinlerde fertility yükselir.
  • Hedeflenen sözlük boyutuna ulaşılmadı. 32.000 istendi, korpus bu büyüklükte anlamlı birleşme üretmeye yetmediği için 24.433'te durdu.
  • Mevcut modellerle uyumsuz. Sıfırdan eğitildiği için hazır bir modelin gömme katmanıyla eşleşmez. Kullanmak için model ya sıfırdan eğitilmeli ya da gömme katmanı yeniden boyutlandırılmalı.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support