HKU CodePlot-CoT en profundidad: razonamiento visual o razonamiento geométrico

Introducción

En mi análisis anterior sobre MathCanvas, mi conclusión fue: La inestabilidad de los modelos grandes en geometría no se debe a que no entiendan la imagen, sino a que no tienen una estructura intermedia estable sobre la que operar.

Algunos trabajos comenzaron a hacer que el modelo dibuje primero y razone después.

Por ejemplo, MathCanvas hace que el modelo genere bocetos internos y luego razone sobre ellos.

Después de ese artículo, un lector me preguntó:

Si los pasos visuales intermedios son tan importantes, ¿por qué no dejar que el modelo dibuje la figura de verdad?

Busqué investigaciones relacionadas y sí existe: CodePlot-CoT de HKU.

Ejemplo de CodePlot-CoT

El modelo deja de "imaginar" líneas auxiliares y escribe Python con matplotlib para trazarlas explícitamente antes de seguir resolviendo.

Suena razonable: si el razonamiento visual es inestable, dale al modelo un mundo visual ejecutable.

Pero aparece una pregunta nueva:

Cuando el modelo empieza a escribir código gráfico, ¿está haciendo razonamiento geométrico o solo validación numérica sobre una instancia concreta de coordenadas?

Para responder, primero hay que ver qué problema resuelve realmente el paper.

Qué problema resuelve realmente el paper

CodePlot-CoT se centra en un fenómeno de base: la memoria de trabajo espacial de los modelos multimodales es inestable en problemas matemáticos.

En concreto, el modelo puede entender el enunciado y producir una cadena de razonamiento estándar, pero cuando depende de estados geométricos intermedios, empieza a desviarse.

Eso se refleja en:

  • líneas auxiliares inconsistentes entre pasos,
  • relaciones espaciales olvidadas,
  • pasos posteriores apoyados en estructuras que no existen.

MathCanvas responde con bocetos internos, formando una CoT visual (Visual Chain-of-Thought).

CodePlot-CoT toma otra vía: en vez de pedirle al modelo que imagine una figura, lo pone a operar en un entorno gráfico real y ejecutable.

Es decir, externaliza la "figura pensada" hacia Python.

Clave técnica: hacer que el modelo escriba matplotlib

Pipeline técnico de CodePlot-CoT

En un ejemplo del paper, el modelo da este paso:

"Conectar C y D primero"

Y en vez de continuar con texto, emite código Python:

ax.plot([C[0], D[0]], [C[1], D[1]])

El flujo completo es:

razonamiento textual -> generación de código de trazado -> render de imagen -> reentrada al modelo -> continuación del razonamiento

Así, el estado intermedio del razonamiento deja de existir solo en tokens o latentes y pasa a existir en un entorno externo ejecutable.

Esto trae beneficios inmediatos:

1. Estado espacial más estable

El modelo depende del entorno y no solo de la memoria (similar a agentes con herramientas).

2. Mejor consistencia visual

Disminuye el típico "derrape" de diagramas multimodales.

3. Escalabilidad de datos

El paper construye Math-VR (178 mil problemas), convirtiendo "figura -> código -> razonamiento" en señal supervisada.

Es una estrategia típica de visión por computador: no obligar al modelo a imaginar el mundo, sino entrenarlo con un mundo operativo.

Hasta aquí, el trabajo es elegante. Pero hay un límite directo.

Pregunta clave: ¿realmente entiende geometría?

Volvamos a la línea:

ax.plot([C[0], D[0]], [C[1], D[1]])

Eso significa: dibujar un segmento en un plano de coordenadas.

Pero el razonamiento geométrico necesita algo más.

En geometría, "unir C y D" no es solo dibujar, sino una operación de construcción:

  • ¿CD es una cuerda?
  • ¿CD es una bisectriz?
  • ¿CD es perpendicular a una recta dada?
  • ¿CD une intersecciones de dos circunferencias?

Ahí está la fuente del razonamiento.

Matplotlib expresa apariencia visual. La geometría exige restricciones relacionales.

