Token kavramı, yapay zeka dil modellerinde metni işlemek için kritik öneme sahiptir. ChatGPT, metni kelimeler yerine tokenlara ayırır ve tüm süreç bu birimler üzerinden yürütülür. Token sayısı, modelin kapasitesini ve yanıt üretme yeteneğini doğrudan etkiler.
TOKEN kavramı, yapay zeka dil modellerinde temel bir rol oynar. ChatGPT gibi bir yapay zeka sistemi, gelen metni işlemeye başlamadan önce onu kelime bazında değil, token adı verilen küçük parçalara böler. Kullanıcı için bir cümle basitçe kelimelerden oluşan bir ifade gibi görünse de, ChatGPT için bu, sayılara dönüştürülmüş ayrı token dizilerinden oluşur.
Bu yüzden dil modellerinin kısıtlamaları genellikle kelime veya karakter olarak değil, token cinsinden belirtilir. Bir modelin aynı anda işleyebileceği metin miktarı, uzun diyaloglarda ne kadar geçmişi tutabileceği ve üretebileceği yanıtın boyutu doğrudan token sayısına bağlıdır.
Token, dil modelinin üzerinde çalıştığı metnin en küçük birimidir. Genellikle bu, sisteme özel bir sayısal kimlik atanan küçük bir dize parçası olarak düşünülebilir.
Bir token her zaman tam bir kelime olmak zorunda değildir. Kullanılan tokenleştiriciye bağlı olarak kısa ve yaygın bir kelime, daha uzun bir kelimenin parçası, harf kombinasyonu, rakam veya noktalama işareti tek bir token olabilir.
Örneğin:
"Kedi masanın üstünde oturuyor."
Bir insan için bu beş kelime ve bir nokta içerir. Ancak sinir ağı, bazı kelimeleri bütün bırakırken, diğerlerini birkaç parçaya bölebilir. Ortaya çıkan her bir parça için ayrı bir sayı atanır ve artık sinir ağı "kedi" veya "masanın" kelimeleriyle değil, bunların sayısal karşılıklarıyla çalışır.
Her kelimeye ayrı bir numara atamak kolay gibi görünse de, bu yaklaşımın ciddi bir sorunu vardır: Olası kelime sayısı neredeyse sınırsızdır. Özellikle Türkçede, bir kelimenin birçok çekim ve biçimi olabilir:
Her formu bağımsız bir sözlük elemanı olarak saklamak sözlüğü hızla büyütür. Ayrıca özel isimler, şirket adları, yeni terimler, yazım hataları, sayılar, linkler ve programlama kodları gibi öğeler de eklenir.
Token sistemi, nadir ve uzun kelimeleri daha tanıdık parçalara ayırmaya izin verir. Böylece model, sözlükte hiç olmayan bir karakter dizisini bile işleyebilir. Yani "bir kelime = bir token" genellemesi doğru değildir: Kısa ve yaygın kelimeler genellikle tek bir token olurken, nadir veya karmaşık kelimeler birkaç tokena bölünebilir.
Aynı durum noktalama işaretleri ve rakamlar için de geçerlidir. Sayılar, tarihler veya web adresleri de birden fazla token ile temsil edilebilir. Model için bunların hepsi tek bir dizi elemanıdır; "kelime", "virgül" veya "sayı" gibi insan kategorileri anlam ifade etmez.
Kullanıcı ChatGPT'ye bir mesaj gönderdiğinde, metin doğrudan sinir ağına aktarılmaz. Önce, özel bir mekanizma olan tokenleştirici tarafından parçalara ayrılır:
Örneğin, "Yapay zeka nasıl çalışır?" cümlesi, insan için üç kelime ve bir soru işareti içerir. Tokenleştirici ise bu ifadeyi, sınırları kelimelerle tam örtüşmeyen birden fazla parçaya bölebilir. Her bir token, modelin sözlüğünden belirli bir kimlik alır.
Sinir ağı, matematiksel işlemler yapar ve harfleri/kelimeleri insanlar gibi algılayamaz. "Bugün hava güzel" ifadesi, rakamsal forma dönüştürülmedikçe bilgisayar için bir anlam taşımaz.
Her kelimeye ayrı bir numara atamak, dilin sürekli değişmesi ve kelime formlarının çeşitliliği nedeniyle pratik değildir. Tokenleştirme, tüm olası kelimeleri saklamak yerine, yaygın metin parçalarından oluşan sınırlı bir sözlük kullanarak bu sorunu çözer.
Gerekli kelime sözlükte varsa, tek bir token olur; yoksa, tokenleştirici onu modelin tanıdığı daha küçük parçalara böler. Böylece model, isimler, sayılar, linkler, kod ve yeni kelimelerle de çalışabilir.
Token sözlüğü, model oluşturulurken büyük miktarda metinden türetilir. Sık karşılaşılan karakter dizileri, daha uzun tokenlar olarak saklanır, bu da dizi boyutunu küçültür. Nadir kombinasyonlar ise daha küçük tokenlara bölünür.
Tokenleştirici, sözlük ve dil gibi faktörler, aynı metnin farklı modellerde farklı sayıda tokena bölünmesine neden olabilir.
Daha fazla teknik detay için Metin Tokenizasyonu: Yapay Zeka Metni Nasıl Tokenlara Ayırır? başlıklı makaleyi inceleyebilirsiniz.
Kelimeleri temel birim olarak kullanmak, dilin çeşitliliği nedeniyle pratik değildir. Milyonlarca kelime formu, isim, teknik terim, kısaltma ve yeni ifade vardır. Her birine ayrı bir sözlük elemanı atamak, sözlüğü büyütür ve bilinmeyen kelimeleri işlemek için ek yöntemler gerektirir.
Tokenlar ise daha esnek bir yaklaşım sunar. Yaygın kelime veya parçalara tek başına yer verilir, nadir diziler ise daha küçük parçalardan oluşturulur. Böylece bir model, metin, kod, sayı, web adresi ve çoklu dil ile çalışabilir.
Bu yaklaşım, sözlük boyutunu sınırlamayı da sağlar. Sonsuz sayıda kelime yerine, sabit bir token setiyle hemen her metin temsil edilebilir.
Sonuç olarak ChatGPT, kelime değil token sayar ve model için önemli olan, işlenen gerçek dizi uzunluğudur.
Sorgu işlendiğinde, model bir token dizisi alır ve bunu devam tahmini için bağlam olarak kullanır.
Örneğin, cümle "Fransa'nın başkenti -" ile başlıyorsa, model, bağlama göre bir sonraki tokenın olasılığını hesaplar. "Paris"i oluşturan tokenlar yüksek olasılık alır. Seçilen token diziye eklenir ve işlem tekrarlanır.
Bu döngü birçok kez tekrar eder. Yanıt, hemen bir paragraf olarak değil, token token oluşturulur. "Sonraki token" her zaman tam bir kelime olmayabilir; bir kelime parçası, noktalama işareti veya başka bir metin parçası olabilir.
Token'ın sayısal kimliği, doğrudan hesaplamalar için yetersizdir. Bu nedenle her kimlik, çok boyutlu bir sayı dizisine (embedding) dönüştürülür. Bu, modelin tokenlar arasındaki ilişkileri matematiksel olarak dikkate almasını sağlar.
Vektörler, modelin katmanlarından geçerken, sinir ağı yalnızca tokenın kendisini değil, bağlamdaki konumunu ve diğer tokenlarla ilişkisini de analiz eder. Aynı karakter dizisi, çevresine göre farklı anlamlar alabilir.
Bu süreç, modelin bağlamı içselleştirmesini ve bir sonraki tokenin olasılığını hesaplamasını sağlar. Yanıt tamamlanana veya token limiti aşılana kadar döngü devam eder.
Tokenın sabit bir uzunluğu yoktur. Tek bir karakter, birkaç harf, bir kelime veya daha uzun bir dizi olabilir. "1 token = 4 karakter" gibi evrensel bir kural yoktur; bu tür hesaplamalar yalnızca yaklaşık tahminler içindir.
Örneğin, kısa ve yaygın bir kelime tek bir token olabilirken, aynı uzunluktaki nadir bir teknik terim birkaç tokena bölünebilir. Rakamlar, özel işaretler ve sembol kombinasyonları token sayısını ciddi şekilde artırabilir.
Kelime sayısı ile token sayısı arasında sabit bir oran yoktur. Bir kelime bir, iki ya da daha fazla tokena karşılık gelebilir. Özellikle uzun ve nadir kelimelerde bu daha belirgindir.
"mikromimari"
Bir kişi için bu tek bir kelime olsa da, model içinde birkaç token olarak temsil edilebilir.
Tersine, sık karşılaşılan bir sembol kombinasyonu tek bir token olarak saklanabilir ve tahmin edilenden daha az yer kaplayabilir.
Bu nedenle "1000 token yaklaşık şu kadar kelime" gibi ifadeler yalnızca kaba tahminlerdir. Gerçek sayıyı öğrenmek için metni kullanılan tokenleştiriciden geçirmek gerekir.
Diller arasındaki fark, modelin "bir dili daha iyi anladığı" anlamına gelmez; asıl neden tokenleşme düzeyindedir. Modelin sözlüğü büyük metinlerden oluşturulur ve sık görülen karakter dizileri daha büyük tokenlarla temsil edilir. Bu yüzden aynı cümlenin Türkçeye çevirisinde token sayısı değişebilir.
Bu nedenle büyük belgelerin boyutunu sadece sayfa, kelime veya karakter sayısıyla değerlendirmek yeterli değildir. Model için önemli olan, tokenleştirildikten sonra oluşan token sayısıdır.
Tokenlar yalnızca bir mesajın uzunluğunu değil, aynı zamanda modelin sorgu ve yanıt sürecinde dikkate alabileceği bağlam penceresinin boyutunu da belirler. Bağlama şu bilgiler dahil edilebilir:
Tüm bu bilgiler token olarak hesaba katılır. Kısa bir sorgu bile, uzun bir sohbet geçmişiyle birlikte işlenirken önemli miktarda token harcayabilir.
Bağlam penceresini, sinir ağının çalışma alanı gibi düşünebilirsiniz. Gerekli bilgi bu pencerenin içindeyken, model yeni token üretirken onu dikkate alabilir.
Her dil modeli türünün bağlam için belirli bir limiti vardır. Bu, sistemin tek bir işlem veya diyalog sırasında işleyebileceği token miktarını belirler ve model mimarisi ile servis ayarlarına bağlıdır.
Bu limit doğrudan belirli bir sayfa veya kelime sayısına çevrilemez. Aynı uzunluktaki iki belge, içeriğe, dile, kod veya biçimlendirmeye göre farklı miktarda token tüketebilir. Giriş ve yanıt metni, toplam bağlamı paylaşabilir veya modele göre ayrı kısıtlamalar olabilir.
Büyük bir belge, sohbet geçmişi ve talimatlar bağlamı doldurduğunda, kalan alan yeni içerik için azalır. Bu yüzden teorik maksimum bağlam, kullanıcının her zaman bu kadar metin gönderebileceği anlamına gelmez.
Sohbet uzadıkça, bilgi miktarı artar. Eğer tüm konuşma aktif bağlama sığmazsa, sistem geçmişi yöneterek kullanılabilir limiti aşmamaya çalışır. Eski mesajların bir kısmı aktif bağlamdan çıkarılabilir veya özetlenerek aktarılabilir.
Bu nedenle çok uzun sohbetlerde, modelin eski detayları dikkate alma kabiliyeti azalabilir. Kullanıcı için sohbet kesintisiz görünse de model her mesajda tüm geçmişi işlemeyebilir.
Bu, token sayısının uzun bir sohbetin bağlamda tutulabilmesiyle neden yakından ilişkili olduğunu açıklar.
Uzun diyalogların mekanizması hakkında daha fazla bilgi için Yapay Sinir Ağları Neden Uzun Diyalogları Unutur? Bağlam, Bellek ve Attention başlıklı makaleye göz atabilirsiniz.
Bağlam limiti, özellikle büyük bilgi hacimlerinde önemli hale gelir:
Sonuç olarak, tokenlar sadece teknik bir sayı değildir. Aynı anda işlenebilecek gerçek bilgi miktarını belirlerler.
Tokenın sabit bir karakter sayısı yoktur. Tek bir sembol, birkaç harf, bir kelime veya başka bir dizi olabilir. Yaklaşık tahminler için birkaç karakter hesaba katılsa da, kesin değer ancak ilgili modelin tokenleştiricisi ile bulunabilir.
Kelime-token oranı değişkendir. Kısa ve yaygın bir kelime tek bir token olabilirken, uzun veya nadir bir kelime birkaç tokena bölünebilir. Bu nedenle 1000 kelimelik bir metin, farklı dil ve sözlüklerde farklı token sayılarına sahip olabilir. Büyük sorgularda en doğru yaklaşım, doğrudan token sayısını dikkate almaktır.
Evet, noktalama işaretleri tokenleştirme sürecine dahildir. Ancak her sembolün mutlaka ayrı bir token olması gerekmez; nokta, virgül veya diğer karakterler, tokenleştiriciye bağlı olarak tek başına veya komşu karakterlerle birlikte bir token olabilir. Benzer şekilde, boşluklar, satır sonları, matematiksel semboller de aynı şekilde işlenir.
Token sayısı, tokenleştiricinin sözlüğüne ve hangi karakter dizilerinin daha verimli temsil edildiğine bağlıdır. İngilizce'de sık geçen kelime ve parçalar sözlükte daha büyük tokenlarla temsil edilebiliyorsa, Türkçe kelimeler daha fazla parçaya bölünebilir. Ancak bu her zaman geçerli değildir; farklı modeller farklı sonuçlar verebilir.
Gerekli bilgi hacmi mevcut bağlam penceresini aştığında, model tüm diziyi aynı anda işleyemez. Servise göre, eski bağlamın bir kısmı çıkarılır veya özetlenir; sistem giriş veya yanıt hacmini sınırlayabilir. Bu, özellikle uzun sohbet, büyük dosya veya kod analizinde önemlidir.
Tokenlar, yapay zeka dil modellerinde metnin alınıp üretilmesini sağlayan temel birimlerdir. Bunlar doğrudan kelime veya karakterle örtüşmez: Bir kelime bir tokena karşılık gelebilir ya da birkaç parçaya bölünebilir.
ChatGPT, token sayar çünkü bu yöntem, sürekli değişen insan dilini sınırlı sayıdaki sözlük elemanıyla temsil etmeye imkân tanır. Her parça, sayı kimliği alır ve ardından ağ içinde işlemeye uygun forma dönüştürülür.
Token sayısı, pratikte büyük önem taşır. Bir sorgunun ne kadar alan kaplayacağı, sohbet geçmişinin ne kadarının bağlama alınabileceği ve modelin aynı anda işleyebileceği bilgi miktarı doğrudan tokenlara bağlıdır. Bu nedenle, uzun belgeler, kod veya büyük diyaloglarla çalışırken, sayfa veya kelime sayısına değil, tokenleştirme sonrası gerçek metin hacmine odaklanmak gerekir.