En este post vamos a abordar un tema que está generando debate en la comunidad de la inteligencia artificial: JEV. Por un lado, hay quienes afirman que se trata de una idea revolucionaria, mientras que otros sostienen que no es para tanto; además, no han tardado en aparecer multitud de «clones» que cumplen una función similar.
¿Qué es exactamente JEV?
JEV es un modelo de clasificación con un funcionamiento muy cercano a los modelos de lenguaje: se le pasa un prompt y es capaz de responder eligiendo entre una serie de opciones predefinidas. En esencia, si la tarea que necesitas realizar se puede formular como si fuera una pregunta de un concurso de televisión, JEP es el modelo que buscas
Permite trabajar principalmente con tres tipos de respuestas:
- Elegir una opción entre varias.
- Determinar si algo es verdadero o falso (responde la probabilidad de verdadero, si es baja, se considera falso)
- Asignar una puntuación (asociando valores numéricos a las opciones)
Al final, todas estas modalidades se pueden generalizar como la elección entre distintas opciones.
Las 3 ventajas clave de JEV frente a los LLM tradicionales
Aunque cualquier modelo de lenguaje puede realizar tareas de clasificación, JEV cuenta con tres ventajas diferenciadoras[:
- Precio reducido: Es sustancialmente más barato. La parte más costosa en un LLM convencional es la generación de tokens; como JEV solo genera un único token de respuesta, el procesado resulta mucho más económico.
- Velocidad de procesamiento: Procesa el prompt y responde con mayor rapidez que un modelo de lenguaje habitual. Al permitir la ejecución en paralelo de diversas respuesta (un recurso ejecutable también en LLMs tradicionales mediante prompt caching), la velocidad base del modelo es destacable.
- Cálculo de probabilidad y certeza: JEV entrega la probabilidad asignada a cada respuesta y calcula la certeza de la respuesta (cuán seguro está el modelo de su precisión). Los LLM tradicionales no poseen un estado interno de confianza; cuando se les pide que evalúen su grado de certeza, el porcentaje entregado suele ser inventado.
¿Por qué han surgido tantos «clones»?
La razón por la que han aparecido alternativas rápidamente es que los modelos de lenguaje ya funcionan internamente casi como clasificadores al calcular el siguiente token: calculan las probabilidades (tras pasar por softmax) de cada token de ser el siguiente token del texto.
Cómo simular JEV de forma sencilla con cualquier LLM
Vamos a ver una forma de que cualquier LLM funcione como JEV. Lo primero que debemos hacer:
- Formular el prompt como si fuera una pregunta con opciones de respuesta
- Limitar la salida a 1 token
- Obtener probabilidades y certeza
En los siguientes ejemplos voy a usar Llama.cpp como servidor de LLM.
Obtener la respuesta en un único token:
Vamos a usar un truco muy sencillo, limitamos los tokens de respuesta a 1 («n_predict»: 1). Pero como a veecs el modelo en lugar de responder A, B o C responde otras cosas como espacios, comillas, salto de línea, … Vamos a obligarle usando una gramática («grammar»: «root ::= «A» | «B» | «C»»)
curl -s http://192.168.1.10:8080/completion \
-H "Content-Type: application/json" \
-d '{
"prompt": "¿Cúal es la capital de Francia: A - Madrid, B - París, C - Roma. Responde unicamente con la letra de la respuesta correcta. Respuesta: ",
"n_predict": 1,
"temperature": 0,
"grammar": "root ::= \"A\" | \"B\" | \"C\""
}' | jq
En este caso la respuesta será la letra de la respuesta correcta.
Obtener la respuesta con probabilidades:
En este caso además de la respuesta obtendremos las probabilidades de cada token («n_probs»: 3, «post_sampling_probs»: true)
curl -s http://192.168.1.10:8080/completion \
-H "Content-Type: application/json" \
-d '{
"prompt": "¿Cúal es la capital de Francia: A - Madrid, B - París, C - Roma. Responde unicamente con la letra de la respuesta correcta. Respuesta: ",
"n_predict": 1,
"temperature": 0.5,
"grammar": "root ::= \"A\" | \"B\" | \"C\"",
"n_probs": 3,
"post_sampling_probs": true
}' | jq
Aquí tenemos un problema como ajustar la temperatura, si la dejamos a 0 siempre se van a asignar el 100% de la probabilidades al token que responda. Si queremos tener más «variedad» debemos subir la temperatura, contra más la subamos más «repartidas» estarán las probabilidades.
| Temperatura | Probabilidad de «A» | Probabilidad de «B» | Probabilidad de «C» |
|---|---|---|---|
| 0 | 0 | 1 | 0 |
| 0.1 | 0.00000843301586 | 0.99999159574508 | 0 |
| 0.5 | 0.08813118934631 | 0.91186881065368 | 0 |
| 1 | 0.23715609312057 | 0.76284390687942 | 0 |
¿Cómo lo hacen los «clones»? (Cómo hacerlo bien)
Esto que acabamos de ver es solo un juguete con fines educativos. Para llevar esta simulación a un nivel más avanzado, se pueden aplicar técnicas como fine-tuning para corregir las probabilidades obtenidas y que se aproximen más a las reales, añadir un pequeño Transformer o Perceptrón Multicapa (MLP) a la salida para transformar la respuesta a las opciones ofrecidas por JEV, o utilizar modelos con arquitectura encoder-decoder como BERT.
JEV tiene mérito
A pesar de que el marketing en torno al proyecto haya sido un poco exagerado, JEV sigue siendo el mejor (a la hora de escribir estás lineas) y de los más rápidos modelos para tareas de clasificación general, manteniendo un coste bajo.