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 al modelo dividida en tres partes: str, aw, berry. Las letras han desaparecido antes de que haya leído nada.
Si se le pregunta a un modelo de lenguaje cuántas veces aparece la letra «r» en «strawberry», es muy probable 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 los trazos de pincel de una palabra que solo ha oído pronunciar.
Lo que el modelo recibe en realidad
Antes de que cualquier modelo vea un texto, este se divide en tokens. Ni letras ni palabras: fragmentos elegidos por un algoritmo que ha analizado un gran corpus y ha fusionado de forma reiterada los pares adyacentes más frecuentes, hasta obtener un vocabulario de algunas decenas de miles de piezas.
Las palabras comunes terminan convertidas en un solo token. Las menos habituales se dividen, y el lugar donde caen las divisiones viene determinado por las estadísticas del corpus y no por el significado o la ortografía. «strawberry» puede llegar en dos o tres fragmentos, y la visión que tiene el modelo de ella es la de esos fragmentos como símbolos atómicos, cada uno de los cuales es un índice arbitrario dentro de un vocabulario, sin más estructura interna accesible para el modelo que la que tiene el número de un portal.
Por lo tanto, las letras verdaderamente no están ahí. Un modelo puede aprender hechos sobre la ortografía (que ciertos tokens tienden a coocurrir con ciertas afirmaciones sobre las letras), pero razona a partir de oídas sobre su propia entrada y no a partir de la entrada misma. Se puede observar cómo se produce esta división en el Tokenizer.
Qué más explica esto
Aritmética con números largos. Los números también se tokenizan, y no siempre cifra por cifra. Un número puede dividirse en fragmentos que atraviesan los valores posicionales, por lo que un modelo que realiza aritmética en columna trabaja con piezas que no se alinean con las columnas. Que el rendimiento empeore drásticamente al aumentar el número de cifras es una pista de que el problema es de representación.
Rimas, anagramas, acrósticos. Cualquier tarea definida sobre las letras en lugar de sobre el significado tropieza con el mismo muro.
Costes y límites de contexto en idiomas distintos del inglés. Los tokenizadores se entrenan con corpus compuestos abrumadoramente por textos en inglés, de modo que el inglés obtiene tokens eficientes y otros idiomas se fragmentan en más piezas por palabra. Una misma frase en un idioma con menor representación puede consumir varias veces más tokens, lo que significa que cuesta más procesarla y consume una mayor proporción de una ventana de contexto fija. Se trata de un problema de equidad oculto en una etapa de preprocesamiento.
Los tokens no son el único lugar donde aguarda la sorpresa
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 se entrenaron: si una palabra aparece cerca de 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 reducida de ese espacio para que se pueda ver de qué está hecha la geometría.
La salida se muestrea, no se elige. Un modelo genera una distribución de probabilidad sobre el siguiente token, y algún mecanismo tiene que seleccionar uno. Si se reduce la temperatura, elegirá la opción más probable en cada ocasión, volviéndose repetitivo y predecible. Si se aumenta, elegirá opciones de baja probabilidad con mayor frecuencia, volviéndose inventivo y poco fiable. Gran parte de lo que se describe como un modelo «creativo» o que «alucina» es, en realidad, un parámetro de muestreo. Temperature Sampling permite ver la distribución y la elección una al lado de la otra.
Por qué vale la pena saber esto
Transforma un misterio en una especificación. Decir «el modelo no es fiable» no permite tomar medidas. «El modelo no puede ver las letras, de modo que hay que derivar a código las tareas de ortografía y recuento de caracteres», sí. Al igual que «este idioma cuesta el triple de tokens, por lo que hay que presupuestar en consecuencia» o «esta salida se muestreó a una temperatura que no dará resultados reproducibles».
Casi todas las decisiones prácticas para utilizar bien estos sistemas proceden de saber de qué capa proviene un comportamiento determinado: el tokenizador, la geometría de las incrustaciones o el muestreador. Ninguno de los tres es inteligencia, y los tres se pueden inspeccionar.
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 identifica el par más frecuente y se fusiona en un único token nuevo. El proceso se repite unas decenas de miles de veces.
Lo que resulta no es un análisis lingüístico, sino una clasificación por frecuencias. Las palabras comunes en inglés se conservan enteras 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 de que «running» contiene «run»: solo lo representará de ese modo si dicha división resultó ganadora en el recuento.
Esto tiene una consecuencia que vale la pena enunciar claramente: el vocabulario es el fósil de un corpus concreto en un momento determinado. Si se cambia el texto de entrenamiento, las divisiones cambian. Dos modelos con tokenizadores distintos no solo difieren en la salida; difieren en lo que es la entrada.
Por qué no es algo fácil de solucionar
La respuesta evidente es suministrar caracteres al modelo 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 aproximadamente 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, de modo que trabajar con caracteres cuesta aproximadamente veinte veces más cómputo para el mismo pasaje. La tokenización es un paso de compresión y está sujeta exactamente a la misma compensación descrita en el artículo sobre compresión: se obtienen secuencias más cortas a costa de renunciar al acceso a la estructura por debajo del 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, cuyos costes recaen precisamente en los casos donde el detalle a nivel de carácter era lo fundamental.
Un truco de compresión de 1994
El esquema de división tiene una historia curiosa. Philip Gage publicó la codificación por pares de bytes (byte pair encoding) en 1994 como 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 adyacentes más común y sustituirlo por un byte sin uso, para luego repetir el proceso.
En 2016, Sennrich, Haddow y Birch lo tomaron prestado para la traducción automática, no para comprimir nada, sino para construir un vocabulario capaz de representar palabras raras mediante fragmentos en lugar de descartarlas.
Así pues, un truco de compresión de hace treinta años, diseñado cuando la preocupación era el espacio en disco, condiciona aquello que los modelos más grandes de la actualidad son capaces de percibir.