Continuamos con este post la serie de artículos dedicados a las técnicas existentes para convertir un gran modelo de lenguaje, digamos ‘normal’, en un modelo razonador, todo ello basándonos en las aportaciones del libro ‘Building a resoning model (from scratch)‘ de Sebastian Raschka.
En esta ocasión, vamos a revisar a técnica del autorazonamiento ‘self-impovement‘.
Un pequeño repaso a las técnicas de ‘prompting’
En el post anterior, hablamos de dos técnicas de prompting que ayudan a que un modelo razone.
Por un lado teníamos la cadena de pensamiento (CoT, ‘Chain-Of:Thought‘) en que le pedimos a un modelo que descomponga su respuesta en pasos mediante una expresión del tipo ‘razona paso a paso‘ introducida como una suerte de coletilla en el ‘prompt’ base. Se trata de una técnica que viene muy bien para que un modelo que no es razonador, comience a razonar. A cambio, aporta poco si el modelo ya es razonador porque, en general, el modelo va a aplicar ese razonamiento paso a paso directamente.
La segunda técnica, la autoconsistencia (‘self-consistency‘) fueerza al modelo a proponer o aplicar formas alternativas de resolver un problema y luego consensuar de alguna forma la respuesta final.
En cualquier caso, ambas técnicas son puro ‘prompting‘: no cambian propiamente el modelo, ni su arquitectura ni sus parámetros. Se trata de un uso, digamos ‘externo’ en tiempo de inferencia que mejora el razonamiento a costa de hacerlo computacionalmente más costoso (y, por ello, el autor al que seguimos habla de métodos de ‘inference-time scaling‘, escalado en tiempo de inferencia).
La esencia del auto-refinamiento
La siguiente técnica que vamos a ver, el auto-refinamiento (‘self-refinement‘), sigue todavía trabajando en tiempo de inferencia, sigue utilizando técnicas de prompting y sigue requiriendo mayor esfuerzo computacional. Es decir, continua encuadrada dentro de ese marco de escalado en tiempo de inferencia (‘inference-time scaling‘).
Pero, más que modificar el ‘prompt’ de entrada, tal como hacen las dos anteriores, lo que hace el auto-refinamiento es, digamos, establecer un diálogo (realmente un dialogo del modelo consigo mismo) en que sucesivamente se van mejorando las respuestas.
El auto-refinamiento funciona en cierto sentido de forma parecida a cuando nosotros interactuamos de manera dialogada y en un chat con una aplicación tipo ChatGPT. Le pedimos algo, nos lo da, le decimos lo que está bien o mal y le pedimos nueva respuesta y así en un bucle hasta obtener lo que queremos.
En ‘self-refinement’ también hay un diálogo pero, por decirlo de alguna forma, es del modelo consigo mismo. El modelo recibe el prompt, genera una respuesta, evalúa esa respuesta y se vuelve a pedir a sí mismo una nueva respuesta con base en el feedback.
Valoración de respuestas
Parte importante de esta técnica es cómo evalúa el modelo sus propias respuestas. En el libro citado, nos habla de dos estrategias generales.
Una primera estrategia es una evaluación basada en reglas. En este caso, con base en alguna regla o heurística podemos evaluar si la respuesta en su conjunto, si es buena o mala o hasta qué punto lo es.
Esta estrategia se puede aplicar en diferentes formas. Pensemos en el caso más simple: una operación matemática. En este caso se puede saber, por ejemplo mediante alguna forma de calculadora eterna, si el resultado es correcto o incorrecto.
Pero también se considera una evaluación basada en reglas la aplicación de alguna heurística o, incluso, la famosa técnica del ‘LLM as a judge‘ en que un modelo de lenguaje valora la respuesta de otro modelo de lenguaje.
La segunda gran estrategia, de mayor profundidad técnica, más que centrarnos en evaluar la respuesta final, la evaluación se fija en un resultado interno e intermedio: las probabilidades de los tokens candidatos a añadirse a una respuesta. Los lectores de este blog conocedores de la arquitectura interna, se pueden hacer una idea de lo que esto significan esas probabilidades de los tokens, pero en este post no voy a entrar en ello.
El bucle de refinamiento
En resumen, lo que se hace en el autorefinamiento es un bucle en que se formula una petición al modelo mediante un ‘prompt’:
- Este responde
- Su respuesta es valorada por sí mismo (o por otro modelo en el caso de LLM-as-a-judge)
- Se construye un nuevo prompt que contiene el prompt original, la respuesta original y la evaluación de esa respuesta.
- Se solicita respuesta con el nuevo prompt
Y se procede así iterativamente hasta alguna forma de umbral o límite.
Conclusiones
Hemos visto un tercer mecanismo para convertir a un modelo en razonador, el auto-refinamiento, en que, de forma iterativa, el propio modelo se encarga de evaluar su respuesta y proporcionar una nueva contestación teniendo en cuenta esa valoración.
Sigue siendo una técnica en tiempo de inferencia y que exige mayor esfuerzo computacional que una respuesta directa.







