Módulo 2: ¿Cómo funcionan Embeddings?

Bienvenido al Módulo 2: ¿Cómo funcionan Embeddings?

Descripción

Bienvenido al segundo módulo de Embeddings Deep Dive, donde profundizarás en la arquitectura técnica que convierte texto en vectores: Transformers encoder-only, tokenización, self-attention, y pooling strategies.

En el Módulo 1 usaste embeddings como "cajas negras" (texto → vector). En este módulo abrirás esa caja y entenderás el pipeline completo: desde caracteres hasta el embedding final de 1536 dimensiones. También construirás un API client robusto con retry logic, rate limiting y batch processing.

Al finalizar este módulo, podrás tomar decisiones informadas sobre modelos de embeddings y escribir código production-ready para consumir APIs.


¿Por qué este módulo es crítico?

Para tu código:

Entender el pipeline técnico te permite:

  • ✅ Elegir el modelo correcto (OpenAI vs SBERT vs BGE)
  • ✅ Debuggear cuando embeddings no funcionan como esperas
  • ✅ Optimizar tokenización para reducir costos
  • ✅ Implementar batching efectivo (10x más rápido)
  • ✅ Manejar edge cases (texto vacío, muy largo, etc.)

Sin entender el "cómo", solo copias código sin saber por qué funciona.

Para tu carrera:

En entrevistas técnicas para AI Engineer, te preguntarán:

  • "¿Cómo genera un Transformer un embedding?"
  • "¿Qué es self-attention y por qué es importante?"
  • "¿Cómo optimizarías llamadas a APIs de embeddings?"
  • "¿Por qué normalizar embeddings?"

Este módulo te da las respuestas con profundidad técnica.

Para sistemas en producción:

Sistemas production-ready requieren:

  • Batch processing (no 1 API call por documento)
  • Rate limiting (evitar throttling)
  • Retry logic (manejar errores transitorios)
  • Cost optimization (cachear, comprimir)

Este módulo enseña estos patterns.


Conexión con Módulo 1

Lo que ya sabes (Módulo 1):

  • ✅ Qué son embeddings (vectores que capturan significado)
  • ✅ Propiedades vectoriales (cosine similarity)
  • ✅ Espacios de alta dimensionalidad (1536D)
  • ✅ Casos de uso reales (RAG, search, recommendations)
  • ✅ Arquitectura high-level (4 pasos: tokenización → transformer → pooling → normalización)

Lo que aprenderás (Módulo 2):

  • 🎯 Tokenización profunda (BPE, WordPiece, tiktoken código)
  • 🎯 Transformer encoders (self-attention, feed-forward layers)
  • 🎯 Contextualización (cómo "bank" cambia según contexto)
  • 🎯 Pooling strategies (mean vs CLS vs max, implementación)
  • 🎯 Normalization (por qué y cuándo normalizar)
  • 🎯 OpenAI API avanzado (batching, rate limiting, error handling)
  • 🎯 API client robusto (production-ready)

De conceptos high-level a implementación técnica profunda.


Objetivos de este módulo

Al completar este módulo, serás capaz de:

Nivel conceptual (Cápsulas 02-03):

  • ✅ Explicar tokenización (BPE, sub-palabras)
  • ✅ Entender Transformer encoders (arquitectura)
  • ✅ Comprender self-attention (contexto)
  • ✅ Diferenciar embeddings contextuales vs estáticos

Nivel técnico (Cápsulas 04-05):

  • ✅ Implementar tokenización con tiktoken
  • ✅ Comparar pooling strategies (mean, CLS, max)
  • ✅ Normalizar embeddings (L2 norm)
  • ✅ Usar OpenAI API avanzado (parámetros)

Nivel producción (Cápsulas 06-08):

  • ✅ Implementar batch processing
  • ✅ Manejar rate limiting
  • ✅ Implementar retry logic con exponential backoff
  • ✅ Construir API client production-ready

Roadmap del módulo

Cápsula 01 (esta): Introducción al Módulo

Contexto, objetivos, progresión, conexión con Módulo 1.

Cápsula 02: Transformer Encoders

Arquitectura encoder-only, self-attention (conceptual), feed-forward layers.

Cápsula 03: Tokenización

BPE, WordPiece, tiktoken código, sub-palabras, vocabulario.

