Tema
Tokenización por subpalabras
- Lenguaje natural y modelos de lenguaje
- Nivel intermedio
La codificación por pares de bytes construye el vocabulario fusionando de forma repetida el par de símbolos adyacentes más frecuente, de manera que las palabras comunes quedan enteras y las raras se escriben con piezas conocidas.
Nombre en inglés
Subword tokenization
Intuición
El vocabulario deja de ser una lista cerrada de palabras y pasa a ser un juego de piezas. Una palabra nunca vista como hiperparametrización se arma con fragmentos que sí aparecieron, motivo por el cual el modelo ya no necesita el símbolo de palabra desconocida y el tamaño del vocabulario se puede fijar de antemano.
Fórmula
fusión = argmax_{(x, y)} C(x y), repetida K veces hasta alcanzar el tamaño de vocabulario deseado
Ejemplo resuelto
Sea un corpus con bajo 3 veces, baja 2 veces y bajar 1 vez, partido en caracteres. El par más frecuente es b seguido de a, con 6 apariciones, y la primera fusión crea el símbolo ba. En la segunda vuelta el par ba seguido de j suma otra vez 6 y produce baj. Tras dos fusiones el vocabulario pasa de 5 símbolos a 7, y la palabra bajar se escribe con 3 piezas en lugar de las 5 letras iniciales.
Errores frecuentes
- Suponer que una pieza de subpalabra coincide con un morfema, cuando la fusión obedece a la frecuencia y llega a partir terminación en trozos que no significan nada por separado.
- Contar tokens como si fueran palabras al estimar costos o límites de contexto, porque en español una palabra media ocupa cerca de 2 tokens en los vocabularios entrenados sobre todo con inglés.
- Cambiar el tokenizador y reutilizar los pesos del modelo, error que desalinea la tabla de embeddings y hunde el rendimiento sin dar ninguna señal clara de la causa.
Ejercicio
Un texto en español de 1000 palabras produce 1850 tokens. ¿Cuántas palabras caben, en promedio, en una ventana de contexto de 8192 tokens?
Ver la solución
La razón se obtiene dividiendo 1850 entre 1000, lo que da 1.85 tokens por palabra. Con esa razón, la ventana admite 8192 / 1.85 = 4428 palabras, es decir unas 9 páginas de texto corrido. Conviene medir la razón sobre el idioma real de la aplicación, ya que un vocabulario entrenado sobre inglés parte más las palabras del español y encoge la ventana efectiva.
Respuesta: cerca de 4428 palabras