🔤 Tokenización y Embeddings
El modelo solo entiende números. Aquí verás cómo convertimos texto en IDs y cómo las palabras encuentran su lugar en el espacio semántico.
De texto a números
El modelo solo entiende números. El tokenizador convierte texto en una secuencia de IDs numéricos.
Cada ID = una "subpalabra" del vocabulario del modelo.
¿Qué es una subpalabra?
Palabras muy comunes son un solo token. Palabras raras se dividen en partes más pequeñas.
⚠️ El tokenizador afecta directamente al coste porque el precio de APIs y el contexto máximo se miden en tokens.
Byte-Pair Encoding (BPE)
El algoritmo de tokenización más usado:
- Normalización Unicode (NFKC: Ñ → N~, etc.)
- Pre-tokenización: split por espacios y signos de puntuación
- Añadir tokens del byte-level (256 tokens base)
- Fusionar iterativamente los pares más frecuentes hasta alcanzar el tamaño de vocabulario deseado
Corpus: "aa ab aa ab" (simplificado)
Vocabulario inicial: [a, b]
Iteración 1: par "a a" aparece 4 veces → añadir token "aa"
Iteración 2: par "aa a" (de "aa a b") → fusionar...
...
Vocabulario final: [a, b, aa, ab, aa_, ...] + espacio de bytes Vocabularios por modelo:
| Modelo | Tamaño vocab | Tokenizador |
|---|---|---|
| LLaMA 2/3 | 32,000 | BPE (SentencePiece) |
| LLaMA 3.1 | 128,000 | BPE (tiktoken) |
| Qwen 2.5 | 151,936 | BPE (HuggingFace) |
| DeepSeek V2/V3 | 102,400 | BPE (HuggingFace) |
| GPT-4 | ~100,000 | BPE (tiktoken cl100k_base) |
Longitud de tokens por idioma:
SentencePiece vs tiktoken
- SentencePiece (LLaMA 2): entrena directamente sobre texto raw, sin pre-tokenización. Soporta BPE y unigram LM.
- tiktoken (GPT-4, LLaMA 3.1): pre-tokenización con regex (patrón GPT-2 mejorado), luego BPE. Más rápido, mejor manejo de espacios y números.
Bytes-to-BPE (BBPE)
Cuando un carácter no está en el vocabulario (emojis, caracteres raros), se descompone en bytes UTF-8 individuales.
"🤖" → bytes: F0 9F A4 96 → [198, 154, 157, 145] (token IDs)
Esto garantiza que cualquier string se puede tokenizar, pero multiplica
la longitud para caracteres no latinos. Tokenizador en vivo
Escribe texto y observa cómo se divide en tokens simulando el proceso BPE. Cada token se colorea con un ID numérico.
El espacio semántico
Un embedding es un mapa. Cada palabra tiene una coordenada en un espacio de muchas dimensiones. Palabras con significado parecido tienen coordenadas cercanas.
Espacio 2D (simplificado para visualizar):
│
"casa"│ "hogar"
│
"perro" "gato"
│
─────┼────────────── "león"
│
│
│ "coche" "auto"
│ En realidad es 4096 dimensiones. No podemos visualizarlo, pero la idea es la misma: cercanía en el espacio = similitud semántica.
La capa de embedding
La capa de embedding es una matriz E de tamaño [vocab_size × d_model].
Token ID 492 (ej: "gato") → E[492] → vector de 4096 números:
[0.21, -0.15, 0.83, 0.04, ..., -0.55]
Toda la secuencia:
"El gato está sobre la" → [5 × 4096] matrix Operaciones con embeddings
Estos patrones emergen naturalmente durante el entrenamiento. No se programan explícitamente.
Teoría de espacios semánticos
Los embeddings capturan la distribución contextual de las palabras (hipótesis distribucional de Harris: "palabras en contextos similares tienen significados similares").
La dimensión d_model es un hiperparámetro crítico: muy pequeña → el modelo no tiene capacidad para separar conceptos; muy grande → overfitting.
Proyecciones en la práctica
- PCA a 2D captura ~5-15% de la varianza total
- t-SNE/UMAP capturan estructura local pero globalmente distorsionan
- En 4096D, dos vectores aleatorios en [-1,1] tienen una distancia coseno cercana a 0 (ortogonalidad accidental rara en alta dimensionalidad)
Espacio Semántico 3D
Visualización interactiva del espacio de embeddings. Palabras con significado similar aparecen cerca. Gira y haz zoom con el ratón.