La OSI presento hace poco una definición de modelo de IA abierta, el equivalente del «Open Source» para los modelos de lenguajes. Antes de entrar en detalles con lo que ha definido la OSI vamos a hablar de los diferentes aspectos que se pueden «liberar» Grosso modo:
API: dar acceso al modelo a través de una API pública.
Pesos: el modelo propiamente dicho. Junto con el modelo se libera información de aspectos técnicos cómo información sobre cómo ejecutarlo o cuál es el formato de los prompts
Pesos destilados: es una versión reducida del modelo de lenguaje obtenidos a partir de «refinar» el modelo original. Es más cerrado puesto que complica el generar modelos derivados. Por ejemplo el finetuning del modelo.
Documentación de cómo usarlo: no basta con los pesos, hay que saber cómo usarlos. La arquitectura del modelo, el formato del prompt, …
Cómo replicar el modelo: generalmente tiene la forma de «el paper» del modelo. Dónde se explica cómo se ha creado el modelo y permite duplicarlo. No siempre es tan exhausto, últimamente hay muchos casos que parecen más un documento de marketing que de investigación.
El código de entrenamiento: el código necesario para entrenar tu propio modelo «igual» que el proporcionado
Descripción del dataset: un resumen indicando el tipo de datos y su origen. Por lo general se mezclan dataset públicos, privados y datos sintéticos.
Dataset: los datos usados para el entrenamiento. Es la parte más difícil que sea liberada ya que es lo más valioso y complicado de conseguir.
Por lo general las licencias suelen restringir algunas de las siguientes libertades:
Usar el modelo de forma comercial. Muchos modelos solo permiten su uso no comercial.
Usar el modelo de forma libre sin limitaciones. Es habitual que las empresas limiten los usos del modelo. La más habitual es que prohíban usarlo para entrenar otros modelos.
Modificar/reentrenar el modelo. Algunas empresas prohíben modificar sus modelos.
Para cumplir con la OSI es necesario que la licencia del modelo no tenga restricciones.
Para más información puedes ver el siguiente vídeo de mi canal:
Haz click para ver el vídeo en mi canal de YouTube
Speculative Decoding es un técnica (realmente un conjunto de ellas) para acelerar un modelo de lenguaje usando un «oraculo» que genera un borrador tratando de adivinar lo que el modelo va a generar. En este caso usaremos Qwen-2.5-coder-0.5B como oraculo para generar el borrador.
Para esta prueba usaremos un ejemplo que viene con Llama.cpp. Pero antes de poder usarlo hay que cambiar en el fichero examples/speculative/speculative.cpp el valor de la constante SPEC_VOCAB_MAX_SIZE_DIFFERENCE de 100 a 200.
#define SPEC_VOCAB_MAX_SIZE_DIFFERENCE 200
Una vez hecho esto hay que volver a compilarlo y ya se puede probar con el comando:
./llama-speculative -m models/Qwen2.5.1-Coder-7B-Instruct-Q8_0.gguf -md models/Qwen2.5-coder-0.5b-instruct-q4_k_m.gguf -c 4000 --draft 8 --color --sampling-seq k --top-k 10 --temp 0.7 -p "Generate a tetris game using JS and HTML in one HTML file" -ngl 99 -ngld 99
Puedes verlo en funcionamientos en el siguiente vídeo (así como la explicación de cada parámetro):
Haz click para ver el vídeo en mi canal de YouTube
Qwen 2.5 coder es una familia de modelos que ha dado muy buenos resultados generando código. Tanto que pueden competir con modelos privados mucho mayores como ChatGPT4o o Claude 3 Opus.
Podéis ver más sobre estos modelos en el siguiente vídeo:
Haz click para ver el vídeo en mi canal de YouTube
Este post se centra en los prompts necesarios para usar sus diversas funcionalidades.
Completar texto:
La funcionalidad habitual de los modelos de lenguaje. Le pasas un texto y va prediciendo las siguientes palabras (bueno, tokens).
No necesita ningún prompt especial.
Rellenar texto intermedio (infill):
Una funcionalidad imprescindible para completar código. El código no se escribe como la prosa. Es habitual insertar código en mitad de ficheros ya escritos. Además hay que tener en cuanta todo el contenido del fichero.
El prompt divide el texto en un prefijo (el código que va antes del texto a generar) y un sufijo (el código que va después del texto a generar)
Otra función útil es que para completar código se tenga en cuenta múltiples ficheros del proyecto y la estructura del mismo.
El prompt consta del nombre del repositorio (puede ser cualquiera) y los distintos ficheros que se quiere que se tengan en cuenta. Cada fichero incluye la ruta con su nombre y tras un salto de línea el código.
El contexto por defecto es de 32k tokens, pero usando YARN con un escalado de x4 puede llegar a 128k (cada motor de inferencia tendrá su forma de configurar esto, por ejemplo en llama.ccp es usando los parámetros: )
Esto solo funciona en los modelos de 7B o más parámetros: -rope-scaling yarn –rope-scale 4.0
Generar texto con CoT (cadena de pensamientos):
De regalo este truco, no es oficial, yo lo he sacado de un comentario en Reddit del usuario Eposnix. Este usuario compartió un prompt que permite realizar CoT aplicado a la generación de código. Hace que el modelo de lenguaje entre en bucle tratando de corregir el código que genera hasta que esté perfecto. Cuidado que puede hacer que el mdoelo entre en bucle, por lo que es recomendable usar este prompt limitando el numero total de tokens que puede generar.
1. Generate your initial code solution 2. Rate your solution on a scale of 1-5 based on these criteria: - 5: Exceptional - Optimal performance, well-documented, follows best practices, handles edge cases - 4: Very Good - Efficient solution, good documentation, follows conventions, handles most cases - 3: Acceptable - Working solution but could be optimized, basic documentation - 2: Below Standard - Works partially, poor documentation, potential bugs - 1: Poor - Non-functional or severely flawed approach
3. If your rating is below 3, iterate on your solution 4. Continue this process until you achieve a rating of 3 or higher 5. Present your final solution with: - The complete code as a solid block - Comments explaining key parts - Rating and justification - Any important usage notes or limitations
Tras ese prompt puedes especificar que deseas que programe Qwen
Hace no mucho Google sacó una herramienta que permite crear podcasts donde dos IAs discuten sobre el texto que les pasas. Meta no hace mucho sacó su propia versión usando Llama que se puede usar en local. Aquí presento mi idea, con código para que podáis jugar vosotros.
Podéis ver el vídeo con más detalles en mi canal de YouTube:
Haz click para ver el vídeo en mi canal de YouTube
El proceso tiene varias partes:
Extraer el texto:
El documento de origen puede tener una gran cantidad de formatos, para que funcione con la IA es necesario pasarlo a texto plano (txt). En este caso esa parte del trabajo os lo dejo a vosotros.
Limpiar el texto:
Es posible que el texto extraído tenga «ruido», caracteres no válidos o que no forman parte del texto principal (cabeceras, notas de pie, número de página). Los resultados son mejores si le pedimos a una IA que limpie el texto.
Resumir el texto:
Su utilidad no es solo tener un podcast más corto y «concentrado». También sirve para lograr que el texto «quepa» dentro del contexto del modelos del lenguaje.
Generar el guión del podcast:
En este caso se generará como si hablaran dos personas. Alice y Bob. Para ello pediremos al modelo de lenguaje que genere un podcast
Generar el audio:
Aquí surge el problema de cómo generar audio con dos voces. En principio con Piper podemos fácilmente usar el parámetro –json-input y un fichero en formato json, indicando la voz usada en cada línea (es necesario un fichero de voz con múltiples voces). Por desgracia es necesario crear tu propia compilación de Piper. Así que haremos algo más simple: dividiremos el texto en líneas aprovechando que cada una va precedida de la voz que lo dice (el uso de [Alice] y [Bob] no es accidental). Y generamos un fichero wav independiente para cada línea. Luego tendremos que unirlos. En mi caso uso la herramienta sox.
const fetch = require('sync-fetch')
const fs = require("fs");
const { execSync } = require('child_process');
const llamaURL = "http://127.0.0.1:8080/completion";
const tokenizerURL = "http://127.0.0.1:8080/tokenize";
const inputFilename = "./text.txt";
//Llama a llama.cpp
function CallIA(prompt, n_predict, temperature) {
console.log("Asking llama.cpp");
let response = fetch(llamaURL, {
method: 'POST',
body: JSON.stringify({
prompt,
n_predict: n_predict,
temperature: temperature,
cache_prompt: true
})
}).json().content;
return response;
}
//Consulta el tamaño en tokens del texto
function callTokenizer(text) {
console.log("Asking llama.cpp");
let response = fetch(tokenizerURL, {
method: 'POST',
body: JSON.stringify({
text,
add_special: true
})
}).json();
console.log(response.tokens);
return response.tokens.length;
}
//Limpiar texto
function generatePromptClean(text){
return "<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n<|im_start|>user\nRepite el texto que te voy a pasar, limpia los caracteres extraños y corrige los posibles errores\n"+text+"\n<|im_end|>\n<|im_start|>assistant\n";
}
//Resumir texto
function generatePromptSumarize(text){
return "<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n<|im_start|>user\nResume el texto que te voy a pasar, extrae las partes más interesantes y curiosas de él\n"+text+"\n<|im_end|>\n<|im_start|>assistant\n";
}
//Generar guion
function generatePromptDialog(text){
return "<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n<|im_start|>user\nConvierte el siguiente texto en una conversacion, en español, animada y divertida entre dos personas: Alice y Bob. Indica cada usuario poniendo delante [Alice] o [Bob].Comienza Alice\n"+text+"\n<|im_end|>\n<|im_start|>assistant\n[Alice]";
}
function generateAudio(text){
//Almacena listado de ficheros para concatenar con sox
var concatSox = "";
//Se separa cada linea que empieza por [
var podcastWithVoices = podcast.split("[");
for(var i = 0; i < podcastWithVoices.length; i++){
var line = podcastWithVoices[i].trim();
//Elegimos la voz Alice/Bob
var speaker;
if(line.startsWith("Alice")){
speaker = 1;
} else {
speaker = 0;
}
//Eliminamos el nombre para que no lo lea
line = line.replace("Alice]", "").replace("Bob]", "");
//Llamamos a Piper para generar el audio en un fichero .wav
execSync(`echo '${line}' | piper --model ./models/es_ES-sharvard-medium.onnx --speaker ${speaker} --output_file podcast${i}.wav`, { encoding: 'utf-8' });
//Añadimos el fichero a la lista para concatenar
concatSox += "podcast"+i+".wav ";
}
//Unimos todos los ficheros .wav
console.log(`sox ${concatSox} podcast.wav`);
execSync(`sox ${concatSox} podcast.wav`);
}
//Leer fichero de texto
var text = fs.readFileSync(inputFilename, 'utf8');
//Tokenizador calcula cuantos tokens ocupa el texto (no he logrado que funcione)
//callTokenizer(text);
//Limpiamos el texto
//text = callIA(generatePromptClean(text), 8000, 0.2)
//Resumimos el texto
//text = callIA(generatePromptSumarize(text), 8000, 0.2)
//Generamos el dialogo
//Es necesario añadir [Alice]
var podcast = "[Alice]"+CallIA(generatePromptDialog(text), 8000, 0.2);
console.log(podcast);
//Limpiamos el texto generado por la IA
podcast = podcast.replace(/(\r\n|\n|\r)/gm, "");
//Llama a piper para generar el audio linea a linea
generateAudio(podcast);
Si queréis ver (bueno, oir) el resultado, tenéis un ejemplo al final del vídeo.
Los modelos de lenguaje (vamos a centrarnos en ellos en este artículo, aunque lo aquí visto aplica al resto de los modelos) empiezan a verse cada vez en más usos y no solo la IA privada, también la IA local con despliegues de sistemas en los servidores propios de muchas empresas. Las ventajas de tener modelos propios son claras: mayor control, mayor personalización, mayor privacidad. Pero también tiene sus riesgos de seguridad .Sin embargo se suele hablar poco de ellos:
Vulnerabilidades y Bugs: Los modelos de lenguaje necesitan un software para que los «ejecute» (realice la inferencia). Este software está sujeto a bugs y vulnerabilidades. Cómo con cualquier software hay que mantenerlo actualizado y estar atento a posibles vulnerabilidades.
Marcado de textos: Un modelo puede marcar en secreto el texto que genera. Esto permitiría saber para que usas el modelo y rastrear su uso. Puedes saber más sobre este tema en el siguiente enlace: https://youtu.be/bc_bQeAY9-M
Modelos trampa para extraer datos del finetunig: si tu plan es entrenar un modelo con datos propios de tu empresa, se ha logrado preparar modelos trampa que permiten recuperar parte de los datos usados como finetuning. En caso de usar RAG hay bastantes técnicas para recuperar los datos de los argumentos usados como fuente de información en el RAG.
Agentes durmientes: suena a película de espías pero es posible tener LLMs con comportamientos ocultos que solo se activen en ciertas condiciones. Por ejemplo, generar código con bugs solo cuando detecte que se trabaja en ciertos proyectos.
Mal uso de herramientas: últimamente los modelos de lenguaje están ganando la capacidad de usar herramientas. Una muy habitual es permitirles ejecutar código Python. Sin embargo los modelos podrían usar esta capacidad para enviar información al exterior o abrir conexiones a nuestro equipo desde el exterior. Combinado con el caso anterior podría ser realmente peligroso.
Más información en el vídeo de mi canal de YouTube:
En este post, vamos a explorar una fascinante técnica para mejorar el rendimiento de los modelos de lenguaje llamada speculative decoding. Esta estrategia se basa en la idea de «adivinar» las respuestas antes de tiempo, tal como lo haría un oráculo.
Vamos a sumergirnos en los detalles para comprender cómo funciona esta técnica y cómo nos permite acelerar los tiempos de procesamiento.
La técnica de speculative decoding se basa en un proceso que busca acelerar la generación de texto de los modelos de lenguaje mediante predicciones previas. Esto se logra a través de la combinación de un modelo principal y un oráculo, el cual tiene la tarea de anticipar las respuestas posibles para reducir el tiempo de procesamiento.
Para entender mejor cómo funciona, imaginemos un ejemplo: supongamos que queremos completar la frase «El perro ladra». Antes de que el modelo principal comience a generar una respuesta, le pedimos al oráculo que intente predecir lo que va a decir. Supongamos que el oráculo predice: «El perro ladra a la luna llena».
Con esta predicción inicial, tenemos tanto la frase original como la posible continuación del oráculo. Aquí es donde entra el verdadero potencial de speculative decoding: los modelos de lenguaje pueden procesar varios «prompts» en paralelo. Es decir, en lugar de esperar a que el modelo genere cada token uno por uno, se reutilizan cálculos previos y se aceleran los resultados generando varios tokens a la vez.
Usamos estos prompts en paralelo para evaluar la predicción del oráculo añadiendo un token en cada prompt:
Al evaluar los prompts se genera el siguiente token:
Ahora evaluamos en que caso el token sugerido por el oráculo y el predicho coincide:
Cada token acertado lo damos como predicho correctamente por el oraculo.
En nuestro ejemplo con una sola iteración el sistema ha predicho 3 tokens: «a la gata«
En este caso cada iteración es más costosa que calcular un solo token sin speculative decoding, ya que hay que sumar el tiempo de ejecutar los múltiples prompts en paralelo (hay que recordar que se reaprovechan muchos cálculos) y de generar la predicción oráculo.
Si el oráculo acierta, se puede ahorrar una cantidad significativa de tiempo generando varios tokens de una sola vez. Este proceso tiene, sin embargo, ciertos riesgos y limitaciones. Cuando el oráculo se equivoca, se produce una penalización en términos de eficiencia, ya que se pierde el beneficio del procesamiento paralelo. Por ello, el rendimiento de speculative decoding está directamente relacionado con la precisión del oráculo.
¿Qué es el Oráculo?
El «oráculo» no es más que una manera de generar predicciones preliminares para acelerar el proceso de decodificación. A continuación, se presentan algunas de las diferentes alternativas que existen para un oráculo:
Modelo más pequeño y rápido: Utiliza un modelo de lenguaje más pequeño para generar una versión preliminar de la respuesta.
N-gramas: Consiste en el uso de patrones comunes de palabras que se encuentran en documentos similares. Esta técnica es efectiva cuando se trabaja con temas específicos, ya que aprovecha asociaciones típicas de palabras.
Reglas heurísticas: Estas reglas permiten predecir cuál es la siguiente palabra basándose en patrones lógicos. Se han usado durante décadas en los entornos de desarrollo como sistemas de sugerencias.
Uso del prompt: En tareas de resumen, es común que conceptos presentes en el prompt aparezcan también en la respuesta. Esta técnica aprovecha dicha redundancia para hacer predicciones más acertadas.
Modelos Multi-Head: Estos modelos utilizan múltiples cabezas para predecir varios tokens a la vez, lo cual permite generar varias alternativas de predicción simultáneamente. Esto puede aumentar la eficiencia en comparación con modelos que predicen un solo token por vez.
Ventajas y Desafíos
La mayor ventaja de speculative decoding es la velocidad. Cuando el oráculo acierta, podemos generar varios tokens en el tiempo que normalmente tomaría generar uno. Sin embargo, esto está condicionado por la calidad de las predicciones del oráculo. Si falla con frecuencia, los beneficios desaparecen.
Para evaluar si merece la pena usar speculative decoding, podemos comparar el tiempo que toma generar un token con el método convencional frente al tiempo y la penalización que introduce el oráculo. Si la velocidad total resulta mejor, entonces vale la pena implementarlo.
¡Prueba Speculative Decoding!
Si estás interesado en probar esta técnica, puedes echar un vistazo al proyecto Llama.cpp, que incluye varios ejemplos y diferentes implementaciones de speculative decoding. En el directorio «examples/speculative», «examples/lookahead» y «examples/lookup» encontrarás las implementaciones que puedes usar para experimentar y explorar distintas opciones de speculative decoding.
Hace poco vivimos un caso en que liberaron una nueva IA(en teoría revolucionaria). Sin embargo en cuanto la gente comenzó a chatear con ella no tardó en descubrir que realmente era otra IA con un poco de magia en el prompt. ¿Cómo podemos distinguir qué modelo es simplemente conversando con el?
Realmente no hay ninguna prueba definitiva, hay que intentar realizar tantas pruebas cómo sea posible y ver si el peso de las pruebas indica un modelo en concreto. Con los modelos libres hay que tener en cuenta que pueden haber sufrido un fine-tuning, lo que puede complicar la cosa.
Veamos que pistas tenemos:
Preguntarle al propio modelo. Es lo más básico pero puede funcionar. Cómo se le puede convencer, via prompt del sistema, de que mienta. Se pueden usar métodos más taimados como decirle que proponga palabras que rimen con su nombre, una adivinanza o una poesía donde cada línea empiece por una letra de su nombre
Verificar si está censurado y sobre que temas. La mayoría de los modelos que se lanzan tienen censura. Si no la tiene podría señalar que es un finetunig. También podemos ver sobre que temas responde y compararlos con los modelos conocidos
Ver cómo responde a temas censurados Las respuestas a temas censurados suelen ser muy similares dentro del mismo modelo. Lo que puede ser una pista comparando sus negativas con las de otros modelos.
Problemas límites del modelo. Hay problemas que solo algunos modelos pueden responder, incluso que depende cómo se le pregunte. Reunir varias de estas cuestiones y ver cómo las responde puede delimitar de que lenguaje se trata.
Lenguas e idiomas. No todos los modelos entienden todos los lenguajes o idiomas. Puede ser una gran pista ver cuáles entiende.
El tokenizador. La forma en que cada familia de modelos divide las palabras (genera los tokens) es diferente. Aquí el problema está en como ver esos tokens en una conversación. No es algo que se pueda ver de forma directa y requiere trucos que no siempre es seguro si están funcionando.
Puedes ver el tema desarrollado en este vídeo de mi canal de Youtube:
Haz click para ver el vídeo en mi canal de YouTube
La IA promete aumentar la productividad de todos los trabajadores (al menos de todos los que trabajen delante de una pantalla). Sin embargo en la vida real no acabamos de ver esa promesa cumplida. ¿Por qué?
Para escribir este texto me baso en las experiencias que me ha ido contando la gente. Por supuesto tener estadísticas siempre da más sensación de profesionalidad. Así que os remito a este artículo. Resumiendo, un 96% de los jefes piensan que la IA puede mejorar la productividad de su negocio pero un 47% de los trabajadores no saben que hacer con la IA y el 77% creen que con la IA tardan más en hacer su trabajo.
Resumen en vídeo
¿Cómo es posible? Porque por mucho que nos quieran vender lo contrario, lo cierto es que: La IA (la tecnología en general) no aumenta la productividad.
¿Cómo que no? Si la IA puede hacer el mismo trabajo que una persona en menor tiempo la productividad aumenta es obvio…si pero y es un gran pero. No basta con dejarles una IA a tus trabajadores y esperar que la productividad aumente mágicamente.
Para entenderlo vamos a viajar al pasado. Finales de los 80 principios de los 90. Las empresas descubren que los ordenadores pueden aumentar la productividad de cualquier oficina usando una cosa llamada «ofimática» (que igual en esa época no tenía ese nombre). Muchos trabajadores lo pasaron mal cuando sus empresas empezaron a exigirles que usaran los ordenadores. Para ellos era una herramienta nueva y completamente desconocida. Tampoco es que muchos superiores supieran de que iba eso, simplemente «aumentaba la productividad».
Pero, no es tan sencillo como simplemente «usar ofimática», para que la ofimática de verdad aumente la productividad es necesario adaptar el flujo de trabajo a las nuevas tecnologías. Si no la ofimática se limita a: meter lo datos en el ordenador, imprimirlos y continuar el mismo proceso pero con un papel impreso. Es necesario que todos puedan leer / editar el fichero, que este se pueda compartir entre lo trabajadores de forma sencilla. Necesitas: ordenadores, software, Internet, email, un sitio donde compartir los ficheros, formar a los usuarios, …
Con la IA pasa lo mismo, no puedes simplemente «soltar una IA» en la oficina y decirle «ser productivos». Hay que integrar ese servicio con el flujo de trabajo. Hay que saber que funciones va a realizar la IA y cómo va real izarlas. Por desgracia las historias que me cuentan son en plan: «hemos contratado este servicio, usarlo». Parece que los propios que han contratado el servicio no tienen muy claro que hacer con la IA.
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 =
1,956 * 10 ^ 1834097
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
Entre las múltiples amenazas que sus detractores y los medios de comunicación atribuyen a la IA esta la destruir nuestra cultura remplazando a los creadores humanos. Generalmente cuando se refieren a «destruir la cultura» no hablan de quemar libros en una hoguera, ni a que los seres humanos dejemos de crear obras artísticas. ¿Entonces si no afecta a las creaciones antiguas, ni a las nuevas, como puede la IA destruir la cultura?.
Porque la IA puede hacer algo más peligroso que quemar libros, puede escribirlos.
Haz click para verlo en Youtube
No pretendo ser alarmista. Soy defensor de la IA y creo que nos puede traer muchas cosas nuevas maravillosas. Pero no por eso hemos de ignorar las consecuencias negativas que puede tener. Los móviles son una herramienta muy útil pero no podemos negar los estragos que han causado en nuestra atención.
En este texto cuando hablamos de culturo nos a referirnos a la cultura como elemento de unión social. Muchas veces se habla del idioma común o las tradiciones como elementos que nos unen. Pero la ficción, la música, el arte o el cine pueden ser elementos de unión tan fuertes como los anteriores, influyendo en nuestro lenguaje y nuestra sociedad. No hay más que ver lo difícil que es entender los gustos de otras generaciones con las que compartimos idioma y tradiciones. La cultura es a la vez un reflejo y un modelo para la sociedad. ¿Cuantos movimientos sociales han estado representados por nuevos estilos artísticos?
Actualmente la IA es capaz de realizar labores creativas cada vez más avanzadas. Si sigue mejorando al ritmo actual, cosa que no sabemos si ocurrirá, en pocos años puede estar creando libros, películas, música e incluso videojuegos de forma autónoma.
Pero no basta con crear de forma «autónoma», eso no destruiría la cultura, como mucho afectaría a sus creadores que ahora compartirían el publico con la IA. Pero su función como elemento integrador seguiría siendo la misma. Al principio habrá gente que se mostraría contrario a las obras creadas por la IA y que dirá que eso no es: música, cine, literatura, pintura…Pero con el paso del tiempo y la aparición de más y más obras creadas por IA es posible que el número de detractores se reduzca. Al final volveremos a este punto, por ahora vamos a suponer que las obras creadas por IA triunfan.
En este punto tendríamos creaciones de humanos, de IA y mixtas. Para que la IA se imponga tiene que ofrecer algo que los humanos no ofrezcan y parece difícil que eso ocurra.
¿O no? El problema surge cuando a la IA generativa le sumamos otro tipo de algoritmos de IA, los de recomendación. Son algoritmos capaces de detectar tus gustos. Si bien se suelen usar para identificar los elementos que más probabilidad tienen de gustarte de una lista (básicamente recomendarte libros, películas o música). Pero pueden llegar a extraer características más concretas de que te gusta a partir de conocer nuestras obras favoritas o simplemente observando que contenido consumimos.
Es decir tendremos una IA que cuenta con datos concretos de que nos gusta y otra IA que es capaz de generar obras siguiendo nuestras peticiones. O lo que es lo mismo tendremos un autor dedicado a crear obras personalizadas y que ademas estarán pensadas para incluir los elementos que nos gustan. Y si algo no nos gusta con pedirle a la IA que lo reescriba desde ese punto todo listo. Eso es algo que las obras creadas por humanos no pueden ofrecernos.
Si lo pensáis bien, es un giro respecto a lo que se estila ahora. Actualmente se tratan de hacer obras que gusten a cuanta más gente mejor para sacarles el máximo rendimiento económico. En este caso seria la personalización absoluta. Obras creadas para ti y que posiblemente solo tu vas a disfrutar.
Lo que ocurrirá es que las obras culturales perderán su universalidad, ya no servirán para unir miles de personas, se tornaran algo más personal e intimo. La gente ya no leerá cómics de Superman si no de…DarkcityMan o como quieran que quieran que se llame el personaje que ese lector haya inventado para que la IA escriba sobre él. Perderemos universalidad pero ganaremos personalización. La obra se convertirá en un proceso interactivo.
Por ejemplo a mi me encantaría pedirle que hiciera una película de MacGyver contra Saw. Donde ganara MacGyver por supuesto (otros preferirán que gane Saw). El algoritmo debería de saber que me gustan las películas científicamente correctas así que los inventos y trampas debería de ser «realistas». Me gusta que tenga giros en el guion. ¡Y también me gustan los musicales! ¿Se atrevería a hacer «MacGyver vs Saw, el musical»? Es que me lo estoy imaginado y no me importaría nada pagar por ver eso. «¡Toma mi dinero!».
¿Nos ponemos tremendistas y decimos que la cultura humana va a terminar y con ello la sociedad que terminará convertida en una masa de individuos sin relación entre ellos? No, simplemente va a cambiar como funciona. Seguirá habiendo actividades como la historia, el deporte o la artesanía que servirán para crear grupos. Los humanos seguirán creando arte porque no todos lo crean para ganar dinero con él. Me atrevería a decir que la mayoría lo hacen porque les gusta y no por el dinero que muchas veces ni recuperan lo gastando en su afición.
No todo tiene que ser individualista. Podemos pedirle una IA que cree obras teniendo en cuenta los gustos de una pareja o un grupo de amigos. Creando así una especie de cultura propia con películas, música, libros y videojuegos que solo ellos conocen y disfrutan.
Por último una anécdota, hace poco cree una canción usando IA para mi pareja, que tuvo una temporada de obsesión por tener plantas. Me quedo….bueno le quedo a la IA….no quedó verdaderamente bien. Le sugerí el tema, elegí que partes se añadían, modifique la letra…perdí dos horas. Que es poco tiempo porque de otra manera no habría podido hacerlo en mi vida, no tengo oído musical, ni ritmo. Cada vez que intento tocar un instrumento llaman a la policía. Por supuesto la canción le encanto y nos unió mucho….que va ni siquiera la escucho. ¡La había escrito una IA!
¿Cual es la moraleja de esta historia? Que la IA solo triunfará si nos aporta algo que valoremos. Si el mercado (que somos nosotros) no las acepta no triunfaran, pero aunque lo hagan, si logran aportan algo especial que las obras humanas no pueden, la sociedad no se acabará, solo cambiará.