Un token especial es una entrada del vocabulario que no corresponde a ningún
fragmento de texto sino a una función: marcar dónde empieza o termina una secuencia, separar
dos textos, rellenar posiciones vacías, tapar una palabra o indicar quién habla
(Alammar y Grootendorst, 2024, p. 47). El tokenizador de BERT tiene cinco: [CLS],
[SEP], [PAD], [UNK] (para lo que no sabe codificar) y [MASK]
(2024, pp. 47–48); el de GPT-2, uno solo: <|endoftext|>
(2024, p. 49).
Ejemplo mínimo. Para decidir si una oración implica a otra, BERT recibe
[CLS] el perro duerme [SEP] el animal descansa [SEP]
[SEP] separa las oraciones (junto con un embedding que indica a cuál pertenece cada
token) y el vector final de [CLS] resume el par para clasificarlo
(Devlin et al., 2019, pp. 4174–4175). [MASK] trae un problema curioso: aparece en el
preentrenamiento pero nunca en el ajuste fino; por eso BERT
solo lo usa en el 80 % de las posiciones elegidas para ocultar (2019, p. 4174) (ver
modelado enmascarado).
Con los asistentes de 2023 llegaron los tokens de turno: <|user|>, <|assistant|>,
<|system|> (Alammar y Grootendorst, 2024, p. 54). La plantilla de chat de Phi-3 envuelve cada intercambio
como <s><|user|> … <|end|><|assistant|>. Es el formato con que se entrenó el modelo y le
dice quién dijo qué y cuándo parar: terminar un turno es, para el modelo, predecir <|end|>
(2024, p. 169).
Estos tokens no tienen contenido léxico; su vector significa lo que el entrenamiento le haga
significar. Sin ajuste fino, el vector de [CLS] resulta un mal resumen de la oración, peor
que promediar vectores GloVe (Reimers y Gurevych, 2019, p. 3982): un caso extremo de significado como
papel funcional, parecido al de los signos auxiliares de un lenguaje formal. Y la plantilla
muestra algo incómodo: en un chat, «quién habla» no es un hecho externo sino un token más en
la misma secuencia que todo lo demás. La frontera entre las instrucciones del operador y el
texto del usuario es una convención aprendida, no una barrera (ver
prompt de sistema y jailbreak).