Cápsula 04: Contextualización

Embeddings contextuales vs estáticos, "bank" example, por qué contexto importa.

Cápsula 05: Pooling Strategies

Mean, CLS, max pooling, implementación con numpy, comparación.

Cápsula 06: Normalization

L2 norm, por qué normalizar, dot product vs cosine similarity.

Cápsula 07: OpenAI API Advanced

API parameters, batching, error handling, rate limits.

Cápsula 08: Mini-Proyecto - API Client Robusto

Retry logic, rate limiting, batch processing, production-ready.


Duración estimada

ActividadTiempo
Lectura de cápsulas 02-0750-60 min
Práctica durante lectura30-40 min
Mini-proyecto (cápsula 08)40-50 min
Total~2.5 horas

Nota: Este módulo es más técnico que Módulo 1 (40% teoría, 60% código).


Prerequisites verificados

Antes de empezar, asegúrate de haber completado:

Módulo 1 completado:

Conceptos básicos:

  • Definición de embeddings
  • Cosine similarity
  • Espacios vectoriales
  • Casos de uso

Mini-proyecto Módulo 1:

  • Similarity calculator funcional
  • OpenAI API básico funcionando
  • Caché de embeddings

Si NO completaste Módulo 1: Hazlo primero. Este módulo asume esos conocimientos.

Setup técnico:

Python 3.10+ instalado

python --version  # ≥ 3.10

Dependencias instaladas:

pip install openai numpy python-dotenv tiktoken

OpenAI API key configurada:

# .env
OPENAI_API_KEY=sk-proj-tu-key-aqui

Estructura del módulo

Fase 1: Arquitectura Profunda (Cápsulas 02-04)

Aprenderás arquitectura interna de modelos de embeddings.

Resultado: Entenderás el pipeline completo desde texto hasta vector.

Fase 2: Implementación (Cápsulas 05-06)

Implementarás pooling y normalización con código.

Resultado: Código funcional de pooling strategies y normalization.

Fase 3: Producción (Cápsulas 07-08)

Construirás API client production-ready.

Resultado: Sistema robusto con retry, batching, rate limiting.


Diferencias con Módulo 1

Módulo 1 (Fundamentos):

  • 50/50 teoría/práctica
  • Conceptos high-level
  • Proyecto simple (CLI básico)
  • Enfoque: ¿Qué son embeddings y por qué?

Módulo 2 (Arquitectura):

  • 40/60 teoría/práctica
  • Arquitectura técnica profunda
  • Proyecto complejo (API client robusto)
  • Enfoque: ¿Cómo funcionan embeddings internamente?

Progresión natural: De conceptos a implementación.


Qué NO aprenderás en este módulo

Límites claros:

NO entrenarás Transformers desde cero

  • Usarás modelos pre-entrenados (OpenAI, SBERT)
  • Entrenar Transformers es ML Engineering (fuera de scope)

NO implementarás self-attention con PyTorch

  • Verás conceptos y arquitectura
  • NO escribirás backward pass o gradient descent

NO fine-tunearás modelos

  • Fine-tuning es Módulo avanzado (fuera de esta guía)
  • Este módulo usa modelos out-of-the-box

NO crearás tokenizadores custom

  • Usarás tiktoken (OpenAI) y tokenizers existentes
  • Crear tokenizadores es tarea de research

Este módulo es sobre usar embeddings técnicamente, no sobre entrenar modelos.


Progresión pedagógica

Cómo está estructurado el aprendizaje:

Cápsula 02: Transformer Encoders (arquitectura conceptual)
         ↓
Cápsula 03: Tokenización (primer paso del pipeline)
         ↓
Cápsula 04: Contextualización (por qué Transformers > Word2Vec)
         ↓
Cápsula 05: Pooling (agregación de tokens)
         ↓
Cápsula 06: Normalization (paso final opcional)
         ↓
Cápsula 07: OpenAI API Advanced (parámetros y optimizaciones)
         ↓
Cápsula 08: Proyecto integrador (API client production-ready)

Cada cápsula construye sobre la anterior. No hay saltos abruptos.


Habilidades profesionales que desarrollarás

