Guía técnica Buildata

Documentación técnica para datasets BIM sintéticos.

Esta guía describe cómo está compuesto un paquete Buildata y cómo integrarlo en flujos de IA: IFC, grafos, Neo4j, GNN, ML tabular, modelos de lenguaje y visión computacional. La estructura está pensada para que los datos puedan auditarse, versionarse y reutilizarse sin depender de modelos reales confidenciales.

1. Introducción

Qué es un dataset BIM sintético.

Un dataset BIM sintético es un conjunto de datos generado artificialmente a partir de reglas de modelación, semántica IFC y patrones constructivos controlados. No corresponde a un proyecto real anonimizado: se crea desde cero para producir volumen, variación y trazabilidad sin exponer propiedad intelectual ni información sensible.

Problema

Escasez de datos BIM abiertos

Los modelos reales suelen estar protegidos por contratos, propiedad intelectual, datos de clientes y formatos difíciles de homogeneizar.

Solución

Datos controlados y repetibles

Buildata permite generar estructuras comparables, versionadas y medibles para entrenamiento, evaluación y pruebas de software.

Resultado

Una base común para IA AEC

El mismo edificio sintético puede existir como IFC, grafo, tabla, dataset LLM, exportación Neo4j y dataset visual.

CapaQué representaUso típico
IFCModelo openBIM interoperable con entidades, geometría, propiedades y relaciones normalizadas.Validar parsers, visores, exportadores, reglas IFC y compatibilidad entre herramientas.
GrafoNodos y relaciones que expresan espacios, elementos, propiedades, materiales y topología.Consultas semánticas, Neo4j, GNN, link prediction y razonamiento sobre relaciones.
TablaFeatures normalizadas por entidad, relación o tarea, listas para modelos estadísticos o ML clásico.Clasificación, predicción de propiedades, detección de inconsistencias y benchmarking.
LLMMuestras JSONL de instrucciones, razonamiento y preguntas-respuestas sobre datos BIM.Fine-tuning, evaluación, generación de QA y prototipos RAG especializados en BIM.
VisiónRenders RGB y anotaciones derivadas desde modelos IFC sintéticos.Detección, clasificación, segmentación y pruebas visuales en software AEC.
2. Quickstart

Primer recorrido técnico.

El objetivo del quickstart es pasar desde la descarga del ZIP a una primera lectura programática, una carga en Neo4j y una revisión de las capas ML y LLM.

01

Descargar y descomprimir

Obtén el ZIP desde el catálogo y conserva la estructura de carpetas para mantener rutas relativas y trazabilidad entre capas.

02

Leer metadatos

Parte por metadata/dataset.json y statistics.json para conocer versión, esquema IFC, conteos, calidad y capas disponibles.

03

Inspeccionar nodos y relaciones

Abre nodes.json y edges.json para verificar clases IFC, GUIDs, propiedades, relaciones espaciales y topología base.

04

Cargar Neo4j

Usa los scripts Cypher incluidos para crear un property graph consultable y ejecutar QA topológico o búsqueda semántica.

05

Usar tareas ML

Revisa tasks.json, ml_tabular.csv y splits JSONL para entrenar clasificadores, predictores o validadores reproducibles.

06

Probar muestras LLM

Carga instruction_dataset.jsonl, reasoning_dataset.jsonl y qa_dataset.jsonl para entrenamiento, evaluación o RAG especializado.

# 1) Descomprimir el paquete
unzip buildata-residential-batch-v1.zip -d buildata-sample
cd buildata-sample/buildata-residential-batch

# 2) Revisar metadatos globales
cat metadata/dataset.json
cat metadata/statistics.json

# 3) Ver una muestra de nodos y relaciones con Python
python - <<'PY'
import json
from pathlib import Path
nodes = json.loads(Path('buildata/nodes.json').read_text())
edges = json.loads(Path('buildata/edges.json').read_text())
print('nodes:', len(nodes))
print('edges:', len(edges))
print('first node:', nodes[0])
PY
3. Estructura del paquete

Capas organizadas por uso técnico.

