Skip to content

English · Español

Lab 00 — BPE a mano sobre un corpus juguete de verbos en inglés

Objetivo: trazar el algoritmo BPE en papel antes de escribir código. Cinco merges sobre un corpus de 5 frases extraído del tema de gramática verbal §A13, con la tabla de conteo de pares en cada paso.

Tiempo estimado: 30–45 minutos.

Prerrequisito: theory/02-bpe-algorithm.md leído.


Lo que produces

Un único fichero comprometido en experiments/11-bpe-by-hand/trace.md que contiene:

  • El corpus inicial y los pre-tokens-con-conteos.
  • La tabla de conteo de pares en cada iteración.
  • El merge ganador elegido en cada iteración (con el desempate mostrado explícitamente).
  • El vocabulario después de cada merge.
  • Una reflexión final (1 párrafo corto): qué te enseñó la traza que la descripción del algoritmo en theory 02 no enseñó.

Esto es trabajo a papel y lápiz. Sin código. Sin Python. Las tablas en markdown valen.

El corpus

"I work"   × 2
"I worked" × 1
"he works" × 1
"he worked" × 1

(Igual que el ejemplo desarrollado de theory 02. Úsalo para que puedas comparar tu traza con la referencia.)

Pre-tokens iniciales (tratando cada carácter como un byte para el juguete; el espacio literal se muestra como _):

("I","_","w","o","r","k")             : 2
("I","_","w","o","r","k","e","d")     : 1
("h","e","_","w","o","r","k","s")     : 1
("h","e","_","w","o","r","k","e","d") : 1

La morfología interesante a observar: -s (3ª persona singular works), -ed (pasado regular worked), y la raíz compartida work.

TODOs

Bloque A — contar pares iniciales

  • Lista cada par adyacente a través de los pre-tokens.
  • Suma conteos (multiplica por el conteo del pre-token).
  • Haz una tabla. Ordena por conteo descendente; dentro de los empates, lexicográfico ascendente sobre la tupla del par.

Bloque B — elegir al ganador

  • Usa la regla: conteo más alto; desempate lexicográfico ascendente.
  • Justifica la elección en una frase (p. ej., "empatados en 5 con ('o','r'), ('r','k'), ('w','o'); ('o','r') < ('r','k') < ('w','o') lex, así que ('o','r') gana").

Bloque C — aplicar el merge

  • Escribe los pre-tokens después del merge.
  • Añade el nuevo símbolo al vocab.
  • Actualiza la lista de merges.

Bloque D — repetir 4 veces más

  • Re-contar pares (con el nuevo símbolo).
  • Elegir ganador.
  • Aplicar.
  • Repetir hasta tener 5 merges en total.

Bloque E — predice lo que viene a continuación

Antes de reflexionar, predice los siguientes 3 merges (merges 6, 7, 8) que harías si siguieras. Escribe tus conjeturas en trace.md. Luego verifica corriendo 3 iteraciones más en papel. Este es un meta-ejercicio: el orden de merges de BPE es mecánicamente predecible a partir de los conteos de pares; si puedes predecirlo, entiendes el algoritmo.

Bloque F — reflexión

  • Un párrafo. Indicaciones sugeridas:
  • ¿Surgió la morfología? (es decir, ¿terminó work como un único símbolo? ¿apareció -ed como un par?)
  • ¿Hubo desempate ambiguo en algún momento? ¿Cómo lo resolvió la regla lexicográfica?
  • ¿Cuál es el cambio más pequeño al corpus que produciría una secuencia diferente de merges?
  • Si volvieras a correr la misma traza con el corpus en un orden diferente, ¿la respuesta sería la misma? ¿Por qué?

Restricciones

  • Sin código. Tablas en markdown y prosa solo.
  • Muestra todo tu trabajo. Saltarse la tabla de conteo de pares para un paso está prohibido — ese es el paso donde viven los bugs.
  • Una tabla de vocab por paso de merge. Un merge es significativo solo relativo a un vocab intermedio específico; muestra el vocab evolucionando.

Condiciones de parada

Has terminado cuando:

  1. trace.md existe con las 5 iteraciones de merge completamente escritas.
  2. Cada iteración tiene una tabla de conteo de pares.
  3. La regla de desempate se invoca al menos una vez y se muestra explícitamente.
  4. La predicción del Bloque E está documentada (y verificada o revisada).
  5. El párrafo de reflexión final aborda al menos una de las indicaciones.

Escollos

  • Olvidar que los merges se combinan en el nuevo símbolo para los conteos de pares subsiguientes. Tras el primer merge ("o","r") → "or", el conteo de pares de la siguiente iteración debería ver ("w","or") como un par, no ("w","o","r") como tres elementos separados.
  • Contar solo pre-tokens únicos. Multiplica por el conteo. "I work" × 2 contribuye ("I","_") con conteo 2.
  • Dirección del desempate equivocada. Lexicográfico ascendente — el par menor gana. La convención opuesta existe en algunos tutoriales.
  • No hacer realmente 5 merges. Tres o cuatro dejan el vocab demasiado pequeño para ilustrar. Empuja hasta 5.
  • Tratar _ (espacio) como nada. Es un byte. Cuéntalo como cualquier otro.

Cuándo consultar solutions/

Después de comprometer trace.md. Solución: solutions/00-toy-bpe-by-hand-ref.md (apertura de fase) contiene la traza canónica de 5 merges para este corpus y una comparación lado a lado de lo que debería emerger como merges candidatos si extendieras la traza a 20 iteraciones.


Siguiente lab: lab/01-implement-bpe.md.