Esta es una traducción automática y el texto original en inglés es la versión de referencia. Leer el original
Por qué a un modelo de lenguaje le cuesta contar las letras de una palabra
La palabra «strawberry» llega a GPT-4 en tres fragmentos: str, aw y berry. Las letras han desaparecido antes de que haya leído nada.
Pregunta a un modelo de lenguaje cuántas veces aparece la letra «r» en «strawberry» y es muy posible que responda que dos. Esto suele interpretarse como prueba de alguna deficiencia profunda. En realidad, se parece más a pedirle a alguien que cuente las pinceladas de una palabra que solo ha oído pronunciar.
Qué recibe realmente el modelo
Antes de que cualquier modelo vea texto, este se divide en tokens. Ni letras ni palabras: fragmentos elegidos por un algoritmo que ha examinado un gran corpus y ha fusionado los pares adyacentes que aparecían con mayor frecuencia, una y otra vez, hasta obtener un vocabulario de varias decenas de miles de piezas.
Las palabras habituales acaban convertidas en un único token. Las más infrecuentes se dividen, y el lugar donde caen esas divisiones viene determinado por la estadística del corpus y no por el significado o la ortografía. «strawberry» puede llegar en dos o tres fragmentos, y la perspectiva que el modelo tiene de ella son esas piezas como símbolos atómicos, cada una un índice arbitrario dentro de un vocabulario, sin más estructura interna accesible para el modelo de la que tiene el número de una casa.
Por tanto, las letras sencillamente no están ahí. Un modelo puede aprender hechos sobre la ortografía —que ciertos tokens tienden a aparecer junto a ciertas afirmaciones sobre letras—, pero está razonando de oídas sobre su propia entrada, no a partir de la entrada misma. Puedes ver cómo se produce la división en el Tokenizer. Su vocabulario se extrajo de los propios textos de este sitio web y no de un rastreo general de la web, por lo que divide strawberry en cuatro partes allí donde el de GPT la divide en tres.
Qué más explica esto
Aritmética con números largos. Los números también se tokenizan, y no siempre dígito a dígito. Un número puede dividirse en bloques que no respetan el valor posicional, de modo que un modelo que realice operaciones aritméticas en columnas trabaja con piezas que no se alinean con las columnas. Que el rendimiento caiga en picado a medida que aumenta la cantidad de dígitos es un indicio de que el problema reside en la representación.
Rimas, anagramas, acrósticos. Cualquier tarea definida sobre las letras y no sobre el significado choca contra el mismo muro.
Costes y límites de contexto en idiomas distintos del inglés. Los tokenizadores se entrenan con corpus en los que el inglés predomina de forma abrumadora; por eso el inglés obtiene tokens eficientes, mientras que otros idiomas quedan fragmentados en más piezas por palabra. La misma frase en un idioma con menor representación puede consumir varias veces más tokens, lo que significa que procesarla cuesta más y consume una porción mayor de una ventana de contexto fija. Se trata de un problema de equidad oculto en una fase de preprocesamiento.
Los tokens no son la única fuente de sorpresas
El significado es geométrico. Las palabras se convierten en vectores, y la cercanía en ese espacio se aprende a partir de la coocurrencia: qué aparece cerca de qué. Por eso los modelos captan tan bien las asociaciones y por eso heredan los sesgos del texto con el que fueron entrenados: si una palabra aparece cerca de ciertas otras palabras en el corpus, se situará cerca de ellas en el espacio, y nada en el mecanismo distingue un hecho de un estereotipo. La herramienta Token Embeddings construye una versión a pequeña escala de ese espacio para que puedas ver de qué está hecha esa geometría.
La salida se muestrea, no se elige. El modelo genera una distribución de probabilidad sobre el siguiente token, y algo tiene que seleccionar uno. Si se baja la temperatura, elige la opción más probable en cada ocasión, volviéndose repetitivo y predecible. Si se sube, elige opciones de baja probabilidad con mayor frecuencia, volviéndose ingenioso y poco fiable. Gran parte de lo que se describe como un modelo «creativo» no es más que un parámetro de muestreo. La alucinación no lo es: un modelo a temperatura cero sigue inventando cosas, y el muestreador solo cambia la frecuencia con que lo hace. Temperature Sampling permite ver en paralelo la distribución y la elección realizada.
De qué capa procede cada comportamiento
Transforma un misterio en una especificación. «El modelo no es fiable» no permite actuar. «El modelo no puede ver letras, así que deriva las tareas de ortografía y recuento de caracteres a código» sí lo permite. También lo hacen «este idioma cuesta el triple de tokens, así que calcula el presupuesto en consecuencia» y «esta salida se muestreó a una temperatura que no dará resultados reproducibles».
Casi cualquier decisión práctica sobre cómo utilizar bien estos sistemas parte de saber de qué capa procede un comportamiento: del tokenizador, de la geometría de las incrustaciones o del muestreador. Ninguno de los tres es inteligencia, y los tres son inspeccionables.
Cómo se construye el vocabulario
El método habitual es la codificación por pares de bytes (byte pair encoding), y es más sencillo de lo que sugiere su fama. Se comienza con cada carácter como un token independiente. Se cuentan todos los pares adyacentes a lo largo del corpus, se localiza el más frecuente y se fusiona en un nuevo token único. Se repite el proceso unas decenas de miles de veces.
El resultado no es un análisis lingüístico. Es una clasificación por frecuencias. Las palabras habituales en inglés se conservan completas porque eran frecuentes en el corpus; la morfología solo se capta allí donde coincide casualmente con la frecuencia. El tokenizador no tiene noción alguna de que «running» contiene «run»; solo lo representará así si esa división resultó vencedora en el recuento.
El vocabulario es el fósil de un corpus concreto en un momento determinado. Cambia el texto de entrenamiento y los puntos de división se desplazan. Dos modelos con tokenizadores distintos no solo discrepan en la salida; discrepan sobre qué es la entrada.
Por qué no se soluciona sin más
La respuesta evidente es suministrar al modelo caracteres en su lugar. Algunos modelos lo hacen, pero el intercambio no sale gratis.
Los tokens existen para acortar la secuencia. Una página en inglés equivale quizás a 250 tokens o 1.200 caracteres, y el coste del mecanismo de atención crece con el cuadrado de la longitud de la secuencia, por lo que trabajar con caracteres exige aproximadamente veinte veces más capacidad de cómputo para el mismo fragmento. La tokenización es un paso de compresión y está sujeta exactamente al mismo dilema del artículo sobre compresión: se obtienen secuencias más cortas a cambio de renunciar al acceso a la estructura por debajo del nivel de token.
Se trata, por tanto, de un intercambio deliberado entre visibilidad a nivel de carácter y longitud de secuencia, realizado antes de que el modelo vea nada, y sus costes recaen con precisión allí donde el detalle a nivel de carácter era lo importante.
Un truco de compresión de 1994
El esquema de división tiene una historia curiosa. La codificación por pares de bytes fue publicada por Philip Gage en 1994 como un algoritmo de compresión de datos, en una revista de programación, para reducir el tamaño de los archivos. Su regla consistía en encontrar el par de bytes adyacente más común y reemplazarlo por un byte que no estuviera en uso, para luego repetir el proceso.
En 2016, Sennrich, Haddow y Birch lo adoptaron para la traducción automática, no para comprimir nada, sino para construir un vocabulario capaz de representar palabras raras como fragmentos en lugar de darlas por perdidas.
Así pues, un truco de compresión de hace treinta años, ideado cuando la preocupación era el espacio en disco, decide qué son capaces de percibir los mayores modelos actuales.