Los paquetes Buildata mantienen una raíz común y carpetas por capa. La estructura exacta puede variar según el plan, pero el principio es el mismo: separar datos fuente, representación semántica, exportaciones de IA y documentación de auditoría.

buildata-residential-batch/
  metadata/                 # manifiesto, estadísticas y ficha global
  buildata/                 # grafo BIM base: nodes, edges, tasks y métricas
  buildings/                # carpetas por edificio sintético
    building_000001/
      metadata.json
      nodes.json
      edges.json
      tasks.json
      quality.json
      llm_tasks.jsonl
      graph.json
  ifc/                      # modelos IFC sintéticos exportables
  graph/                    # dataset de grafo e índice global
  gnn/                      # representación preparada para graph learning
  ml/                       # tablas, features y splits de entrenamiento
  llm/                      # instrucciones, razonamiento y QA en JSONL
  neo4j/                    # scripts Cypher y metadatos para property graph
  docs/                     # documentación técnica incluida en el paquete
  vision/                   # capa opcional: RGB, COCO, ImageNet y PASCAL VOC

La carpeta visual puede entregarse como paquete separado cuando el dataset incluye renders RGB y anotaciones. Esto evita mezclar archivos pesados de imagen con las capas estructurales de IFC, grafo, ML y LLM.

4. Archivos principales

Diccionario técnico de archivos.

Cada archivo cumple un rol dentro del pipeline. Algunos sirven como fuente semántica, otros como artefactos de entrenamiento y otros como evidencia de calidad o trazabilidad.

ArchivoRol técnicoPara qué sirve
nodes.jsonInventario de vértices BIM con IDs, clase IFC, atributos, propiedades y señales derivadas.Crear grafos, features por entidad, búsquedas semánticas y datasets de clasificación de elementos.
edges.jsonAristas dirigidas que codifican relaciones espaciales, agregación, contención, materialidad y topología.Entrenar link prediction, validar conectividad BIM, cargar Neo4j y analizar dependencia entre entidades.
tasks.jsonDefinición de tareas supervisadas o evaluativas con inputs, labels, targets y particiones.Estandarizar experimentos ML, QA técnico, evaluación de modelos y comparación entre datasets.
statistics.jsonMétricas de distribución: clases IFC, tipos de relaciones, cobertura de propiedades y densidad del grafo.Auditar balance, sesgos, cobertura, complejidad y consistencia antes de entrenar modelos.
dataset_card.mdFicha técnica legible por humanos con alcance, supuestos, limitaciones y recomendaciones.Documentar uso permitido, contexto de generación, riesgos y condiciones para publicación o investigación.
quality_report.jsonResultado de validaciones semánticas, topológicas y de completitud del paquete.Verificar calidad, detectar gaps de propiedades, revisar reglas IFC y comparar versiones del dataset.
graph_dataset.jsonRepresentación consolidada del grafo con nodos, aristas, atributos e índices.Alimentar pipelines GNN, embeddings, análisis topológico y conversiones a otros formatos de grafo.
neo4j.cypherScript Cypher para crear constraints, nodos, relaciones y propiedades en Neo4j.Levantar un property graph consultable sin construir manualmente el importador.
ml_tabular.csvTabla de features y labels normalizados para modelos de aprendizaje automático.Entrenar clasificadores, predictores, modelos de scoring y benchmarks reproducibles.
instruction_dataset.jsonlMuestras instrucción-respuesta sobre entidades, propiedades, relaciones y tareas BIM.Fine-tuning instructivo, evaluación de comportamiento y generación de asistentes BIM.
reasoning_dataset.jsonlCasos con razonamiento explícito sobre estructura IFC, relaciones y validaciones.Entrenar o evaluar capacidad de explicación, diagnóstico y trazabilidad técnica.
qa_dataset.jsonlPreguntas y respuestas sobre el contenido del dataset o del edificio sintético.Construir benchmarks QA, RAG, pruebas de recuperación y evaluación de respuestas BIM.
5. Uso para grafos BIM

Del modelo IFC a una red semántica entrenable.

