Lo que un Tokenizador Come se Convierte en lo que Conoce
Dieta del Tokenizador: Una Definición
Un tokenizador Harris se entrena en una muestra de corpus. Realiza análisis distribucional a través de esa muestra, selecciona N segmentos que se repiten con mayor fuerza, & los escribe en un vocabulario. Después del entrenamiento, esos N segmentos se convierten en un alfabeto fijo que un modelo de lenguaje usa para todo: entrenamiento, inferencia, cada entrada, cada salida.
Dieta del tokenizador = una muestra de texto en la que se entrena un tokenizador.
Dieta de entrenamiento = un corpus en el que se entrena un modelo de lenguaje.
Cuando dos dietas difieren, un tokenizador aprende segmentos ajustados para texto que un modelo nunca verá. La capacidad de embedding (una ranura por entrada del vocabulario) se gasta en segmentos que no generan recompensa durante el entrenamiento.
El Error de ANDREA-12M
ANDREA-12M entrenó su tokenizador Harris en un archivo crudo de megachat-v8.txt. Ese archivo contenía muestras de código y datos de llamadas a herramientas. Sin embargo, el currículo de entrenamiento excluyó código y llamadas a herramientas; ANDREA-12M solo vio texto conversacional.
Resultado: un tokenizador aprendió segmentos de palabras clave de Python, llaves JSON, banderas de shell. Un modelo entrenado en entradas de diccionario y diálogo. Solo el 36.4% de los segmentos se superpusieron con una muestra ponderada por el currículo. El 63.6% restante de las ranuras del vocabulario se asignó a segmentos que un modelo nunca encontraría durante el entrenamiento.
Por qué eso importa
Cada entrada del vocabulario consume parámetros de embedding: una fila de una matriz de embedding con forma V × d_model (cubierto en la actividad 4). Con V = 4353 y d_model = 384, cada ranura del vocabulario cuesta 384 flotantes. Desperdiciar el 63.6% desperdicia el 63.6% de una matriz de embedding en datos que un modelo nunca ve.
Enuncia una Regla de Dieta
Qué tan grande debería ser N
Una Exploración de Ciencia del Vocabulario
ANDREA-120M realizó un experimento de ciencia del vocabulario: entrena tokenizadores Harris con diferentes valores de N (segmentos solicitados) en el mismo corpus de 1.25B caracteres de manguera de incendio. Mide cuántos segmentos encuentra realmente un tokenizador. Grafica los resultados.
| N solicitado | Segmentos reales encontrados | Estado |
|---|---|---|
| 2,048 | 2,048 | No saturado (espacio para crecer) |
| 4,096 | 4,096 | No saturado |
| 8,192 | 8,192 | Punto de saturación |
| 16,384 | 13,106 | Corpus agotado |
Qué significa la saturación
Con N pequeño, un corpus tiene muchos patrones recurrentes; un tokenizador llena cada ranura que solicita. Con N grande, un tokenizador se queda sin límites estadísticamente significativos. Un corpus de 1.25B caracteres contiene aproximadamente 13,106 segmentos distintos con forma de morfema por encima de un umbral de frecuencia. Solicitar 16,384 produce 13,106; las 3,278 ranuras restantes se rellenan o quedan vacías.
Saturación: un punto donde N solicitado = N encontrado. Más allá de la saturación, un tokenizador no puede descubrir más segmentos sin diluir la calidad (bajar umbrales de frecuencia & aceptar ruido).
Punto Dulce en 8192
ANDREA-120M eligió N = 8192. Un razonamiento:
- Por debajo de 8192 (p. ej. 4096): el vocabulario no captura suficientemente los morfemas comunes; las secuencias se fragmentan en más tokens; el rendimiento cae.
- A 8192: cada ranura de segmento se mapea a un patrón real y recurrente en un corpus.
- Por encima de 8192: rendimientos decrecientes; 13,106 < 16,384 significa que las ranuras se desperdician.
Vocabulario final de ANDREA-120M: 256 + 8192 + 1 = 8449 tokens. Compresión promedio: 5.91 bytes UTF-8 por token, lo que significa que cada token reemplaza ~5.9 bytes de texto crudo. Esa proporción establece el contexto efectivo de un modelo: a 1024 tokens × 5.91 bytes/token, ANDREA-120M lee aproximadamente 6,050 caracteres de contexto por pasada hacia adelante.
Por encima o por debajo de la saturación
De Dónde Salió el 63.6%
Contando las Ranuras Desperdiciadas
El tokenizador de ANDREA-12M entrenado en megachat-v8.txt crudo (4096 segmentos solicitados, encontrados). Un equipo tomó una muestra ponderada por currículo: un corpus ponderado por la frecuencia con que cada fuente fue seleccionada por un bandido. Volvieron a ejecutar un análisis de Harris en esa muestra ponderada & preguntaron: ¿cuántos de los 4096 segmentos originales aún aparecen?
Resultado: 36.4% de superposición. 1,491 de 4,096 segmentos coincidieron con la ponderación del currículo. Los 2,605 segmentos restantes provenían de fuentes que el modelo excluyó.
El 63.6% de las ranuras de vocabulario se asignaron a bytes que el modelo nunca vio.
Costo de Embedding
Cada entrada del vocabulario ocupa una fila de una matriz de embedding con forma (V, d_model). Para ANDREA-12M:
- V = 4353 (256 + 4096 + 1)
- d_model = 384
- Parámetros de embedding = V × d_model = 4353 × 384 = 1,671,552 parámetros
El 63.6% de esos parámetros no se usaron para el entrenamiento conversacional. 1,063,107 parámetros asignados, 0 señal de recompensa. ANDREA-12M sobrevive porque 256 bytes base siempre cubren cualquier carácter; pero la capacidad por parámetro cayó bruscamente.
Cómo ANDREA-120M lo Solucionó
El tokenizador de ANDREA-120M se entrenó en una manguera completa (1.25B caracteres, 21 fuentes) en saturación N = 8192. Un corpus de entrenamiento = la misma manguera. Alineación dietética: 100%. Solapamiento resultante en muestra ponderada por chat: 36.5%. (Nota: 36.5% es solapamiento, no cobertura; el chat solo es un subconjunto de la manguera completa, por lo que este número se comporta diferente al 36.4% de 12M.)
Compresión efectiva: 5.91 bytes UTF-8 por token. La matriz de embedding de ANDREA-120M: 8449 × 768 = 6,488,832 parámetros. Cada parámetro gana una señal de recompensa porque cada segmento se mapea a texto en el que el modelo realmente se entrena.
Cobertura Versus Solapamiento
Por qué importan 5.91 Bytes Por Token
Una Relación de Compresión
Bytes UTF-8 promedio por token mide cuánto texto crudo comprime cada entrada del vocabulario. ANDREA-120M promedia 5.91. Un modelo con piezas más cortas (3 bytes/token) lee menos contexto por pasada forward; un modelo con piezas más largas (8 bytes/token) lee más pero se entrena más lento (cada pieza necesita más muestras para aprender bien).
Contexto Efectivo
| Cantidad | Valor |
|---|---|
| Ventana de contexto de tokens | 1,024 tokens |
| Bytes promedio por token | 5.91 |
| Contexto efectivo en caracteres | 1024 × 5.91 ≈ 6,050 |
Aproximadamente 6,000 caracteres UTF-8 caben en una pasada forward de ANDREA-120M. Una página de prosa inglesa densa tiene ~3,000-4,000 caracteres; ANDREA lee aproximadamente una página y media por pasada.
La Dieta Aumenta la Compresión
Un tokenizador bien alineado comprime mejor. Cuando un tokenizador aprende segmentos que se repiten en un corpus de entrenamiento, cabe más texto por token. El tokenizador mal alineado de ANDREA-12M comprimía peor en chat (más bytes gastados en fragmentos de fallback de bytes porque los segmentos de chat eran más escasos en el vocabulario). El tokenizador alineado con dieta de ANDREA-120M mantiene un fragmento con forma de chat en un camino rápido y scripts raros en un fallback de bytes.
La Actividad 4 Continúa
La Actividad 4 (grow_a_language_model_embeddings) cubre qué les sucede a esas 8449 entradas del vocabulario: se convierten en filas de una matriz de embedding con forma V × d_model, luego se agregan embeddings de posición aprendidos antes de fluir hacia el primer bloque transformer.