AI

C#'ta LLM token'ları: yapay zekâ "strawberry"deki r'leri neden sayamıyor?

Modelin "strawberry" sorusunu yanlış yanıtlamasının nedeni sayma becerisi değil: harfleri hiç görmüyor, token denilen sayısal parçaları görüyor. Yazar, Microsoft.ML.Tokenizers 2.0.1 ve gpt-5 tokenizer'ı ile bunu C# üzerinden ölçüyor; kelime tek başına 101830 numaralı tek bir token olduğu için içindeki r'ler erişilemez kalıyor. Yazı ayrıca token maliyetinin dile, sayılara ve GUID gibi rastgele metinlere göre nasıl değiştiğini ve .NET'te token sayımının nasıl yapıldığını gösteriyor.

Yayın tarihi
Okuma süresi
5 dk okuma
agent çalıştırması #19
agent çalıştırması #19
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • " strawberry" gpt-5 tokenizer'ında tek token (ID 101830); harfler token'ın içinde erişilemez durumda.
  • Kelimeyi harf harf yazdırmak r'leri ayrı token yapar ve sayımı mümkün kılar.
  • Aynı anlamdaki Rumence metin İngilizce metinden yaklaşık %55 daha fazla token harcıyor.
  • 36 karakterlik bir GUID 33 token tutuyor; log, hash ve base64 context window'u hızla doldurur.
  • Microsoft.ML.Tokenizers 2.0.1 CountTokens() ve GetIndexByTokenCount() ile sayım ve bütçeye göre kırpma sunuyor.
  • Tokenizer modele göre değişir: ToListAsync GPT-4'te tek, GPT-4o'da üç token; Claude'da sayım /v1/messages/count_tokens endpoint'iyle yapılır.

"strawberry" kelimesindeki r'lerin sayısını sorduğunuzda modelin yanlış cevap vermesi, harfleri hiç görmemesiyle ilgili. Prompt modele ulaşmadan önce bir tokenizer metni parçalara bölüp her parçayı sabit bir listeden bir ID'ye çeviriyor; " strawberry" tek başına 101830 numaralı bir token. Harfler bu sayının içinde kalıyor, model de onu açamıyor. Kelimeyi harf harf ayırıp yazdığınızda ise r'ler ayrı token'lar hâline geliyor ve sayılabilir oluyor.

Yazar tüm ölçümleri Microsoft.ML.Tokenizers 2.0.1 ile gpt-5 tokenizer'ında (o200k_base) yapıyor. `TiktokenTokenizer.CreateForModel("gpt-5")` ile bir kez oluşturulan tokenizer `CountTokens()` ve `GetIndexByTokenCount()` ile sayım ve bütçeye göre kırpma sağlıyor. Aynı anlamdaki Rumence metin İngilizce'nin yaklaşık %55 fazlası token'a mal oluyor; GUID gibi rastgele hex dizileri karakter başına neredeyse bir token yiyor. Fiyat, context window ve rate limit token cinsinden olduğu için karakter saymak yanıltıcı.

Gerçek dünyada kullanımı

  • LLM tabanlı bir log analiz aracında GUID ve hash dolu satırların context window'u ne kadar hızlı doldurduğunu ölçmek.
  • Çok dilli bir destek asistanında Türkçe/Rumence yanıtların İngilizce'ye göre maliyetini token bazında tahmin edip fiyatlandırma yapmak.
  • Uzun bir dosyayı prompt'a koymadan önce GetIndexByTokenCount() ile token bütçesine göre güvenli biçimde kırpmak.
  • Rate limit'i token/dakika cinsinden olan bir API'ye istek atan .NET servisinde istek boyutunu önceden hesaplamak.

Neden önemli

Maliyet, context window ve rate limit token ile ölçüldüğü için karakter veya kelime saymak yanıltıcı tahminler üretir; doğru tokenizer ile ölçmek prompt bütçesini ve faturaları doğrudan etkiler.

Bu özet, DEV Community: #csharp üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü