La codificación de pares de bytes [1] [2] (también conocida como codificación de digramas ) [3] es un algoritmo, descrito por primera vez en 1994 por Philip Gage para codificar cadenas de texto en forma de tabla para su uso en el modelado posterior. [4] Su modificación es notable como el tokenizador de modelo de lenguaje grande con una capacidad de combinar tokens que codifican caracteres individuales (incluidos dígitos individuales o signos de puntuación individuales) y aquellos que codifican palabras completas (incluso las palabras compuestas más largas). [5] [6] [7] Esta modificación, en el primer paso, supone que todos los caracteres únicos son un conjunto inicial de n-gramas de 1 carácter de longitud (es decir, "tokens" iniciales). Luego, sucesivamente, el par más frecuente de caracteres adyacentes se fusiona en un nuevo n-grama de 2 caracteres de longitud y todas las instancias del par se reemplazan por este nuevo token. Esto se repite hasta que se obtiene un vocabulario del tamaño prescrito. Tenga en cuenta que siempre se pueden construir nuevas palabras a partir de tokens de vocabulario final y caracteres del conjunto inicial. [8] Este enfoque algorítmico se ha extendido del lenguaje hablado al lenguaje de señas en los últimos años. [9]
Todos los tokens únicos encontrados en un corpus se enumeran en un vocabulario de tokens, cuyo tamaño, en el caso de GPT-3.5 y GPT-4 , es 100256.
La diferencia entre el algoritmo modificado y el original es que el algoritmo original no fusiona el par de bytes de datos más frecuente, sino que los reemplaza por un nuevo byte que no estaba incluido en el conjunto de datos inicial. Se requiere una tabla de búsqueda de los reemplazos para reconstruir el conjunto de datos inicial. El algoritmo es eficaz para la tokenización porque tiene una sobrecarga computacional baja y sigue siendo consistente y confiable.
El algoritmo original funciona reemplazando iterativamente las secuencias contiguas de caracteres más comunes en un texto de destino con bytes de "marcador de posición" no utilizados. La iteración finaliza cuando no se pueden encontrar secuencias, lo que deja el texto de destino efectivamente comprimido. La descompresión se puede realizar invirtiendo este proceso, consultando los términos de marcador de posición conocidos contra su secuencia indicada correspondiente, utilizando una tabla de búsqueda. En el artículo original, esta tabla de búsqueda está codificada y almacenada junto con el texto comprimido.
Supongamos que los datos a codificar son
aaabdaaabac
El par de bytes "aa" es el que aparece con más frecuencia, por lo que se reemplazará por un byte que no se utiliza en los datos, como "Z". Ahora tenemos la siguiente tabla de datos y reemplazos:
ZabdZabacZ=aa
Luego se repite el proceso con el par de bytes "ab", reemplazándolo por "Y":
ZYdZYacY=abZ=aa
El único par de bytes literal que queda aparece solo una vez y la codificación podría detenerse aquí. Como alternativa, el proceso podría continuar con la codificación recursiva de pares de bytes, reemplazando "ZY" por "X":
XdXacX=ZYY=abZ=aa
Estos datos no se pueden comprimir aún más mediante la codificación de pares de bytes porque no hay pares de bytes que aparezcan más de una vez.
Para descomprimir los datos, simplemente realice los reemplazos en el orden inverso.
{{cite journal}}
: CS1 maint: varios nombres: lista de autores ( enlace )