AutoTokenizer și apply_chat_template() în Hugging Face Hub & Transformers

Inferență & Biblioteca Transformers Transformers 5.x (octombrie 2026)

Încarcă tokenizatorul potrivit unui model și formatează conversațiile după șablonul de chat al modelului, gata de trimis la generate().

Sintaxă & invocare Python
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("HuggingFaceH4/zephyr-7b-beta")
inputs = tokenizer.apply_chat_template(mesaje, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)

Ce face AutoTokenizer și apply_chat_template()

AutoTokenizer.from_pretrained() încarcă tokenizatorul cu care a fost antrenat modelul, după fișierele de configurare din repository. Apelat pe text, tokenizatorul întoarce input_ids (ID-urile tokenilor) și attention_mask (care tokeni sunt reali și care sunt umplutură). tokenizer.decode(ids, skip_special_tokens=True) face drumul invers.

Pentru modelele de chat, apply_chat_template() transformă lista de mesaje (role și content) în formatul exact așteptat de model, cu tokenii speciali ai acestuia. add_generation_prompt=True adaugă la final începutul răspunsului asistentului, ca modelul să răspundă în loc să continue mesajul utilizatorului.

Cu tokenize=True și return_tensors="pt" obții direct tensori, pe care îi dai la model.generate(**inputs); documentația numește această variantă mai sigură. Dacă formatezi întâi ca text (tokenize=False) și tokenizezi separat, setează add_special_tokens=False: șablonul conține deja tokenii speciali, iar dublarea lor scade calitatea răspunsurilor.

Sintaxă și opțiuni

Opțiune / Parametru Descriere
from_pretrained(model_id) Încarcă tokenizatorul modelului.
apply_chat_template(mesaje, ...) Aplică șablonul de chat al modelului.
tokenize=True / False Întoarce tokeni sau textul formatat.
add_generation_prompt=True Adaugă începutul răspunsului asistentului.
return_tensors="pt" Întoarce tensori PyTorch.
add_special_tokens=False La tokenizarea unui text deja formatat cu șablonul.
padding_side="left" Pentru generare în loturi: LLM-urile nu sunt antrenate să continue după umplutură.

Exemple practice

Exemplul 1: Conversație tokenizată direct

mesaje = [
    {"role": "system", "content": "Ești util."},
    {"role": "user", "content": "Salut!"},
]
inputs = tokenizer.apply_chat_template(mesaje, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=128)
print(tokenizer.decode(outputs[0]))

Exemplul 2: Formatare ca text, apoi tokenizare fără tokeni speciali dublați

text = tokenizer.apply_chat_template(mesaje, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt", add_special_tokens=False)

Exemplul 3: Cum se împarte un text în tokeni

print(tokenizer.tokenize("inteligență artificială"))

Exemplul 4: Tokenizator pentru generare în loturi

tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1", padding_side="left")

Greșeli frecvente și bune practici

  • Tokenizezi rezultatul lui apply_chat_template(tokenize=False) cu setările implicite. Tokenii speciali apar de două ori; folosește add_special_tokens=False sau tokenize=True.
  • Scrii manual tokenii speciali ai modelului (<|im_start|> etc.). Șablonul din tokenizator îi pune corect pentru fiecare model.
  • Generezi în loturi cu umplutură la dreapta. Pentru LLM-uri documentația cere padding_side="left".

Comenzi înrudite