Articulo de referencia

Codificación de pares de bytes

En informática , la codificación de pares de bytes ( BPE ), [ 1 ] [ 2 ] o codificación de digramas , [ 3 ] es un algoritmo , descrito por primera vez en 1994 por Philip Gage, pa...

En informática , la codificación de pares de bytes ( BPE ), [ 1 ] [ 2 ] o codificación de digramas , [ 3 ] es un algoritmo , descrito por primera vez en 1994 por Philip Gage, para codificar cadenas de texto en cadenas más pequeñas mediante la creación y el uso de una tabla de traducción. [ 4 ] Una versión ligeramente modificada del algoritmo se utiliza en grandes tokenizadores de modelos de lenguaje .

La versión original del algoritmo se centraba en la compresión. Reemplaza el par de bytes de mayor frecuencia con un nuevo byte que no estaba presente en el conjunto de datos inicial. Se requiere una tabla de búsqueda de los reemplazos para reconstruir el conjunto de datos inicial. La versión modificada crea "tokens" (unidades de reconocimiento) que coinciden con cantidades variables de texto fuente, desde caracteres individuales (incluidos dígitos o signos de puntuación individuales) hasta palabras completas (incluso palabras compuestas largas). [ 5 ] [ 6 ] [ 7 ]

Algoritmo original

El algoritmo BPE original funciona reemplazando iterativamente las secuencias contiguas de caracteres más comunes en un texto objetivo con bytes de marcador de posición no utilizados. La iteración finaliza cuando no se encuentran más secuencias, dejando el texto objetivo comprimido. La descompresión se puede realizar invirtiendo este proceso, consultando términos de marcador de posición conocidos contra su secuencia correspondiente, utilizando una tabla de búsqueda. En el artículo original, esta tabla de búsqueda se codifica y almacena junto con el texto comprimido.

Ejemplo

Supongamos que los datos a codificar son: [ 8 ]

aaabdaaabac

El par de bytes "aa" aparece con mayor frecuencia, por lo que se reemplazará por un byte que no se utilice en los datos, como "Z". A continuación se muestra la tabla de datos y reemplazos:

ZabdZabac Z=aa

Luego, el proceso se repite con el par de bytes "ab", reemplazándolo por "Y":

ZYdZYac Y=ab Z=aa

El único par de bytes literal restante aparece solo una vez, y la codificación podría detenerse aquí. Alternativamente, el proceso podría continuar con la codificación recursiva de pares de bytes, reemplazando "ZY" por "X":

XdXac X=ZY Y=ab Z=aa

Estos datos no se pueden comprimir más mediante la codificación de pares de bytes porque no hay pares de bytes que se repitan.

Para descomprimir los datos, simplemente realice las sustituciones en orden inverso.

Algoritmo modificado

El algoritmo BPE original se modifica para su uso en el modelado del lenguaje , especialmente para grandes modelos de lenguaje basados ​​en redes neuronales. En comparación con el BPE original, el BPE modificado no busca comprimir el texto al máximo, sino codificar el texto plano en "tokens", que son números naturales. [ 9 ] Todos los tokens únicos encontrados en un corpus se listan en un vocabulario de tokens. El vocabulario de tokens también puede incluir otros tokens especiales, según el caso de uso. El tamaño del vocabulario de tokens, en el caso de GPT-3.5 y GPT-4 , es de 100258 (100000 del algoritmo BPE y 258 incluidos como tokens especiales). [ 10 ]

El algoritmo de tokenización modificado trata inicialmente el conjunto de caracteres únicos como n-gramas de un solo carácter (los tokens iniciales). Luego, sucesivamente, el par de tokens adyacentes más frecuente se fusiona en un nuevo n-grama más largo y todas las instancias del par se reemplazan por este nuevo token. Esto se repite hasta obtener un vocabulario de tamaño predefinido. Cabe destacar que siempre se pueden construir nuevas palabras a partir de los tokens del vocabulario final y los caracteres del conjunto inicial. [ 11 ]

Este enfoque BPE modificado se ha extendido del lenguaje hablado al lenguaje de señas en los últimos años. [ 12 ]

Ejemplo

Supongamos que estamos codificando el ejemplo anterior de "aaabdaaabac", con un tamaño de vocabulario especificado de 6, entonces primero se codificaría como "0, 0, 0, 1, 2, 0, 0, 0, 1, 0, 3" con un vocabulario de "a=0, b=1, d=2, c=3". Luego se procedería como antes y se obtendría "4, 5, 2, 4, 5, 0, 3" con un vocabulario de "a=0, b=1, d=2, c=3, aa=4, ab=5".

Hasta ahora, esto es esencialmente lo mismo que antes. Sin embargo, si solo hubiéramos especificado un tamaño de vocabulario de 5, el proceso se detendría en el vocabulario "a=0, b=1, d=2, c=3, aa=4", de modo que el ejemplo se codificaría como "4, 0, 1, 2, 4, 0, 1, 0, 3". Por el contrario, si hubiéramos especificado un tamaño de vocabulario de 8, se codificaría como "7, 6, 0, 3", con un vocabulario de "a=0, b=1, d=2, c=3, aa=4, ab=5, aaab=6, aaabd=7". Esto no es una compresión máxima, porque BPE modificado no busca la máxima compresión. En cambio, busca una codificación que sea eficiente y práctica para el entrenamiento del modelo de lenguaje. [ 13 ]

