Saltar al contenido principal

Formato abierto · Borrador

ISOLDA

Indexed Subject-Ordered Linked Data for AI

Una forma de escribir grafos de conocimiento para que los modelos de lenguaje —incluso los pequeños, que funcionan en un portátil— puedan leerlos. Menos tokens que Turtle o JSON-LD, nombres legibles en lugar de códigos opacos y sin perder ni un solo dato por el camino.

Trabajo en curso, contado con honestidad. La versión 0.1 cumplió dos de sus tres objetivos en un estudio prerregistrado: no pierde información y es más barata, pero todavía no era tan precisa como el mejor formato estándar. La versión 0.2 corrige las causas y se está validando ahora. Publicamos los resultados buenos y los malos.

01 · El problema

Los grafos de conocimiento se escriben para máquinas, no para modelos de lenguaje

Cada vez más conocimiento se publica como grafo de conocimiento: el JSON-LD (se abre en una ventana nueva) escondido en casi cualquier página web, los catálogos de datos abiertos, Wikidata. La forma habitual de dárselo a un modelo de lenguaje es pegarlo en el prompt como texto, normalmente en Turtle (se abre en una ventana nueva) o JSON-LD.

Esos formatos se diseñaron para analizadores sintácticos, que nunca se cansan y nunca adivinan. Un modelo de lenguaje lee de otra manera, y se nota:

  • Son caros. Cada clave, prefijo y corchete repetido es un token que pagas y un trozo de ventana de contexto que pierdes.
  • Hablan en códigos. Las entidades se nombran con identificadores como ex:o7 o @p3. Pregunta a un modelo pequeño para quién trabaja alguien y a menudo te contestará el código en lugar del nombre.
  • Esconden los recuentos. «¿Cuántos conjuntos de datos tiene este catálogo?» significa contar cientos de afirmaciones dispersas, y los modelos cuentan mal.

El formato importa más de lo que parece. Investigadores de Google comprobaron que cambiar solo la forma de escribir un grafo hacía variar el rendimiento de los modelos entre un 4,8 % y un 61,8 %, según la tarea (Fatemi et al., ICLR 2024 (se abre en una ventana nueva)). En el banco de pruebas KG-LLM-Bench (se abre en una ventana nueva), los dos estándares web quedaron a la cola:

Precisión media por formato en KG-LLM-Bench (resultados publicados)

  • JSON estructurado : 0,42
  • Lista de aristas : 0,41
  • YAML : 0,41
  • Turtle : 0,35
  • JSON-LD : 0,34
Fuente: Markowitz et al., KG-LLM-Bench (2025), media de todos los modelos y tareas. Turtle y JSON-LD fueron además los prompts más caros: 8.171 y 13.503 tokens de media, frente a los 2.645 de la lista de aristas, que es barata pero no puede representar RDF sin pérdida.

Hay, por tanto, un hueco: los formatos que conservan todo lo que RDF puede expresar (enlaces, tipos de datos, idiomas) son los que peor leen los modelos, y los que mejor leen pierden una parte.

02 · La idea

Escribir el grafo como un modelo lee una tabla

ISOLDA conserva todo lo que hace que RDF sea RDF y solo cambia la disposición. El nombre explica el diseño: cada entidad está indexada (Indexed) con un identificador legible, las afirmaciones están ordenadas por sujeto (Subject-Ordered: todas juntas, una fila por entidad), son datos enlazados (Linked Data: decodificarlas devuelve exactamente el mismo grafo) y está escrito para la IA (for AI).

Nombres, no códigos

Cada entidad se identifica con su propia etiqueta: «Opendata.cat», no ex:o7. Cuando una pregunta quiere saber dónde trabaja Anna, la respuesta ya está escrita junto a su nombre.

Una fila por cosa

Todo lo que se sabe de una entidad está en una sola línea, y las entidades del mismo tipo comparten una tabla con una sola cabecera. Sin claves repetidas ni afirmaciones dispersas.

Los recuentos, escritos

Cada tabla y cada lista dice cuántos elementos tiene (Person[2], [5] a | b | …). Los modelos cuentan mal las listas largas; ISOLDA cuenta por ellos.

Un glosario a medida

Cada documento empieza con unas pocas líneas que explican solo la notación que usa, para que incluso un modelo pequeño sepa cómo leerlo.

Los mismos cuatro hechos, de dos maneras

Dos personas y las organizaciones de las que son miembros. Es una ilustración simplificada, no la salida exacta del codificador:

Turtle
@prefix schema: <http://schema.org/> .
@prefix ex: <https://example.org/> .

