Byte-Pair Encoding/es
| Article | |
|---|---|
| Topic area | Natural Language Processing |
| Prerequisites | Tokenization, Language Model |
Resumen
La codificación por pares de bytes (Byte-Pair Encoding, BPE) es un algoritmo de tokenización en subpalabras que construye un vocabulario fusionando iterativamente los pares adyacentes de símbolos más frecuentes en un corpus de entrenamiento. Introducida originalmente como una técnica de compresión de datos por Philip Gage en 1994, fue adaptada para la traducción automática neuronal por Sennrich, Haddow y Birch en 2015 y desde entonces se ha convertido en un componente fundamental de los modelos de lenguaje modernos, incluida la familia GPT, RoBERTa y muchos modelos de lenguaje de gran tamaño y código abierto.[1] BPE establece un equilibrio entre dos extremos de la tokenización: los vocabularios a nivel de palabra, que sufren de palabras fuera de vocabulario y tablas de incrustaciones de gran tamaño, y los vocabularios a nivel de carácter, que producen secuencias excesivamente largas y sesgos inductivos débiles. Al aprender un vocabulario de tamaño fijo de unidades de subpalabra que cubre cualquier cadena de entrada sin tokens desconocidos, BPE permite un modelado eficiente de vocabulario abierto entre idiomas y dominios.
Antecedentes y motivación
Los primeros modelos neuronales de secuencias se basaban en vocabularios a nivel de palabra, normalmente limitados a entre 30 000 y 100 000 entradas. Las palabras fuera de este conjunto se reemplazaban por un token <UNK>, descartando información. Esto resultaba especialmente perjudicial para idiomas con morfología rica, dominios técnicos y entidades nombradas poco frecuentes. Los modelos a nivel de carácter evitan por completo el problema del token desconocido, pero requieren secuencias más largas y obligan al modelo a reaprender desde cero los patrones de palabras de alta frecuencia.
La tokenización en subpalabras ofrece un punto intermedio. La intuición es que las palabras frecuentes deben permanecer como tokens completos, mientras que las palabras poco frecuentes se descomponen en piezas de subpalabras significativas, como morfemas o raíces. Por ejemplo, "tokenization" podría dividirse en "token" e "ization", lo que permite al modelo compartir representaciones con formas relacionadas como "tokenize" o "modernization". BPE proporciona un procedimiento sencillo y basado en datos para encontrar dicho vocabulario sin supervisión lingüística.
El algoritmo
El entrenamiento de BPE comienza con un vocabulario base que contiene todos los caracteres (o todos los bytes) que aparecen en el corpus. Cada palabra se representa como una secuencia de estos símbolos base, normalmente con un marcador de fin de palabra como </w> para distinguir las piezas internas a la palabra de las finales. A continuación, el procedimiento de entrenamiento aplica repetidamente una única operación: contar la frecuencia de cada par adyacente de símbolos en todo el corpus, identificar el par más frecuente y fusionarlo en un nuevo símbolo que se añade al vocabulario.
Formalmente, sea $ V_0 $ el vocabulario inicial de caracteres y sea $ C $ un multiconjunto de palabras pre-tokenizadas, cada una representada como una secuencia de símbolos. En la iteración $ t $, BPE selecciona el par
$ {\displaystyle (a^{*}, b^{*}) = \arg\max_{(a, b)} \; \mathrm{count}(a, b \mid C, V_{t-1})} $
y forma el nuevo símbolo $ ab $. Cada aparición del par adyacente $ (a, b) $ en $ C $ se reemplaza por $ ab $, y la regla de fusión se añade a una lista de fusiones ordenada. El procedimiento continúa hasta que el vocabulario alcanza un tamaño objetivo, normalmente entre 8 000 y 100 000 tokens. La salida del entrenamiento son dos artefactos: el vocabulario final y la lista ordenada de reglas de fusión.
Un pequeño ejemplo trabajado ilustra la dinámica. Supóngase que el corpus contiene las palabras "low", "lower", "newest" y "widest", con frecuencias tales que "es" sea el par adyacente más común tras el paso de inicialización. BPE fusiona primero "e" + "s" en "es", luego quizá "es" + "t" en "est", y así sucesivamente. Tras varias iteraciones, sufijos comunes como "est" y "er" emergen como tokens únicos, mientras que las formas más raras permanecen segmentadas.
Tokenización en inferencia
Una vez entrenado, BPE tokeniza una nueva cadena de forma determinista. La cadena se divide primero en símbolos base y las reglas de fusión se aplican en el mismo orden en que se aprendieron. En cada paso, el algoritmo busca la regla de fusión con el menor índice aprendido que aún sea aplicable, la ejecuta y repite hasta que ninguna regla sea aplicable. La secuencia de tokens resultante es única dada la lista de fusiones.
Esta aplicación greedy y ordenada por prioridad hace que la codificación BPE sea rápida y reproducible. Las implementaciones prácticas utilizan una cola de prioridad indexada por el rango de fusión para alcanzar un tiempo aproximadamente lineal en la longitud de la entrada. Una consecuencia sutil es que la tokenización BPE no es invariante a los espacios en blanco ni a la capitalización, salvo que el pre-tokenizador los normalice. La mayoría de los tokenizadores modernos, incluidos los utilizados por GPT-2 y modelos posteriores, conservan la capitalización y representan el espacio en blanco inicial como un carácter especial (a menudo Ġ), de modo que "the" y " the" se mapean a tokens distintos.
BPE a nivel de byte
Un problema práctico del BPE a nivel de carácter es que el vocabulario base depende del corpus de entrenamiento. Un nuevo idioma o un punto de código Unicode inusual puede producir caracteres desconocidos en inferencia. El BPE a nivel de byte, introducido con GPT-2, evita este problema tratando la entrada como una secuencia de bytes UTF-8 en lugar de caracteres.[2] El vocabulario base se fija en 256 valores de byte, garantizando que cualquier cadena de entrada tenga representación. El BPE a nivel de byte elimina por completo los tokens desconocidos y maneja de manera uniforme emojis, código y texto multilingüe. La mayoría de los modelos de lenguaje grandes contemporáneos utilizan esta variante.
La contrapartida es que las escrituras no latinas se codifican con menor eficiencia en bytes. Un solo carácter chino puede consumir tres bytes UTF-8 y requerir varias fusiones para consolidarse, lo que conduce a secuencias de tokens más largas y mayores costes de inferencia para esos idiomas. SentencePiece con un modelo Unigrama a veces se prefiere cuando la equidad entre idiomas es un objetivo.
Comparación con otros métodos de subpalabras
WordPiece, utilizado en BERT, está estrechamente relacionado con BPE pero selecciona las fusiones según un criterio de verosimilitud en lugar de la frecuencia bruta. En cada paso, WordPiece elige el par cuya fusión maximiza la verosimilitud del corpus de entrenamiento bajo una hipótesis de modelo de lenguaje unigrama. En la práctica, WordPiece y BPE producen vocabularios similares y la elección suele ser una cuestión de preferencia de la cadena de herramientas.
El tokenizador del modelo de lenguaje unigrama, utilizado en SentencePiece y la familia T5, adopta un enfoque distinto. Parte de un vocabulario de candidatos amplio y poda iterativamente los tokens para maximizar la verosimilitud del corpus, produciendo una segmentación probabilística que admite la regularización de subpalabras mediante muestreo. Además, SentencePiece trata el espacio en blanco como un carácter normal, lo que permite una tokenización extremo a extremo sin reglas de pre-tokenización específicas del idioma.
En comparación con los modelos a nivel de carácter, BPE produce secuencias más cortas y prioris a nivel de palabra más fuertes. En comparación con los modelos a nivel de palabra, elimina los tokens desconocidos y comparte parámetros entre formas relacionadas morfológicamente. Los vocabularios resultantes generalizan bien entre dominios y han demostrado ser notablemente robustos como elección dominante para las arquitecturas Transformer.
Consideraciones de implementación
Una implementación ingenua de BPE recalcula las frecuencias de los pares tras cada fusión, lo que resulta cuadrático en el tamaño del vocabulario. Las implementaciones de producción, como las de Hugging Face Tokenizers y OpenAI tiktoken, mantienen estructuras de datos incrementales que solo actualizan los pares afectados después de cada fusión, reduciendo el tiempo de entrenamiento a casi lineal en el tamaño del corpus. Para inferencia, las bibliotecas modernas alcanzan millones de tokens por segundo por núcleo de CPU mediante implementaciones cuidadosas en Rust o C++.
Las decisiones previas a la tokenización importan. La mayoría de las canalizaciones BPE separan el texto por espacios en blanco y signos de puntuación antes de aplicar las fusiones, evitando que los tokens crucen los límites de las palabras. El conjunto exacto de reglas, incluido cómo se manejan los dígitos, las contracciones y la puntuación, varía entre modelos y rara vez está documentado en detalle, lo que dificulta la reproducción exacta de un tokenizador. Por ello, los modelos publicados distribuyen la lista de fusiones y la expresión regular del pre-tokenizador conjuntamente como un artefacto congelado.
Limitaciones y compensaciones
BPE es una heurística greedy basada en frecuencias, sin un objetivo lingüístico explícito. Puede producir segmentaciones contraintuitivas, especialmente para variantes morfológicas de baja frecuencia, y es sensible a la composición del corpus de entrenamiento. Un vocabulario entrenado sobre texto web segmenta de forma subóptima textos médicos o jurídicos, inflando la longitud de las secuencias y degradando el rendimiento en tareas posteriores hasta que se realiza una adaptación o una extensión del vocabulario.
La naturaleza determinista de la codificación BPE también se ha identificado como una fuente de sesgo implícito en los modelos de lenguaje. Dado que los números se fusionan según la frecuencia en el corpus de entrenamiento en lugar de la posición de los dígitos, un mismo número puede tokenizarse de forma diferente según el contexto, lo que complica el razonamiento aritmético. Modelos recientes han comenzado a adoptar la tokenización a nivel de dígito como remedio parcial.
Por último, BPE proporciona una única segmentación canónica por cadena, lo que limita la exposición del modelo a análisis alternativos durante el entrenamiento. Las técnicas de regularización de subpalabras, como el dropout de BPE, omiten aleatoriamente fusiones durante el entrenamiento para exponer al modelo a múltiples segmentaciones plausibles y mejorar la robustez.[3]
Referencias
- ↑ Sennrich, R., Haddow, B., and Birch, A., "Neural Machine Translation of Rare Words with Subword Units," ACL 2016.
- ↑ Radford, A. et al., "Language Models are Unsupervised Multitask Learners," OpenAI 2019.
- ↑ Provilkov, I., Emelianenko, D., and Voita, E., "BPE-Dropout: Simple and Effective Subword Regularization," ACL 2020.