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.mdleí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¶
(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ó
workcomo un único símbolo? ¿apareció-edcomo 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:
trace.mdexiste con las 5 iteraciones de merge completamente escritas.- Cada iteración tiene una tabla de conteo de pares.
- La regla de desempate se invoca al menos una vez y se muestra explícitamente.
- La predicción del Bloque E está documentada (y verificada o revisada).
- 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" × 2contribuye("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.