El vocabulario de un modelo es la tabla de todos los tokens que su tokenizador puede
producir, cada uno con un identificador entero. Su tamaño es una decisión de diseño: 30.522
entradas en BERT sin mayúsculas, 50.257 en GPT-2, 32.000 en Llama 2, algo más de 100.000 en
GPT-4 (Alammar y Grootendorst, 2024, pp. 47–55). Además de fragmentos de texto incluye tokens especiales sin
contenido léxico: comienzo y fin de texto, relleno, desconocido, máscara ([MASK]) y, en los
modelos de chat, marcas de turno como <|user|> y <|assistant|>
(Alammar y Grootendorst, 2024, pp. 47–48, 54–56).
El vocabulario ata al modelo con su tokenizador: el modelo guarda un embedding por cada entrada, y por eso un modelo preentrenado no puede cambiar de tokenizador sin volver a entrenarse (Alammar y Grootendorst, 2024, p. 57). En Phi-3 esa tabla es una matriz de 32.064 × 3.072, es decir, unos 98,5 millones de parámetros dedicados solo a representar tokens (Alammar y Grootendorst, 2024, p. 79). Del otro lado, la salida del modelo es una distribución sobre exactamente ese conjunto: no puede predecir nada que no esté en él.
Ejemplo mínimo. Un vocabulario de palabras enteras que contiene apology no sabe qué hacer
con apologetic si no la vio en el entrenamiento: tiene que devolver [UNK]. Uno de
subpalabras con apolog y sufijos como -y, -ize, -etic e -ist cubre esas formas y
cualquier derivado nuevo (Alammar y Grootendorst, 2024, p. 44).
La tentación lingüística es identificar el vocabulario con un léxico, pero no lo es. Contiene fragmentos sin significado, secuencias de espacios (GPT-4 tiene un token para cada tira de hasta 83 espacios) y palabras clave de programación como elif (Alammar y Grootendorst, 2024, p. 51). Y es cerrado: el léxico de una lengua es productivo y abierto, mientras que el vocabulario de un modelo se fija antes del entrenamiento. Su apertura a palabras nuevas se obtiene combinando piezas ya existentes, no incorporando entradas.