BPE a nivel de byte

En el ejemplo anterior, el resultado del BPE es un vocabulario que puede utilizarse para codificar cualquier texto escrito con las letras "abcd". No podrá codificar texto que contenga otros símbolos, como "no". Incluso asignando una entrada a cada una de las 26 letras del vocabulario, dado que existen muchos idiomas en el mundo que utilizan diferentes sistemas de escritura, inevitablemente algunos símbolos no podrían ser codificados por dicho vocabulario.

Una solución consiste en sustituir cualquier símbolo no codificable por un símbolo especial llamado UNK ("desconocido").

El BPE a nivel de byte es otro enfoque. Simplemente convierte primero el texto a UTF-8 y lo trata como una secuencia de bytes. Esto garantiza que cualquier texto codificado en UTF-8 pueda ser codificado por el BPE. Esto se ha utilizado en modelos tipo BERT como RoBERTa, BART y DeBERTa, y en modelos tipo GPT como GPT-2 . [ 14 ] [ 15 ] [ 16 ]

Véase también

Referencias

  1. Gage, Philip (1994). "Un nuevo algoritmo para la compresión de datos" . The C User Journal .
  2. "Un nuevo algoritmo para la compresión de datos" . Dr. Dobb's Journal . 1 de febrero de 1994. Consultado el 10 de agosto de 2020 .
  3. Witten, Ian H.; Moffat, Alistair; Bell, Timothy C. (1994). Managing Gigabytes . Nueva York: Van Nostrand Reinhold. ISBN 978-0-442-01863-4.
  4. "Codificación de pares de bytes" . Archivado del original el 26 de marzo de 2016.
  5. Sennrich, Rico; Birch, Alexandra; Haddow, Barry (2015-08-31). "Traducción automática neuronal de palabras raras con unidades de subpalabras". arXiv : 1508.07909 [ cs.CL ].
  6. Brown, Tom B.; Mann, Benjamin; Ryder, Nick; Subbiah, Melanie; Kaplan, Jared; Dhariwal, Prafulla; Neelakantan, Arvind; Shyam, Pranav; Sastry, Girish; Askell, Amanda; Agarwal, Sandhini (2020-06-04). "Los modelos de lenguaje son aprendices con pocos ejemplos". arXiv : 2005.14165 [ cs.CL ].
  7. "google/sentencepiece" . Google. 2 de marzo de 2021. Consultado el 2 de marzo de 2021 .
  8. Campesato, Oswald (26 de diciembre de 2024). Large Language Models for Developers: A Prompt-based Exploration of LLMs . Walter de Gruyter GmbH . ISBN 978-1-5015-2095-2.
  9. Zhang, Xiang; Cao, Juntai; You, Chenyu (2024). "Capacidad de conteo de modelos de lenguaje grandes e impacto de la tokenización". arXiv : 2410.19730 [ cs.CL ].
  10. Raschka, Sebastian (17 de enero de 2025). "Implementación de un tokenizador de codificación de pares de bytes (BPE) desde cero" . Sebastian Raschka, PhD . Recuperado el 5 de julio de 2025 .
  11. Paaß, Gerhard; Giesselbach, Sven (2022). «Introducción». Modelos fundamentales para el procesamiento del lenguaje natural . Inteligencia artificial: fundamentos, teoría y algoritmos. pp. 1–17 . doi : 10.1007/978-3-031-23190-2_1 . ISBN  9783031231902.
  12. Taro Miyazaki, Sihan Tan, Tsubasa Uchida, Hiroyuki Kaneko (25 de mayo de 2024). "Traducción de lengua de signos con codificación de pares glosivos" (PDF) . Actas del 11.º Taller sobre la Representación y el Procesamiento de Lenguas de Signos .{{cite journal}}: CS1 maint: varios nombres: lista de autores ( enlace )
  13. Pai, Suhas (2025-03-06). Diseño de aplicaciones de modelos de lenguaje a gran escala: un enfoque holístico para los LLM . O'Reilly Media . ISBN 978-1-0981-5046-4.
  14. "Tokenización de codificación de pares de bytes" . Curso de PLN Hugging Face . Consultado el 27 de enero de 2025 .
  15. Yıldırım, Savaş; Chenaghlu, Meysam Asgari (15 de septiembre de 2021). Mastering Transformers: Construye modelos de vanguardia desde cero con técnicas avanzadas de procesamiento del lenguaje natural . Packt Publishing Ltd. ISBN 978-1-80107-889-4.
  16. Wang, Changhan; Cho, Kyunghyun (2020-04-03). "Traducción automática neuronal con subpalabras a nivel de byte" . Actas de la Conferencia AAAI sobre Inteligencia Artificial . 34 (5): 9154–9160 . arXiv : 1909.03341 . doi : 10.1609/aaai.v34i05.6451 . ISSN 2374-3468 .