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șteadd_special_tokens=Falsesautokenize=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".