English · Español
02 — CBOW y Skip-Gram (Word2Vec a nivel panorámico)¶
🇪🇸 Word2Vec (2013) plantó la semilla: un token se conoce por su compañía. Predice el centro a partir del contexto (CBOW) o el contexto a partir del centro (Skip-Gram). Implementamos CBOW por gradientes más estables, pero el principio — entrenar embeddings con un objetivo predictivo sobre el corpus — es lo que importa.
Los dos objetivos de Word2Vec¶
Mikolov et al. 2013 ("Efficient Estimation of Word Representations in Vector Space") introdujeron dos arquitecturas complementarias para aprender embeddings:
CBOW — Continuous Bag of Words¶
Predice el token centro a partir de una ventana de tokens de contexto.
Context: [I, work, ?, every, day] (window size 4, two tokens each side)
Center: "hard"
Prediction: model says which token most likely sits in the ?
Skip-Gram¶
Predice el contexto a partir del centro.
Ambos entrenan la misma matriz de embeddings \(E\). La diferencia es la estructura de la pérdida.
Por qué implementamos CBOW¶
Tres razones:
- Señal de gradiente más limpia. Promediar las embeddings de contexto antes de la proyección da un objetivo único y bien condicionado. El gradiente de Skip-Gram se suma sobre múltiples pares (contexto | centro) independientes y tiende a ser más ruidoso sobre corpus pequeños.
- Más eficiente con nuestro corpus minúsculo. CBOW hace una actualización por token centro; Skip-Gram hace \(2k\) actualizaciones (para ventana \(k\)).
- La pedagogía es la misma. Una vez que Borja tiene la intuición de CBOW, Skip-Gram es un cambio mental de 10 minutos (y lo esbozamos abajo).
La matemática de CBOW¶
Sea \(E \in \mathbb{R}^{V \times d}\) la matriz de embeddings de entrada y \(W \in \mathbb{R}^{V \times d}\) la proyección de salida (típicamente desatada de \(E\) en Word2Vec; las ataremos en los transformers de la Fase 17). Para una ventana de contexto de tamaño \(k\) (tokens a cada lado, por lo que \(2k\) tokens de contexto en total) alrededor del token centro \(t\):
- Busca las embeddings de contexto:
(Promedia las embeddings de los tokens de contexto.)
- Proyecta a logits:
- Softmax + pérdida de entropía cruzada:
(El cross_entropy_from_logits de la Fase 05.)
La pérdida sobre el corpus es la suma (o media) sobre todos los centros \(t\).
La matemática de Skip-Gram (esbozo)¶
Solo a efectos de comparación — no implementado en esta fase. Centro \(t\), predice cada palabra de contexto de forma independiente:
Cada palabra de contexto es un término de entropía cruzada separado usando la misma predicción \(E[t] W^\top + b\).
Skip-Gram tiende a comportarse mejor con palabras raras porque cada palabra rara recibe varias actualizaciones por aparición. CBOW tiende a comportarse mejor con palabras frecuentes porque el promediado estabiliza los contextos comunes. Nuestro corpus es pequeño y bien balanceado (cada verbo aparece con igual frecuencia en las plantillas); CBOW es la opción correcta.
Negative sampling (fuera de alcance aquí)¶
El softmax en la pérdida tiene un denominador sobre los \(V\) tokens. Para nuestro \(V = 64\), esto es trivial. Para el setup original de Word2Vec (\(V = 10^6\)), es caro — de ahí el negative sampling: reemplaza el softmax completo por una clasificación binaria contra \(k\) tokens "negativos" aleatorios. No implementamos negative sampling; el corpus es lo bastante pequeño para el softmax completo.
Se menciona aquí para que:
- Cuando leas papers/código de Word2Vec, reconozcas la técnica.
- Cuando escales más tarde, sepas qué optimización pedir.
El tamaño de ventana \(k\)¶
Usamos \(k = 2\) (así que 4 tokens de contexto alrededor de cada centro). Elección de \(k\):
- \(k\) pequeño (1-2): captura estructura sintáctica local. Bueno para nuestras frases cortas y plantilladas.
- \(k\) grande (5-10): captura co-ocurrencia "temática" más difusa. Usado por Word2Vec en corpus de noticias.
Para el corpus de §A13 — frases cortas como I work every day . — \(k = 2\) da un contexto que incluye el pronombre sujeto y un marcador temporal. Ventanas mayores incluirían otras frases y diluirían la señal.
La dimensión de embedding \(d\)¶
La regla práctica de PHASE_13_PLAN.md: \(d \approx V^{1/4}\) para vocabularios minúsculos. Para \(V = 64\), eso da \(d \approx 3\). Usamos \(d = 32\) — sobreparametrizado por 10× — por dos razones:
- Margen para el modelo aguas abajo. El transformer de la Fase 17 espera \(d_\text{model} = 64\), y la embedding acabará atada como una fila de esa matriz. Empezar en \(d = 32\) mantiene las cosas manejables; si necesitamos expandir a 64 más tarde, podemos reentrenar o hacer zero-pad.
- Fidelidad de la visualización. La proyección UMAP de \(d = 3\) a \(d = 2\) es un aplastamiento casi trivial; de \(d = 32\) a \(d = 2\) da a UMAP espacio suficiente para encontrar estructura.
La dinámica de entrenamiento esperada¶
Para nuestro corpus, sobre un CBOW con \(d = 32, k = 2\), pérdida softmax completa, SGD con momentum:
- Epoch 1: la pérdida cae de \(\log V \approx 4{,}16\) (uniforme aleatorio) a ~3,5 a medida que el modelo aprende que algunos tokens (
the,a,,) son más frecuentes que otros. - Epoch 5–10: la pérdida cae a ~2,5 a medida que el modelo aprende la co-ocurrencia sujeto-verbo (
I work,she works, etc.). - Epoch 20: pérdida ~2,0. La geometría está ahora lo bastante estructurada para plotearla.
Si tu pérdida se estanca muy por encima de \(\log V \approx 4{,}16\), tienes un bug — probablemente el flujo de gradiente no llega a \(E\). (El test de gradiente del lab 00 lo cazará.)
Si tu pérdida cae a ~0, has sobreajustado — las embeddings memorizan la co-ocurrencia específica de posición. Para nuestro corpus pequeño, un ligero sobreajuste va bien porque la geometría (lo que nos importa) es robusta frente a ello.
Qué NO cubre este archivo¶
- GloVe. Otro método clásico de embeddings (Pennington et al. 2014). Fuera de alcance.
- fastText, embeddings de subword. La Fase 11 trató la tokenización por subword; no la rehacemos aquí.
- Embeddings contextuales (BERT, GPT). Fase 15+. CBOW da un vector por token, independientemente del contexto.
- Implementación de negative sampling. Mencionada arriba; no codificada.
Siguiente: 03-similarity-and-visualization.md