Byte Pair Encoding

En sık birleşen karakter çiftlerini iteratif olarak birleştirerek sabit boyutlu alt kelime sözlüğü oluşturan tokenizasyon algoritması.

Byte Pair Encoding (BPE), doğal dil işleme ve büyük dil modellerinde kullanılan bir alt kelime tokenizasyon algoritmasıdır. Orijinal olarak 1994 yılında Philip Gage tarafından veri sıkıştırma amacıyla tasarlanan bu algoritma, Sennrich ve ekibinin 2016 tarihli çalışmasıyla sinir ağı tabanlı makine çevirisine uyarlanmış; ardından GPT, LLaMA ve benzeri büyük dil modellerinin standart tokenizasyon yöntemi hâline gelmiştir. BPE'nin temel amacı, tam kelime tokenizasyon ile karakter tokenizasyon arasındaki dengeyi kurmaktır. Tam kelime tokenizasyon büyük bir sözlük gerektirirken eğitim sırasında hiç görülmemiş kelimeleri (OOV — Out-of-Vocabulary) işleyemez. Karakter tokenizasyon ise aşırı uzun diziler üretir ve modelin anlam ilişkilerini öğrenmesini güçleştirir. BPE bu iki yaklaşımın güçlü yanlarını birleştirir: sözlük boyutunu yönetilebilir düzeyde tutarken OOV problemini de çözer. Algoritma şu adımları izler: Başlangıçta sözlük, eğitim metinlerindeki tüm bireysel karakterlerden oluşur. Ardından en sık yan yana gelen iki token çifti belirlenerek yeni bir birim olarak birleştirilip sözlüğe eklenir. Örneğin "l", "o", "w" karakterleri önce "lo" ardından "low" birimine dönüşebilir. Bu birleştirme adımı hedef sözlük boyutuna ulaşıncaya kadar tekrarlanır. Tipik sözlük boyutları 32.000 ile 100.000 token arasında değişmektedir. GPT-2'den itibaren OpenAI, BPE'yi standart tokenizasyon yöntemi olarak benimsemiştir. GPT-4'te kullanılan tiktoken kütüphanesinin cl100k_base kodlayıcısı yaklaşık 100.000 token içerir. BERT, BPE'ye alternatif olan WordPiece algoritmasını kullanırken LLaMA ve Mistral gibi açık kaynaklı modeller SentencePiece kütüphanesiyle BPE'yi uygular. Tokenizasyon kalitesi modelin performansını doğrudan etkiler. Verimliliği ölçmek için fertilite metriği kullanılır: kelime başına ortalama token sayısı. İngilizce için bu değer yaklaşık 1,2–1,5 iken Türkçe gibi eklemeli dillerde 2,5–4 aralığına çıkabilir; bu durum aynı bağlam penceresi içine sığan bilgi miktarını azaltır ve API maliyetlerini artırır. Çok dilli sözlük desteği ve OOV dayanıklılığı sayesinde BPE, günümüz LLM geliştirme pratiklerinde vazgeçilmez bir araç olmayı sürdürmektedir.

BPE Algoritması Adım Adım

BPE başlangıçta her karakteri ayrı bir token olarak atar. Eğitim verisinde en sık yan yana gelen iki token çifti bulunur ve yeni bir birim olarak sözlüğe eklenir. Bu birleşim kuralı tüm veride uygulanır. İşlem, hedef sözlük boyutuna ulaşana kadar tekrar edilir. Örneğin 1000 birleşim kuralı, 256 karakter sözlüğüne eklenerek 1.256 tokenli bir sözlük oluşturur. Test verisinde bilinmeyen kelimeler bu kurallar uygulanarak parçalanır; her kelime en kötü durumda bireysel karakterlerine kadar indirgenebilir.

GPT ve tiktoken

OpenAI, GPT-2'den itibaren BPE'yi temel tokenizasyon yöntemi olarak benimsemiştir. Yüksek performanslı tiktoken kütüphanesi, GPT modellerinin tamamında kullanılmaktadır. cl100k_base kodlayıcısı yaklaşık 100.000 token içerir. Büyük rakamlar da alt birimlere bölünebilir: '2024' tek token olabilirken '202400' birden fazla parçaya ayrılır. Bu durum aritmetik görevlerde modelin zorlanmasına yol açan bilinen bir sınırlılıktır. Tokenizasyon seçimi bu nedenle model tasarımının kritik bir parçasıdır.

WordPiece ve Diğer Alternatifler

BERT, BPE yerine WordPiece algoritmasını kullanır. WordPiece de alt kelime birleştirme yapar; ancak birleşim kriteri en yüksek sıklığı değil maksimum likelihood artışını hedefler. SentencePiece kütüphanesi hem BPE hem Unigram LM'i destekler ve ön işleme gerektirmeden ham metni işleyebilir. Unigram LM, tüm potansiyel segmentasyonlar üzerinde olasılık hesaplayarak en iyi alt kelime bölümlemesini seçmektedir. LLaMA, Mistral ve Qwen gibi modern açık kaynaklı modeller SentencePiece tabanlı BPE'yi tercih eder.

Çok Dilli Tokenizasyon

BPE, dil belirtilmeksizin çoklu dil desteği için uygundur. Farklı alfabelerin karakterleri sözlüğe eklenir; ortak karakterler veya alt kelimeler birçok dil arasında paylaşılabilir. XLM-R ve mBERT gibi çok dilli modeller bu özelliği 100'den fazla dili tek sözlükle desteklemek için kullanır. Sözlük boyutu ile dil sayısı arasındaki denge dikkatli ayarlanmalıdır; fazla dil sözlüğü 'sulandırabilir' ve belirli dillerdeki performansı düşürebilir.

Türkçe'de BPE: Eklemeli Dil Zorluğu

Türkçe, sözcük biçimbilimi açısından zengin ve eklemeli bir dildir: 'geliyorlar', 'geliyorlardı', 'gelebilirlermiş' gibi tek bir köke onlarca ek getirilebilir. Bu yapı BPE tokenizasyonunu zorlaştırır. OpenAI'ın tiktoken (cl100k_base) kodlayıcısı Türkçe metinde İngilizce'ye kıyasla yaklaşık %40–60 daha fazla token üretmektedir. Tokenizasyon verimliliğini ölçmek için fertilite metriği kullanılır: kelime başına ortalama token sayısı. İngilizce'de ~1,2–1,5 olan bu değer Türkçe'de 2,5–4 aralığına çıkabilir. Yüksek fertilite hem API maliyetini artırır hem de bağlam penceresini daha hızlı doldurur. Bu nedenle Türkçe LLM çalışmalarında Türkçe külliyatıyla eğitilmiş özelleştirilmiş tokenizer'lar büyük avantaj sağlar.

Sıkça Sorulan Sorular

Neden karakter tokenizasyon yetmez? Karakter tokenizasyon çok uzun diziler üretir ve yaklaşık dil modelleri için verimsizdir; anlam birimleri arasındaki ilişkileri öğrenmek güçleşir.

Neden tam kelime tokenizasyon yetmez? Milyonlarca söz dizisi için büyük sözlük gerekir ve nadir kelimeler için 'bilinmeyen' (UNK) tokeni problemi oluşur.

BPE token sayısı maliyeti nasıl etkiler? API'lerde token başına ücretlendirme yapılır; Türkçe metinler İngilizce'den %40–60 daha pahalıya mal olabilir.

Kendi BPE tokenizer'ımı nasıl eğitirim? HuggingFace tokenizers kütüphanesi veya SentencePiece ile kendi veriniz üzerinde özelleştirilmiş bir tokenizer eğitebilirsiniz.