¿Son los modelos de lenguaje la Biblioteca de Babel de Borges?

Jose Luis Borges es uno de mis autores favoritos, me voy a atrever a decir «de ciencia ficción» aunque oficialmente lo suyo no sea ciencia ficción si no realismo mágico. Que en algunos casos es como la ciencia ficción pero cuando el texto se considera culto.

Posiblemente sus dos creaciones más citadas han sido el Aleph y la Biblioteca de Babel. Vamos a hablar de esta última. Una biblioteca infinita, aunque a veces esa afirmación se extiende a la variedad de libros que hay en la misma, sin embargo como ahora veremos esa afirmación es incorrecta. Primero hemos de conocer sus reglas, y es que todos los libros de esa bibliotecas siguen unas reglas muy concretas:

  • Cada libro tiene 410 páginas.
  • Cada página 40 renglones.
  • Cara reglón 80 caracteres.
  • Hay 25 posibles caracteres.
  • Los libros están «escritos» poniendo caracteres al azar (se entiende que de forma equiprobable)
Haz click para ver la versión en vídeo

Sabiendo estos datos es u simple problema de combinatoria calcular el total de libros:

25 ^ (80*40*410) =

25 ^ 1312000 =

Leerse todos cuesta un rato. Como la biblioteca es infinita cada libro tiene que estar un número infinito de veces, lo cual esta bien porque pocas cosas dan mas rabia que ir a reservar un libro y que ya este reservado.

Los bibliotecarios vagan por esa biblioteca (cuyo diseño también tiene un conjunto de reglas que no veremos aquí, a ver si así os pica la curiosidad y leéis el relato) buscando un indice de la misma.

¿Seria posible esta biblioteca? La biblioteca imaginada por Borges tiene un problema….su enorme tamaño. Aunque solo quedamos tener una copia de cada libro llenaríamos pronto las estanterías de todos los IKEA del mundo y no habríamos ni empezado. Pero bueno estamos en la época de Internet donde llevamos años almacenando cosas, el primer paso seria hacerla virtual.

Aun así no cabria toda en ningún sitio, no hay discos duros suficientes. El mayor problema es que hay una gran cantidad de libros inútiles que no contienen más que letras sin sentido. O que son idénticos a otros libros pero cambiando solo una letra (luego otras con dos, tres, cuatro, ….). En una biblioteca bien ordenada todos esos libros serian descartados. La cosa es ¿Cómo hacerlo?.

Lo primero seria en lugar de basarnos en letras hacerlos en componentes básicos de las palabras. Silabas, prefijos, sufijos….algo así como tokens. Un token junta varios caracteres que tiene sentido que vayan juntos. Esto reduce el espacio de probabilidades y aumenta las palabras que tiene sentido en el texto.

Generación usando tokens

Por otro lado tampoco tiene sentido elegir estos tokens a lo loco, que todos sean equiprobables. Mejor seria ver que tras un token solo elijamos entre aquellos que son más probables. De esta forma sabemos que siempre se formaran palabras con sentido.

No todos los tokens son igual de probables

Pero ahora tendremos listas de palabras con sentido…formado frases sin sentido. Podemos aumentar el numero de tokens que se tienen en cuenta para elegir el siguiente token. De esta manera las palabras anteriores más cercanas también influirán en la elección del token. Con este pequeño cambio ¡Ya tenemos frases con sentido!. Incluso podemos hacer pequeños párrafos que tienen sentido.

Mayor número de tokens, más contexto

Sin embargo nuestros problemas no terminan aqui. Cuando el texto crece un poco de tamaño las frases siguen teniendo sentido…pero el texto pierde el contexto del mismo. Empieza contando la historia de un niño y su perro, a mitad se transforma en un articulo periodístico sobre la revolución industrial y se acaba convirtiendo en una receta de pastel de manzana.

Para resolverlo necesitaríamos un mecanismo que tuviera en cuenta todo el texto para generar el siguiente token. Pero no basta con tener en cuenta todo el texto, hay que saber que partes influyen mas en el token que estamos eligiendo. Para ello tiene que valorar correctamente el aporte de cada uno de los tokens del texto. Si sale la palabra «azul» ¿Influye sobre el token que estoy generando ahora o hace referencia a otra cosa y no influye?. A este mecanismo le llamaremos atención.

El mecanismo de atención encuentra relaciones entre tokens

Por último añadiremos un pequeño detalle. En lugar de tener libros de numero de paginas fijo (410), vamos a poner un token de «<fin de libro>» que permita tener libros de cualquier número de paginas (siempre que el mecanismo de atención pueda gestionar textos de ese tamaño).

Hemos estado todo el tiempo hablando de «tokens más probables» de hecho es la base de nuestra biblioteca….pero ¿Cómo sabemos que tokens son más probables? Habrá que sacar esa probabilidades a partir de los textos de nuestros libros, revistas, webs, emails, ….. A más variedad y cantidad de textos mejor.

¡Ya esta! ¡Ya tenemos nuestra biblioteca! Puede generar casi cualquier texto y ocupa mucho menos que que 25 ^ 1312000 libros.

Y si os dais cuenta, lo que acabamos de describir es un LLM (¡Sorpresa inesperada!). Un sistema capaz de generar casi cualquier texto (en el peor de los casos puedes configurarlo para que genere tokens «a lo loco» y volvemos al caso original) pero que prioriza aquellos que tienen sentido y coherencia.. solo que en lugar de bibliotecarios vagando por una biblioteca infinita tenemos prompts.

¿Con esto esta todo? Aun faltaría un pequeño detalle. Hay textos para los que es muy importante que el texto, ademas de tener sentido y coherencia, estemos seguros de que todo lo que se dice es correcto y veraz. Por ejemplo los artículos periodísticos (¡no os riáis!), los textos divulgativos, los ensayos, los trabajos que nos ha pedido hacer el profeso, ….

Aun no tenemos claro como lograr este añadido de la veracidad, hay alguna idea, pero ninguna ha funcionado al 100% Con ese pequeño detalle tendremos una biblioteca de la que el mismísimo Borges estaría orgulloso