Por tanto, la estructura intermedia sigue siendo "parece correcto", no "debe ser verdadero".

Pérdida de causalidad constructiva

La prueba geométrica depende de "por qué es verdadero", no de "si parece verdadero".

Por ejemplo, construcción: bisectriz -> ángulos iguales es una relación lógica.

En el razonamiento basado en render, eso se convierte en medir ángulos y ver que son aproximadamente iguales.

Son cosas distintas:

TipoNaturaleza
Construcción geométricaNecesaria
Instancia numéricaContingente

El esquema de CodePlot-CoT es:

generar una instancia de coordenadas -> mirar la imagen -> concluir

En matemáticas, eso es validación de una sola instancia. Pero un enunciado geométrico exige validez para todas las configuraciones, y el modelo solo ve un mundo de muestra.

Verificación visual vs prueba matemática

Aquí se distinguen dos paradigmas:

CodePlot-CoTPrueba geométrica
Criterio de decisiónParece válidoNecesariamente válido
MétodoExperimentoDerivación
NaturalezaRazonamiento empíricoRazonamiento deductivo

CodePlot-CoT es, en la práctica, una "IA de experimento geométrico", no una "IA de prueba geométrica".

Responde a "¿esta imagen respalda la conclusión?" y no a "¿la conclusión es válida en un sistema axiomático?".

¿Por qué no llega a AlphaGeometry?

CodePlot-CoT de HKU ofrece gráficos ejecutables; AlphaGeometry de Google ofrece pruebas derivables.

Entre ambos falta una capa: la capa de objetos geométricos.

Concretamente:

  • ¿un punto es intersección o punto libre?
  • ¿una recta es bisectriz o simple segmento de unión?
  • ¿una circunferencia está definida de forma única por tres puntos o dibujada arbitrariamente?

No es un problema visual, sino de modelado estructural matemático.

Si colocamos las rutas en un eje:

imagen -> código de render -> objetos geométricos -> prueba lógica

CodePlot-CoT se queda en la capa 2, AlphaGeometry está en la capa 4, y la capa 3 es precisamente donde más opera un humano al resolver: la construcción geométrica.

Al resolver geometría, rara vez empezamos por la prueba formal y tampoco nos quedamos en la imagen. Operamos sobre objetos: trazamos perpendiculares, tomamos intersecciones, construimos circunferencias por puntos, construimos bisectrices.

Ese paso no es puramente visual ni prueba final, pero determina si todo el razonamiento posterior puede sostenerse.

Diagrama de capas de razonamiento

Cierre

En mi propio trabajo, Dino-GSP, estoy intentando aislar exactamente esta capa intermedia.

No se trata de "hacer que el modelo dibuje" ni de "forzar prueba formal directa", sino de hacer que opere sobre objetos geométricos.

La salida del modelo no es ax.plot(...), ni Therefore AB ⟂ CD, sino operaciones como:

PerpLine(<Line>, <Point>)  # Trazar una perpendicular por un punto exterior
Intersection(Circle(O, 2), Line(2, 3))  # Obtener todas las intersecciones de círculo y recta

Cuando la representación intermedia pasa a ser restricciones sobre objetos, cambian muchas cosas:

  • la figura puede generarse de forma estable sin depender de una sola instancia de coordenadas,
  • las relaciones pueden verificarse directamente en lugar de medirse visualmente,
  • el razonamiento puede formar una cadena formal en lugar de una inferencia empírica.

Desde esta perspectiva, CodePlot-CoT importa no porque simplemente "resuelva mejor matemáticas", sino porque demuestra que el razonamiento visual necesita un espacio de trabajo intermedio externo.

Es decir, el cuello de botella del LLM no es "no saber razonar matemáticamente", sino "no tener un espacio de trabajo para construir modelos matemáticos".

CodePlot-CoT ofrece un tipo de espacio de trabajo, pero todavía no es un espacio matemático.

Lo que la geometría probablemente necesita es un lenguaje geométrico operable.

Referencias