En Buildata, un nodo representa una entidad BIM o semántica —por ejemplo un muro, espacio, nivel, material o propiedad— y una relación representa una conexión explícita entre esas entidades. Esta abstracción permite consultar, razonar y entrenar modelos sobre la estructura del edificio.

Qué es un nodo

Un nodo conserva identificadores estables, clase IFC, tipo, nombre, atributos, propiedades y features derivadas. Es la unidad mínima para clasificación, embedding o recuperación semántica.

{
  "id": "wall_000142",
  "ifc_class": "IfcWall",
  "global_id": "synthetic-guid",
  "name": "Exterior Wall 142",
  "psets": { "Pset_WallCommon": { "IsExternal": true } },
  "features": { "area": 24.8, "level_index": 2 }
}

Qué es una relación

Una relación conecta dos nodos con un tipo semántico. Puede indicar contención espacial, agregación, material, límite de espacio, abertura, relleno o dependencia topológica.

{
  "source": "building_storey_02",
  "target": "wall_000142",
  "type": "CONTAINS",
  "ifc_relation": "IfcRelContainedInSpatialStructure"
}
// Ejemplo Cypher: muros exteriores por nivel
MATCH (s:IfcBuildingStorey)-[:CONTAINS]->(w:IfcWall)
WHERE w.IsExternal = true
RETURN s.Name AS nivel, count(w) AS muros_exteriores
ORDER BY nivel;

Para GNN, los nodos se transforman en vectores de atributos y las relaciones en aristas tipadas. Con eso se pueden entrenar modelos de clasificación de entidades, predicción de relaciones, detección de anomalías topológicas y embeddings de edificios.

6. Uso para Machine Learning

Features, labels y splits reproducibles.

La capa ML transforma información BIM en registros tabulares o tareas estructuradas. Esto permite entrenar modelos clásicos, AutoML o redes simples sin tener que parsear IFC directamente.

Caso de usoInput típicoTarget
Clasificación de elementosPropiedades, cantidades, ubicación, vecinos y clase parcial.Clase IFC, categoría constructiva o tipo funcional.
Predicción de propiedadesGeometría, nivel, sistema, material y contexto espacial.Material, resistencia, condición externa, fase o parámetro faltante.
Detección de inconsistenciasCombinaciones de Psets, relaciones, topología y reglas esperadas.Registro válido, sospechoso o incompleto.
Benchmarking de pipelinesSplits de entrenamiento, validación y prueba con la misma semántica.Métricas comparables entre modelos, versiones y configuraciones.
# Ejemplo: leer una tabla ML y separar features/label
import pandas as pd

 df = pd.read_csv('ml/ml_tabular.csv')
label = 'target_class'
X = df.drop(columns=[label])
y = df[label]
print(X.shape, y.value_counts().head())
7. Uso para modelos de lenguaje BIM

Instrucciones, razonamiento y QA técnico.

La capa LLM empaqueta conocimiento BIM en JSONL para entrenamiento, evaluación o recuperación aumentada. No reemplaza al IFC ni al grafo: los convierte en ejemplos legibles por modelos de lenguaje.

Instrucciones

Pares instrucción-respuesta para tareas como clasificar entidades, explicar propiedades o resumir relaciones.

Razonamiento

Casos donde el modelo debe seguir evidencia: entidades, relaciones, reglas y conclusiones verificables.

Question Answering

Preguntas con respuestas esperadas para evaluación, RAG, copilotos BIM o asistentes de revisión técnica.

{"instruction":"Identifica la clase IFC más probable para el elemento descrito.","input":{"name":"Exterior Wall 142","properties":{"IsExternal":true}},"output":"IfcWall"}
{"question":"¿Qué elementos contiene el segundo nivel?","context_ids":["building_storey_02"],"answer":"Contiene muros, losas, puertas, ventanas y espacios asociados al nivel."}

Para RAG, una práctica recomendable es indexar chunks derivados desde dataset_card.md, nodos, relaciones y QA. Para fine-tuning, usa solo muestras curadas y evita duplicar archivos equivalentes.

