Transformers documentation

Tokenizers

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Tokenizers

Bir tokenizer, metni bir modelin girdileri olan tensörlere dönüştürür. Metni normalize eder ve böler, tokenizasyon algoritmasını uygular, özel token'lar ekler ve çıktı kimliklerini tekrar metne çözer.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")
tokenizer("Sphinx of black quartz, judge my vow.", return_tensors="pt")
{
    'input_ids': tensor([[     2, 235277,  82913,    576,   2656,  30407, 235269,  11490,    970,  29871, 235265]]),
    'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
}

Bu kılavuz, yükleme, kodlama, çözümlü kodlama, toplu işleme ve kullanılabilir tokenizer arka uçlarını kapsar.

Bir tokenizer yükleyin

Bir AutoTokenizer sınıfı veya modele özgü bir tokenizer sınıfı ile bir tokenizer yükleyin.

AutoTokenizer
model-özel tokenizer

AutoTokenizer.from_pretrained() model yapılandırmasını okur, doğru tokenizer sınıfını çözer ve bir örneğini döndürür. Tokenizer sınıfını önceden bilmenize gerek yoktur. Çoğu tokenizer, Tokenizers kütüphanesinden hızlı, Rust tabanlı bir tokenizer olan TokenizersBackend alt sınıfına çözümlenir.

AutoTokenizer ile yükleme önerilen yaklaşımdır.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")

Kodlama ve çözümlü

TokenizersBackend.call() metodu, metni veya bir metin grubunu input_ids, attention_mask ve diğer model girdilerine kodlar. Ayrıca dolguyu (padding), kırpma işlemini (truncation) ve özel token eklemeyi kontrol eder.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")
tokenizer("Sphinx of black quartz, judge my vow.", return_tensors="pt")
{
    'input_ids': tensor([[     2, 235277,  82913,    576,   2656,  30407, 235269,  11490,    970,  29871, 235265]]),
    'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
}

TokenizersBackend.encode() benzerdir ancak yalnızca input_ids döndürür.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")
input_ids = tokenizer.encode("Sphinx of black quartz, judge my vow.")
[2, 235277, 82913, 576, 2656, 30407, 235269, 11490, 970, 29871, 235265]

TokenizersBackend.decode(), tek bir diziyi veya input_ids olarak tokenize edilmiş bir partiyi metne geri dönüştürür.

tokenizer.decode(input_ids)
'<bos>Sphinx of black quartz, judge my vow.'

TokenizersBackend.decode() tam tokenizasyon boşluklarını korur. Noktalama işaretlerinden önceki boşlukları kaldırmak için clean_up_tokenization_spaces değerini ayarlayın ve çıktıdan özel tokenları çıkarmak için skip_special_tokens değerini ayarlayın.

tokenizer.decode(input_ids, skip_special_tokens=True)
'Sphinx of black quartz, judge my vow.'

Özel jetonlar

Özel jetonlar, bir dizide yapısal sınırları işaretler; örneğin dizinin başlangıcı veya dolgu konumları. Her model kendi özel jeton kümesini tanımlar. Tokenizer'ı çağırdığınızda bunları ekler.

input_ids = tokenizer.encode("Sphinx of black quartz, judge my vow.")
[2, 235277, 82913, 576, 2656, 30407, 235269, 11490, 970, 29871, 235265]
tokenizer.decode(input_ids)
'<bos>Sphinx of black quartz, judge my vow.'

extra_special_tokens argümanıyla ek adlandırılmış özel jetonlar kaydedin. Çok modlu modeller bunları görsel, video veya ses için yer tutucu olarak kullanır.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(
    "google/gemma-3-4b-pt",
    extra_special_tokens={"image_token": "<image>"}
)

Toplu işleme

Batch processing, birden fazla diziyi tek bir çağrıda tokenizasyon yapar. TokenizersBackend, Rust tabanlı arka ucu işleri iş parçacıkları arasında paralelleştirdiği için büyük batch'leri daha hızlı işler.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")
tokenizer(
    [
        "Sphinx of black quartz, judge my vow.",
        "Pack my box with five dozen liquor jugs.",
        "How vexingly quick daft zebras jump!"
    ],
    return_tensors="pt"
)

Toplu işleme, tüm dizilerin aynı uzunlukta olmasını gerektirir. Dolgu ve kırpma, farklı uzunluklardaki dizileri işlemek için kullanılan stratejilerdir.

Dolgu

Padding, bir batch içindeki en uzun diziyle eşleşmesi için daha kısa dizilere özel token'lar ekler. Dikkat maskesi, modelin bunları yok sayması için padding konumlarını 0 olarak işaretler. En uzun diziye kadar padding yapmak için padding=True ayarlayın veya sabit bir boyuta kadar padding yapmak için max_length parametresini iletin.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")
tokenizer(
    [
        "Sphinx of black quartz, judge my vow.",
        "Pack my box with five dozen liquor jugs.",
        "How vexingly quick daft zebras jump!"
    ],
    return_tensors="pt",
    padding=True,
)
{
    'input_ids': tensor([
        [     2, 235277,  82913,    576,   2656,  30407, 235269,  11490,    970,  29871, 235265],
        [     0,      2,   6519,    970,   3741,    675,   4105,  25955,  42184, 225789, 235265],
        [     0,      2,   2299,  73378,  17844,   4320, 224463,   4949,  48977,  9902, 235341]
    ]),
    'attention_mask': tensor([
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    ])
}

Büyük dil modelleri, sağ taraftan bir sonraki token'ı tahmin eden üretimi bozmamak için sol tarafta dolgu yapar.