ex:p1 a schema:Person ;
    schema:name "Anna Puig" ;
    schema:memberOf ex:o7 .
ex:p2 a schema:Person ;
    schema:name "Pau Serra" ;
    schema:memberOf ex:o9 .
ex:o7 a schema:Organization ;
    schema:name "Opendata.cat" .
ex:o9 a schema:Organization ;
    schema:name "Sorensen.ai" .
ISOLDA
# Entities are grouped by type.
# `Type[N]{a, b}:` is a table of N entities, one per row;
#   the first cell is the entity id.
# A property ending in `>` links to another entity by its id.

@vocab http://schema.org/
@types Person 2, Organization 2

Person[2]{name, memberOf>}:
  Anna Puig, Opendata.cat
  Pau Serra, Sorensen.ai

Organization[2]{name}:
  Opendata.cat
  Sorensen.ai

El glosario de ISOLDA está siempre en inglés, la lengua que los modelos entienden mejor para instrucciones técnicas.

En Turtle, el modelo tiene que saltar de ex:p1 a ex:o7 y luego buscar cómo se llama ex:o7. En ISOLDA, Anna Puig y Opendata.cat están en la misma línea.

Y no pierde nada: la implementación de referencia comprueba que RDF → ISOLDA → RDF devuelve un grafo idéntico, con IRI, tipos de datos, etiquetas de idioma y nodos en blanco incluidos. La salida es determinista, byte a byte.

03 · Qué hemos medido

Menos tokens, mejores recuentos, nombres que no se pierden

Hemos probado ISOLDA con cuatro modelos de pesos abiertos que cualquiera puede ejecutar —dos pequeños (Qwen3 4B y Gemma 4 E4B) y dos medianos (Qwen3.8 27B y Gemma 4 31B)— con el razonamiento desactivado, para medir cómo lee el formato cada modelo.

Tokens necesarios para el mismo grafo (cuantos menos, mejor)

  • TOON / JSON-LD : 12.075
  • JSON-LD : 11.127
  • Turtle : 11.058
  • ISOLDA : 8.702 · −21 %
Grafo de desarrollo: los 43 bloques JSON-LD de xaviviro.com, 810 triples, contados con el tokenizador o200k. ISOLDA 0.1 con las opciones por defecto, glosario incluido. «TOON / JSON-LD» es TOON aplicado directamente al JSON-LD; aparece porque los primeros prototipos de ISOLDA partieron de él.

Ahorro de tokens frente a Turtle con etiquetas, en un grafo que no se vio durante el diseño

  • Qwen3 4B : −20,3 %
  • Qwen3.8 27B : −25,9 %
  • Gemma 4 E4B : −28,6 %
  • Gemma 4 31B : −28,6 %
Prueba confirmatoria prerregistrada con el catálogo de datos abiertos de la Generalitat de Catalunya (DCAT, muestra de 1.292 triples). Tokens contados con el tokenizador de cada modelo. El objetivo prerregistrado era un ahorro mínimo del 15 %.

Los modelos pequeños dejan de responder con códigos

El hallazgo más claro hasta ahora: los modelos pequeños responden con el identificador que ven. Si les das códigos, responden códigos; incluso los identificadores legibles como sorensen-ai vuelven como respuesta. Usar el nombre de la entidad como identificador lo resuelve casi todo.

Preguntas de varios saltos acertadas, de 14, según cómo se identifican las entidades

Qwen3 4B

  • JSON-LD : 11/14
  • Códigos opacos : 3/14
  • Códigos legibles : 5/14
  • ISOLDA (nombres) : 12/14

Gemma 4 E4B

  • JSON-LD : 12/14
  • Códigos opacos : 8/14
  • Códigos legibles : 3/14
  • ISOLDA (nombres) : 13/14
Pruebas piloto exploratorias con el grafo de desarrollo, 14 preguntas de varios saltos congeladas («quién es el autor de…», «qué organización…»). Cifras pequeñas y sin intervalos de confianza: orientaron el diseño, no lo demuestran.

Contar deja de ser adivinar

Preguntas de recuento acertadas, los cuatro modelos juntos (de 24)

  • Turtle : 12/24
  • JSON-LD : 13/24
  • ISOLDA : 22/24
Pruebas piloto exploratorias: 6 preguntas del tipo «¿cuántos X hay?» × 4 modelos, con las mismas preguntas congeladas y la misma configuración. En la prueba prerregistrada con DCAT se mantuvo: ISOLDA acertó las 4 preguntas de recuento con todos los modelos, y Turtle con etiquetas no acertó ninguna.

