Construir un vocabulario: el algoritmo del tokenizer (generalmente BPE) comienza con bytes o caracteres individuales y fusiona iterativamente los pares más frecuentes. Después de 32K–128K fusiones, se obtiene un vocabulario donde las palabras comunes son tokens individuales ("the", "and", "function") y las palabras raras se dividen en piezas de subpalabras ("un" + "common", "pre" + "process" + "ing"). Los tokens especiales como <BOS> (inicio de secuencia), <EOS> (fin) y <PAD> (relleno) se agregan explícitamente.
Los vocabularios más grandes comprimen mejor el texto (menos tokens por oración = más barato, cabe más en el contexto) pero aumentan el tamaño de la tabla de embeddings del modelo. Un vocabulario de 128K con embeddings de 4096 dimensiones agrega ~500M de parámetros solo para las tablas de tokens. Para un modelo de 7B, eso es el 7% del total de parámetros sin hacer nada más que mapear tokens a vectores. Para un modelo de 1B, sería el 50%. Por eso los modelos más pequeños tienden a usar vocabularios más pequeños.
La cobertura lingüística de un vocabulario depende de su corpus de entrenamiento. El tokenizer temprano de Llama fue entrenado predominantemente en inglés y representaba los caracteres chinos como 3–4 tokens cada uno, haciendo que la inferencia en chino fuera 3–4 veces más cara que en inglés. El tokenizer de Llama 3 fue entrenado con datos multilingües más equilibrados, mejorando drásticamente la eficiencia en idiomas distintos al inglés. Este es un problema solucionable, pero requiere un esfuerzo deliberado — el valor predeterminado es la dominancia del inglés.