8. Uso para visión computacional

Dataset de imagen desde IFC sintético.

La capa visual convierte modelos IFC sintéticos en renders RGB y anotaciones listas para entrenamiento. Puede entregarse como paquete separado para no mezclar archivos pesados con las capas estructurales.

FormatoQué contieneUso principal
RGBImágenes renderizadas desde vistas controladas de modelos IFC sintéticos, con estilos realistas o semánticos.Entrenamiento visual, inspección, generación de datos y pruebas de percepción.
COCOJSON con imágenes, categorías, bounding boxes, segmentaciones y anotaciones por instancia.Detección de objetos, segmentación de instancias y evaluación de modelos tipo YOLO, Detectron o Mask R-CNN.
ImageNetImágenes organizadas por carpetas/categorías, normalmente una etiqueta dominante por imagen o recorte.Clasificación visual de componentes, espacios o escenas BIM.
PASCAL VOCAnotaciones XML por imagen con objetos, clases y cajas delimitadoras.Entrenamiento inicial, compatibilidad con pipelines clásicos y validación de detección.

La ventaja de una capa visual sintética es que cada imagen puede mantener trazabilidad hacia el objeto BIM original: clase IFC, GUID sintético, material, nivel, espacio y relaciones del grafo.

9. Uso para validación openBIM

Datos sintéticos para probar interoperabilidad.

Un dataset Buildata puede usarse para probar herramientas openBIM sin depender de proyectos reales. La clave es comparar la misma semántica en IFC, JSON, grafo y reportes de calidad.

Revisión de entidades IFCVerifica que clases, tipos, nombres y jerarquías estén correctamente representadas en IFC y en el grafo.
Cobertura de PsetsMide presencia, completitud y consistencia de propiedades por clase, tipo de elemento o caso de uso.
Relaciones espacialesAudita contención por sitio, edificio, nivel, espacio y elemento, además de agregaciones y límites.
Calidad semánticaUsa quality_report.json para detectar inconsistencias, vacíos, duplicados, relaciones huérfanas o datos incompletos.
Testing de software AECValida visores, importadores, parsers, exportadores, pipelines ETL y reglas de negocio con datos repetibles.
10. Ejemplos prácticos

Patrones mínimos de uso.

Estos ejemplos son intencionalmente simples: sirven como punto de partida para conectar el dataset con bases de grafos, notebooks, validadores o pipelines de entrenamiento.

Cargar en Neo4j

# Con Neo4j activo localmente
cypher-shell -u neo4j -p password -f neo4j/cypher_import.cypher

# Consulta de verificación
MATCH (n) RETURN labels(n) AS labels, count(*) AS total ORDER BY total DESC LIMIT 10;

Leer nodos con Python

import json
from pathlib import Path

nodes = json.loads(Path('buildata/nodes.json').read_text())
walls = [n for n in nodes if n.get('ifc_class') == 'IfcWall']
print(f'Muros encontrados: {len(walls)}')

Entrenar un clasificador simple

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

df = pd.read_csv('ml/ml_tabular.csv')
label = 'target_class'
X = pd.get_dummies(df.drop(columns=[label]))
y = df[label]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
print(classification_report(y_test, model.predict(X_test)))

Preparar un dataset LLM

import json
from pathlib import Path

path = Path('llm/instruction_dataset.jsonl')
examples = [json.loads(line) for line in path.read_text().splitlines() if line.strip()]
print('ejemplos:', len(examples))
print(examples[0].keys())

Validar estructura IFC básica

# Ejemplo conceptual con IfcOpenShell
import ifcopenshell

model = ifcopenshell.open('ifc/building_000001.ifc')
print('Muros:', len(model.by_type('IfcWall')))
print('Espacios:', len(model.by_type('IfcSpace')))
print('Relaciones espaciales:', len(model.by_type('IfcRelContainedInSpatialStructure')))

Utiliza datasets BIM preparados para entrenar IA de verdad.

Explora el catálogo o conversemos para preparar datasets sintéticos BIM según tu caso de uso.