04 · Dónde falló

La primera prueba de verdad: bien en un grafo, mal en el otro

Ahorrar tokens no es un éxito por sí solo, así que ISOLDA tenía que cumplir tres criterios fijados de antemano: no perder información, ser más barato y entenderse al menos tan bien como el mejor formato estándar. Después probamos la versión 0.1 con dos grafos que nadie había mirado durante el diseño: el catálogo de datos abiertos de la Generalitat y los municipios de Cataluña en Wikidata.

No perdió nada y fue más barato. Pero en conjunto fue significativamente menos preciso que Turtle con etiquetas, con los cuatro modelos. El desglose por grafo muestra dónde:

Precisión global en la prueba confirmatoria prerregistrada (cuanto más, mejor)

Gemma 4 31B · DCAT

  • JSON-LD : 91 %
  • Turtle + etiquetas : 91 %
  • ISOLDA 0.1 : 92 %

Gemma 4 31B · Municipios

  • JSON-LD : 75 %
  • Turtle + etiquetas : 79 %
  • ISOLDA 0.1 : 36 %

Qwen3.8 27B · DCAT

  • JSON-LD : 91 %
  • Turtle + etiquetas : 90 %
  • ISOLDA 0.1 : 100 %

Qwen3.8 27B · Municipios

  • JSON-LD : 72 %
  • Turtle + etiquetas : 77 %
  • ISOLDA 0.1 : 52 %

Gemma 4 E4B · DCAT

  • JSON-LD : 72 %
  • Turtle + etiquetas : 78 %
  • ISOLDA 0.1 : 94 %

Gemma 4 E4B · Municipios

  • JSON-LD : 37 %
  • Turtle + etiquetas : 65 %
  • ISOLDA 0.1 : 36 %

Qwen3 4B · DCAT

  • JSON-LD : 61 %
  • Turtle + etiquetas : 64 %
  • ISOLDA 0.1 : 63 %

Qwen3 4B · Municipios

  • JSON-LD : 26 %
  • Turtle + etiquetas : 27 %
  • ISOLDA 0.1 : 14 %
87 preguntas sobre el catálogo DCAT y 170 sobre el grafo de municipios, generadas automáticamente a partir de la estructura de cada grafo y congeladas antes de la prueba. «Turtle + etiquetas» es Turtle con el nombre de cada entidad enlazada añadido como comentario, la referencia más fuerte para todos los modelos.

Con el catálogo de datos, ISOLDA igualó o superó la mejor referencia con todos los modelos: hasta un 94 % frente a un 78 % con el Gemma pequeño. Con los municipios se hundió, sobre todo en las preguntas de varios saltos (un 2 % frente a un 98 % con Gemma 4 31B).

Por qué. Cada municipio de Wikidata tiene el nombre en catalán, castellano e inglés. La versión 0.1 solo usaba el nombre como identificador cuando había exactamente uno, así que recurrió a códigos como manresa o bages, y los modelos respondieron con el código: justo el error que ISOLDA quería evitar. El grafo de desarrollo, con un solo nombre por entidad, no lo había hecho aflorar.

05 · Qué viene ahora

ISOLDA 0.2, y datos nuevos para probarla

La versión 0.2 cambia cuatro cosas, cada una pensada para un límite que destaparon las pruebas:

  1. Un idioma preferido para los nombres. Si hay nombres en varios idiomas, elige uno (inglés, luego sin etiqueta de idioma, luego el resto) como identificador; los demás pasan a ser columnas normales.
  2. Nombres fila a fila. Un nombre repetido ya no convierte toda una tabla en códigos; solo esa fila.
  3. Nombres de propiedades legibles. Cuando el grafo sabe qué significa wdt:P1082, ISOLDA escribe population.
  4. Enlaces más cortos. Los IRI de las entidades se escriben con un prefijo en lugar de enteros en cada fila.

Con los datos que se usaron para diseñarla, la 0.2 ya reduce los contextos de KG-LLM-Bench de 8.076 a 5.925 tokens de media. Eso no es una validación, así que hay en marcha dos estudios prerregistrados nuevos: uno con un grafo de escritores en catalán de Wikidata y otro con el propio KG-LLM-Bench, con sus tareas, prompts y puntuación. Un tercer estudio comprobará si los resultados se mantienen cuando el modelo trabaja por completo en catalán, una lengua no hegemónica.

Iremos actualizando esta página a medida que lleguen los resultados, salgan como salgan.