Al completar este módulo, podrás:

  1. Explicar arquitectura técnica de embeddings

    • Transformers, self-attention, pooling
    • A nivel que impresiona en entrevistas técnicas
  2. Debuggear problemas de embeddings

    • Por qué embeddings no capturan lo esperado
    • Cómo optimizar tokenización
  3. Escribir código production-ready

    • Batch processing (10x más rápido)
    • Rate limiting (evitar throttling)
    • Retry logic (resiliencia)
  4. Optimizar costos de API

    • Batching reduce llamadas
    • Caché evita regenerar
    • Comprimir tokens reduce precio
  5. Tomar decisiones de arquitectura

    • OpenAI vs SBERT vs BGE (cuándo usar cuál)
    • Mean pooling vs CLS pooling (trade-offs)
    • Normalizar o no normalizar (depende del caso)

Estas habilidades son diferenciadoras en el mercado laboral.


Casos de uso que dominarás

Este módulo te prepara para:

1. Optimizar sistemas existentes

# Antes (naïve):
for doc in documents:
    embedding = get_embedding(doc)  # 1000 API calls 😱

# Después (optimizado):
embeddings = get_embeddings_batch(documents, batch_size=100)  # 10 API calls ✅

2. Manejar errores en producción

# Antes (frágil):
embedding = get_embedding(text)  # Si falla → crash 😱

# Después (robusto):
embedding = get_embedding_with_retry(text, max_retries=3)  # Retry automático ✅

3. Debuggear embeddings inesperados

# ¿Por qué este embedding es diferente al esperado?
tokens = tokenize(text)  # Ver cómo se tokeniza
# → "Ah, se dividió en 3 sub-palabras (no esperado)"

4. Comparar modelos informadamente

# OpenAI: Mean pooling, 1536 dims, $0.00002/1K tokens
# SBERT: Mean pooling, 384 dims, gratis (local)
# BGE: CLS pooling, 1024 dims, gratis (local)

# Decisión informada basada en: costo, dims, pooling

Diferenciador competitivo

La mayoría de AI Engineers:

  • ❌ Usan langchain.embeddings como caja negra
  • ❌ No entienden tokenización
  • ❌ No optimizan batch processing
  • ❌ No manejan rate limiting correctamente

Tú después de este módulo:

  • ✅ Entiendes arquitectura completa
  • ✅ Optimizas tokenización y batching
  • ✅ Implementas retry logic robusto
  • ✅ Escribes código production-ready

Este conocimiento te diferencia del 80% de la competencia.


Conexión con el AI Engineering Learning Path

¿Dónde estás en el path?

AI Engineering Learning Path:
├── #5: AI Semantics Guide (completado)
├── #6: Embeddings Deep Dive Guide
│   ├── Módulo 1: ¿Qué son Embeddings? (completado ✅)
│   ├── Módulo 2: ¿Cómo funcionan? ← Estás aquí
│   ├── Módulo 3: Modelos de Embeddings (siguiente)
│   └── Módulos 4-8: Implementación + Producción
└── #7: Vector Databases Guide (futuro)

Este módulo prepara para:

Módulo 3 (Modelos de Embeddings):

  • Comparar OpenAI, SBERT, BGE, Instructor
  • Entenderás diferencias técnicas (pooling, dims, training)

Módulo 4 (Semantic Search desde Cero):

  • Implementarás search engine completo
  • Usarás pooling y normalization aprendidos aquí

Módulo 6 (Producción):

  • Patterns de producción (batch, cache, lazy loading)
  • Basado en API client robusto de este módulo

Filosofía pedagógica de este módulo

Balance teoría/práctica: 40/60

Teoría (40%):
- Arquitectura de Transformers
- Self-attention conceptual
- Contextualización

Práctica (60%):
- Tokenización con tiktoken (código)
- Pooling con numpy (código)
- API client robusto (proyecto)

Más código que Módulo 1 porque estás listo para profundizar.


Profundidad técnica apropiada:

NO haremos:

  • ❌ Derivar matemáticas de attention
  • ❌ Implementar Transformer desde cero con PyTorch
  • ❌ Entrenar modelos

SÍ haremos:

  • ✅ Entender conceptualmente cómo funciona attention
  • ✅ Usar Transformers pre-entrenados con código
  • ✅ Implementar pooling y normalization manualmente
  • ✅ Construir API client production-ready

Enfoque AI Engineering (usar, no entrenar).


Preparación antes de empezar

1. Mindset correcto

