Tokenizasyon: Yapay Zeka Metni Nasıl Parçalar — ve Türkçe Neden Daha Pahalı?
BPE tokenizasyonu ve tokenizer eğitimi nasıl işler; Türkçe gibi eklemeli diller neden daha çok tokene bölünür, bu maliyeti, hızı ve bağlamı nasıl etkiler?
tokenizasyontokenBPETürkçebüyük dil modeli
Model bir cümleyi ilk gördüğünde ne yapar?
Bir büyük dil modeline “Yapay zekâ öğreniyorum.” yazdığınızda, model bu cümleyi harf harf ya da kelime kelime okumaz. Önce cümle, sabit bir sözlükten seçilen parçalara bölünür — bazıları tam kelime, bazıları bir kelimenin parçası, bazıları tek bir noktalama işareti. Bu parçalara token denir, bölme işlemini yapan bileşene de tokenizer. Model eğitiminden önce, çıkarım sırasında da, hatta siz bir soru sorarken de ilk adım her zaman budur: metin tokenlere dönüşür, tokenler sayı dizilerine (embedding) çevrilir, ve transformer mimarisi asıl olarak bu sayılar üzerinde çalışır.
Token nedir, yapay zeka neden token sayar? yazısında bu birimin maliyet ve bağlam penceresiyle ilişkisine kısaca değinmiştim; burada bir adım geriye gidip tokenlerin nereden geldiğine, yani tokenizasyonun kendisine bakıyoruz. Çünkü tokenizasyon biçimi; modelin maliyetini, bir seferde ne kadar metin görebildiğini, ne kadar hızlı cevap verdiğini ve hangi dilleri “daha ucuza” işlediğini belirliyor. Ve bu son nokta, Türkçe konuşan bir kullanıcı için soyut bir teknik detay değil.
Neden kelime kelime değil, alt-kelime parçalara bölünüyor?
En basit tokenizasyon yöntemi, metni boşluklardan bölüp her kelimeyi bir token saymak olurdu. Ama bunun iki ciddi sorunu var: sözlük devasa büyür (her çekim, her yazım hatası, her özel isim ayrı bir giriş ister) ve model daha önce hiç görmediği bir kelimeyle karşılaştığında elinde hiçbir şey kalmaz — “bilinmeyen kelime” (unknown token) olarak işaretlemekten başka çaresi yoktur. Tersi uç, her harfi ayrı token yapmak da sorunlu: sözlük küçülür ama diziler çok uzar, model her kelimenin anlamını harflerden yeniden inşa etmek zorunda kalır.
Sennrich, Haddow ve Birch’in 2016’da makine çevirisi için önerdiği çözüm, bu ikisinin ortası: Byte Pair Encoding (BPE). Yöntemin mantığı basit bir sıkıştırma algoritmasından ödünç alınmış. Önce metin, tek tek karakterlere bölünür. Sonra, eğitim verisinde yan yana en sık görülen karakter (veya parça) çifti bulunur ve bu çift tek bir yeni birim olarak sözlüğe eklenir. Bu birleştirme adımı, sözlük büyüklüğü önceden belirlenen bir hedefe ulaşana kadar tekrar tekrar yapılır. Sonuçta ortaya, sık geçen kelimelerin tek parça kaldığı ama nadir veya hiç görülmemiş kelimelerin tanıdık alt-parçalara bölünebildiği bir sözlük çıkıyor. Sennrich ve ekibinin kendi ifadesiyle yöntem, “byte pair encoding sıkıştırma algoritmasına dayanan bölütleme” kullanarak nadir ve bilinmeyen kelimelerin açık bir sözlükle (open vocabulary) çevrilebilmesini sağlıyor — yani model, daha önce hiç görmediği bir kelimeyle karşılaştığında bile pes etmek zorunda kalmıyor, onu bildiği parçalara ayırarak işleyebiliyor.
Kudo ve Richardson’ın 2018’de yayımladığı SentencePiece, bu fikri bir adım öteye taşıdı: dilden bağımsız çalışan bir tokenizer. Önceki yöntemler genelde önce kelimeleri boşluklardan ayırıyor, sonra alt-kelime bölmesini bu ön-ayrılmış kelimeler üzerinde yapıyordu — bu da Çince veya Japonca gibi kelimeler arasında boşluk kullanmayan diller için işe yaramıyordu. SentencePiece, ham metinden doğrudan alt-kelime modeli eğiterek “uçtan uca ve dilden bağımsız bir sistem” kurulmasını sağladı; yazarların belirttiği gibi, bu sayede tokenizer hangi dilin nasıl yazıldığına dair özel kurallara ihtiyaç duymuyor. Bugün pek çok büyük dil modeli, BPE’nin bir varyantını (genelde bayt düzeyinde, yani Unicode karakterleri değil ham baytları temel alan bir versiyonunu) kullanıyor.
Tokenizer nasıl “eğitiliyor”?
Burada kritik bir ayrımı netleştirmek gerekiyor: tokenizer, modelin kendisinden ayrı, kendi başına eğitilen bir bileşen. Model henüz hiçbir ağırlığa sahip değilken, önce büyük bir metin derlemesi üzerinde BPE (veya benzeri) algoritması çalıştırılır ve sabit büyüklükte bir sözlük (örneğin 50 bin ya da 100 bin token) üretilir. Bu sözlük, o modelin tüm yaşam döngüsü boyunca değişmez — model daha sonra hangi dilde soru alırsa alsın, aynı sabit sözlükle çalışmak zorundadır.
Bu noktada sorun şu: sözlük hangi metinlerle eğitilirse, o metinlerin dil ve tarz dağılımına göre şekillenir. Eğitim derlemesinde İngilizce metin ağırlıklıysa, sözlükteki “verimli” (yani tek token’a sığan) birimlerin büyük kısmı İngilizce kelime ve kelime parçaları olur. Başka bir dilin kelimeleri, o dilin kendi kalıpları sözlükte yeterince temsil edilmediği için, daha küçük ve daha fazla parçaya bölünmek zorunda kalır. Bu, dilin “zor” olmasıyla ilgili değil, sözlüğün hangi dile göre optimize edildiğiyle ilgili bir sonuç.
Türkçe neden daha çok tokene bölünüyor?
Türkçe, sondan eklemeli (agglutinative) bir dil: kökler üzerine art arda ekler getirilerek çekim, hâl, kişi, zaman gibi bilgiler kelimenin içine gömülür. “Ev”, “evler”, “evlerimizden”, “evlerimizdekilerden” gibi bir zincir, İngilizcede ayrı kelimeler ya da edatlarla ifade edilecek bilgiyi tek bir kelimenin içinde taşır. Bir BPE sözlüğü, esas olarak İngilizce gibi ek bakımından daha az zengin bir dile göre kurulduğunda, bu uzun ve çeşitli Türkçe kelime formlarının çoğu sözlükte tek parça olarak yer bulamaz — kök ve her ek genelde ayrı ayrı tokenlere bölünür.
Petrov, La Malfa, Torr ve Bibi’nin 2023’te yayımladığı çalışma, bunu tek bir dile özgü bir gözlem olmaktan çıkarıp sistematik biçimde ölçtü: aynı içeriği farklı dillere çevrilmiş metinler üzerinden karşılaştırdıklarında, tokenizasyon uzunluğunun diller arasında “drastik şekilde” farklılaştığını, bazı dil çiftleri arasında bu farkın 15 kata kadar çıkabildiğini gösterdiler. Yazarlar bunun sonucunu üç somut alanda tanımlıyor: ticari dil servislerine erişim maliyeti (aynı anlam için daha fazla token = daha yüksek fatura), işleme süresi ve gecikme, ve modele bağlam olarak sağlanabilecek içerik miktarı — yani bağlam penceresinin fiilen ne kadarının doluyla dolduğu. Bir Türkçe kullanıcı aynı fikri ifade etmek için genelde daha fazla token harcadığında, bu üç etki de aynı anda kendini gösteriyor: aynı sorguya daha çok ödüyor, cevabı biraz daha yavaş alıyor, ve modelin “hatırlayabileceği” metin miktarı (kelime cinsinden) İngilizce konuşan bir kullanıcıya göre daha kısıtlı kalıyor.
Rust, Pfeiffer, Vulić, Ruder ve Gurevych’in 2021’de yayımladığı çalışma, meselenin sadece maliyetle sınırlı olmadığını gösteriyor: tokenizer kalitesi, modelin o dildeki asıl performansını da etkiliyor. Araştırmacılar dokuz dil üzerinde çok dilli modelleri tek dilli karşılıklarıyla kıyasladıklarında, bir dilin tokenizer sözlüğünde yeterince iyi temsil edildiği durumlarda performans farkının ihmal edilebilir düzeye indiğini, ama özel olarak o dile göre eğitilmiş bir tokenizer kullanmanın nihai (downstream) performans üzerinde de belirleyici bir rol oynadığını buldular. Yani kötü uyan bir tokenizer sadece “daha pahalı” değil, aynı zamanda modelin o dili biraz daha kötü işlemesine de yol açabiliyor.
Sayı saymak ve harf saymak neden zor?
Tokenizasyonun bir başka pratik sonucu, dil modellerinin neden bazen basit sayma işlerinde şaşırtıcı şekilde hata yaptığı. Bir model “çilek” kelimesinde kaç tane “e” harfi olduğunu sorduğunuzda, kelimeyi harf harf görmüyor — “çilek” muhtemelen tek bir token, ya da en fazla iki parça olarak geliyor. Model harfleri tek tek “saymıyor”, çünkü onları tek tek “görmüyor”; elindeki tek şey, o token’ın eğitim sırasında hangi bağlamlarda geçtiğine dair öğrenilmiş bir temsil. Harf sayma, tokenizasyonun gizlediği bir bilgiyi geri çıkarmayı gerektiriyor.
Sayılarla ilgili benzer bir tuhaflık var: bir BPE sözlüğü, sayı dizilerini rastgele sınırlardan bölebilir — “1234” tek token olabilirken “12345” iki farklı parçaya ayrılabilir, üstelik bu bölünme her seferinde tutarlı olmayabilir. Bu, modelin çok basamaklı aritmetik işlemlerde neden tutarsız davrandığının bir parçası: aynı sayısal işlemi yaparken, sayının kaç haneye ve hangi parçalara bölündüğü, modelin o sayıyı “nasıl gördüğünü” değiştiriyor. Bu yüzden birçok güncel tokenizer, sayıları tek tek rakamlara bölecek şekilde özel olarak tasarlanıyor — tutarsızlığı azaltmak için, ama tamamen ortadan kaldırmadan.
Aklınızda kalsın
- Tokenizasyon, modelin metni gördüğü ilk ve tek biçimdir. BPE gibi alt-kelime yöntemleri, sık kelimeleri tek parça tutarken nadir veya bilinmeyen kelimeleri tanıdık parçalara bölerek hem sözlüğü küçük tutuyor hem de “bilinmeyen kelime” sorununu çözüyor.
- Tokenizer’ın sözlüğü, eğitildiği metinlerin dil dağılımına göre şekilleniyor. Sondan eklemeli bir dil olan Türkçe, bu sözlüklerde genelde İngilizceden daha az verimli temsil ediliyor — aynı anlam için daha fazla token gerekiyor.
- Bu fark soyut değil, somut sonuçlar doğuruyor. Daha fazla token; daha yüksek maliyet, daha yavaş yanıt ve daha erken dolan bir bağlam penceresi demek — üstelik tokenizer kalitesi düşükse model performansı da bundan etkilenebiliyor.
Kaynaklar
- Sennrich, R., Haddow, B. & Birch, A. (2016). Neural Machine Translation of Rare Words with Subword Units. ACL 2016 / arXiv. Byte Pair Encoding (BPE) yöntemini nadir kelimeleri alt-kelime birimlerine bölerek açık sözlüklü çeviri için tanıtan temel çalışma. arxiv.org/abs/1508.07909
- Kudo, T. & Richardson, J. (2018). SentencePiece: A Simple and Language Independent Subword Tokenizer and Detokenizer for Neural Text Processing. arXiv. Ham metinden doğrudan, dilden bağımsız alt-kelime modeli eğiten SentencePiece tokenizer’ını tanıtan çalışma. arxiv.org/abs/1808.06226
- Petrov, A., La Malfa, E., Torr, P. H. S. & Bibi, A. (2023). Language Model Tokenizers Introduce Unfairness Between Languages. arXiv (NeurIPS 2023). Aynı içeriğin farklı dillerde tokenizasyon uzunluğunun 15 kata kadar farklılaşabildiğini ve bunun maliyet, gecikme ve bağlam penceresi üzerindeki adaletsiz etkisini gösteren çalışma. arxiv.org/abs/2305.15425
- Rust, P., Pfeiffer, J., Vulić, I., Ruder, S. & Gurevych, I. (2021). How Good is Your Tokenizer? On the Monolingual Performance of Multilingual Language Models. ACL 2021 / arXiv. Dile özel bir tokenizer’ın, çok dilli modellerin o dildeki nihai performansı üzerinde belirleyici rol oynadığını dokuz dil üzerinde gösteren çalışma. arxiv.org/abs/2012.15613
Teoriyi anladın — şimdi uygula
Bu sitedeki her şey ücretsiz. Yapay zekâyı işinde gerçekten çalıştırmak istiyorsan — reklam, içerik, otomasyon — beAgents AI tam bunun için var.
beAgents AI'ı keşfet ↗