Kesme

Truncation, bir dizinin maksimum uzunluğa sığması için jetonları kırpma işlemidir. Bunu etkinleştirmek için truncation=True ayarlayın ve max_length belirtin.

Doldurma ve kısaltma birlikte çalışır. Kısa dizilere dolgu jetonları eklenirken uzun dizilerin sonundaki jetonlar atılır. Birlikte, paketlenmiş dikdörtgen bir tensör oluştururlar.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")
tokenizer(
    [
        "Sphinx of black quartz, judge my vow.",
        "Pack my box with five dozen liquor jugs.",
        "How vexingly quick daft zebras jump!"
    ],
    return_tensors="pt",
    padding=True,
    truncation=True,
    max_length=5
)
{
    'input_ids': tensor([
        [     2, 235277,  82913,    576,   2656],
        [     2,   6519,    970,   3741,    675],
        [     2,   2299,  73378,  17844,   4320]
    ]),
    'attention_mask': tensor([
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1]
    ])
}

Arka Uçlar

Her model tokenizer'ı tek bir dosyada tanımlanır ve dört tokenizasyon arka ucunu destekler.

backenduygulamaaçıklama
TokenizersBackendTokenizersçoğu model için varsayılan
SentencePieceBackendSentencePieceSentencePiece gerektiren modeller
PythonBackendPythonözel, özelleştirilmiş tokenizörler gerektiren modeller
MistralCommonBackendmistral-commonMistral ve Pixtral modelleri

Tüm arka uçlar PreTrainedTokenizerBase sınıfından türetilir ve kodlama, çözümleme, dolgu, kısaltma, kaydetme ve yükleme için aynı API'leri paylaşır. Fark, altta çalışan tokenizasyon hattının hangisi olduğudur.

AutoTokenizer, from_pretrained() çağrıldığında kullanılabilir en iyi arka ucu seçer.

  1. tokenizer_class alanı için tokenizer_config.json dosyasını okur.
  2. Kayıt defteri tokenizer_class değerini bir sınıf adıyla eşleştirir. Çözümlenen sınıf, dört backend’den birinden türetilir. Örneğin, GemmaTokenizer TokenizersBackend sınıfından türetilirken, SiglipTokenizer SentencePieceBackend sınıfından türetilir. GLM gibi bazı modeller, tokenizer.json dosyası iş akışını tamamen tanımladığı için doğrudan TokenizersBackend sınıfına eşlenir. GemmaTokenizer, tokenizer.json dosyasının yakalayamadığı ek model özel ayarlarını Python içinde tanımladığı için bir alt sınıf olarak mevcuttur. mistral-common gibi bir backend yüklü değilse, AutoTokenizer TokenizersBackend sınıfına geri düşer.

TokenizersBackend'e geri dön

Bazı modellerin ayrı bir tokenizer sınıfı yoktur ve bazı checkpoint’lerin, gerçek tokenizer.json dosyalarıyla eşleşmeyen bir tokenizer_class değeri vardır. AutoTokenizer, pipeline’ı genel TokenizersBackend üzerinden tokenizer.json dosyasından yükleyerek her iki durumu da ele alır. Hub’daki sınıf adından ziyade serileştirilmiş tokenizer’ı önceliklendirir; bu da eşleşmeyen bir tokenizer_class’ın hatalı token kimlikleri üretmesi gibi sorunları giderir.

Bir checkpoint, üç nedenden biri için genel bir TokenizersBackend olarak çözümlenir.

NedenDavranışÖrnekler
Özel bir tokenizer sınıfı yokModel türü, tokenizer.json hattı tamamen tanımladığı için doğrudan TokenizersBackend'e eşlenir.GLM, Granite, OLMo 2, GPT BigCode
Bilinen hatalı Hub tokenizer sınıfıHub'da kayıtlı tokenizer_class, model türü için yanlış olduğundan AutoTokenizer bunu yoksayar ve bunun yerine tokenizer.json dosyasını yükler.DeepSeek V3, LLaVA, Qwen2, ModernBERT
Belirli bir kontrol noktası geçersiz kılmaHub yapılandırmasında hâlâ düzeltme gerektiren bir checkpoint, model kimliğiyle eşleştirilir ve arka uca zorlanır.deepseek-ai/DeepSeek-R1-Distill-*, Salesforce/blip2-*, google/umt5-small

Etkilenen model türleri ve kontrol noktaları, Hub üzerindeki yapılandırmalar düzeltildikçe artar. Güncel küme için tokenization_auto.py içindeki MODELS_WITH_INCORRECT_HUB_TOKENIZER_CLASS ve MODEL_IDS_TO_TOKENIZERS_BACKEND tanımlarına bakın.

Yedekleme otomatik olarak gerçekleşir ve from_pretrained() çağrısını nasıl yaptığınızı değiştirmez. Sonuçta oluşan tokenizer, tokenizer.json'in belirttiği şekilde kodlar ve çözer.

Bir belirteç ayrıştırıcısının hangi arka ucu kullandığını backend özelliğiyle kontrol edin.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")
tokenizer.backend
'tokenizers'

Tokenizör mimarisini incele

_tokenizer özniteliği ile bir tokenizer'ın iç bileşenlerini (normalizer, pre-tokenizer, model, decoder) inceleyin.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-2b")
print(tokenizer._tokenizer.normalizer)
print(tokenizer._tokenizer.pre_tokenizer)
print(tokenizer._tokenizer.model)
print(tokenizer._tokenizer.decoder)

Kaynaklar

Update on GitHub