Sí a:

  • Profundizar técnicamente (más que Módulo 1)
  • Escribir código (mucho código en este módulo)
  • Experimentar con tiktoken
  • Construir sistemas robustos

No a:

  • Saltarte el código (crítico para entender)
  • Frustrarte con matemáticas (mínimo necesario)
  • Esperar que sea "solo conceptual" (es técnico)

2. Espacio de trabajo

# Crear carpeta para Módulo 2
mkdir embeddings-module-02
cd embeddings-module-02

# Virtualenv (si aún no tienes)
python -m venv venv
source venv/bin/activate  # macOS/Linux
# venv\Scripts\activate  # Windows

# Instalar dependencias
pip install openai numpy python-dotenv tiktoken

3. Verificar setup

# test_setup.py
import openai
import numpy as np
import tiktoken
from dotenv import load_dotenv
import os

load_dotenv()

# Verificar API key
api_key = os.getenv("OPENAI_API_KEY")
if api_key:
    print("✅ OpenAI API key cargada")
else:
    print("❌ OpenAI API key NO encontrada")

# Verificar tiktoken
encoding = tiktoken.encoding_for_model("gpt-4")
tokens = encoding.encode("test")
print(f"✅ tiktoken funciona ({len(tokens)} tokens)")

# Verificar numpy
arr = np.array([1, 2, 3])
print(f"✅ numpy funciona (array: {arr})")

print("\n🎉 Setup completo!")
python test_setup.py

Métricas de éxito del módulo

Al final del Módulo 2, deberías poder:

  • Explicar arquitectura de Transformers a nivel técnico
  • Tokenizar texto con tiktoken y entender output
  • Implementar pooling strategies con numpy
  • Normalizar embeddings correctamente
  • Usar OpenAI API avanzado (batching, error handling)
  • Construir API client robusto production-ready

Evidencia: Podrás completar el mini-proyecto de la cápsula 08 sin asistencia.


Recursos opcionales de preparación

Si quieres contexto adicional (opcional):

No necesitas leer esto ahora. Las cápsulas son auto-contenidas.


Estructura de este módulo

8 cápsulas, progresión técnica:

01. Introducción al Módulo ← Estás aquí
    ↓
02. Transformer Encoders (arquitectura)
    ↓
03. Tokenización (BPE, tiktoken)
    ↓
04. Contextualización (por qué contexto importa)
    ↓
05. Pooling Strategies (mean, CLS, max)
    ↓
06. Normalization (L2 norm)
    ↓
07. OpenAI API Advanced (batching, rate limiting)
    ↓
08. Mini-Proyecto: API Client Robusto

Cada cápsula es técnica pero accesible.


Resumen

Módulo 2 profundiza en arquitectura técnica.

Lo que aprenderás:

  • Transformer encoders (self-attention)
  • Tokenización (BPE, tiktoken)
  • Contextualización (embeddings contextuales)
  • Pooling strategies (mean, CLS, max)
  • Normalization (L2 norm)
  • OpenAI API avanzado (batching, retry)
  • API client production-ready

Lo que NO harás:

  • Entrenar modelos (usarás pre-entrenados)
  • Implementar Transformers desde cero (conceptual)
  • Fine-tuning (fuera de scope)

Lo que construirás:

  • API client robusto con retry logic
  • Batch processing (10x más rápido)
  • Rate limiting (evitar throttling)
  • Código production-ready

Evidencia de éxito:

  • Explicar arquitectura técnicamente
  • Optimizar llamadas a APIs
  • Debuggear embeddings
  • Escribir código robusto

¿Listo para empezar?

En la siguiente cápsula, profundizarás en:

"Transformer Encoders"

Aprenderás:

  • Arquitectura encoder-only (BERT-style)
  • Self-attention mechanisms (conceptual)
  • Feed-forward layers
  • Por qué Transformers > RNNs/LSTMs

También verás ejemplos concretos de cómo self-attention captura contexto y por qué es crítico para embeddings modernos.

De conceptos high-level a arquitectura técnica profunda. 🚀


Recursos de preparación (opcional)

Si quieres adelantar lectura:

No es necesario. Las cápsulas cubren todo lo necesario.


Módulo 2 - Embeddings Deep Dive Guide Abriendo la caja negra: de texto a vector paso a paso