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.
Escasez de datos BIM abiertos
Los modelos reales suelen estar protegidos por contratos, propiedad intelectual, datos de clientes y formatos difíciles de homogeneizar.
Datos controlados y repetibles
Buildata permite generar estructuras comparables, versionadas y medibles para entrenamiento, evaluación y pruebas de software.
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.
| Capa | Qué representa | Uso típico |
|---|---|---|
| IFC | Modelo openBIM interoperable con entidades, geometría, propiedades y relaciones normalizadas. | Validar parsers, visores, exportadores, reglas IFC y compatibilidad entre herramientas. |
| Grafo | Nodos y relaciones que expresan espacios, elementos, propiedades, materiales y topología. | Consultas semánticas, Neo4j, GNN, link prediction y razonamiento sobre relaciones. |
| Tabla | Features 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. |
| LLM | Muestras 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ón | Renders RGB y anotaciones derivadas desde modelos IFC sintéticos. | Detección, clasificación, segmentación y pruebas visuales en software AEC. |
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.
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.
Leer metadatos
Parte por metadata/dataset.json y statistics.json para conocer versión, esquema IFC, conteos, calidad y capas disponibles.
Inspeccionar nodos y relaciones
Abre nodes.json y edges.json para verificar clases IFC, GUIDs, propiedades, relaciones espaciales y topología base.
Cargar Neo4j
Usa los scripts Cypher incluidos para crear un property graph consultable y ejecutar QA topológico o búsqueda semántica.
Usar tareas ML
Revisa tasks.json, ml_tabular.csv y splits JSONL para entrenar clasificadores, predictores o validadores reproducibles.
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
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.
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.
| Archivo | Rol técnico | Para qué sirve |
|---|---|---|
| nodes.json | Inventario 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.json | Aristas 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.json | Definició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.json | Mé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.md | Ficha 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.json | Resultado 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.json | Representació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.cypher | Script Cypher para crear constraints, nodos, relaciones y propiedades en Neo4j. | Levantar un property graph consultable sin construir manualmente el importador. |
| ml_tabular.csv | Tabla de features y labels normalizados para modelos de aprendizaje automático. | Entrenar clasificadores, predictores, modelos de scoring y benchmarks reproducibles. |
| instruction_dataset.jsonl | Muestras 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.jsonl | Casos 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.jsonl | Preguntas 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. |
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.
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 uso | Input típico | Target |
|---|---|---|
| Clasificación de elementos | Propiedades, cantidades, ubicación, vecinos y clase parcial. | Clase IFC, categoría constructiva o tipo funcional. |
| Predicción de propiedades | Geometría, nivel, sistema, material y contexto espacial. | Material, resistencia, condición externa, fase o parámetro faltante. |
| Detección de inconsistencias | Combinaciones de Psets, relaciones, topología y reglas esperadas. | Registro válido, sospechoso o incompleto. |
| Benchmarking de pipelines | Splits 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())
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.
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.
| Formato | Qué contiene | Uso principal |
|---|---|---|
| RGB | Imá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. |
| COCO | JSON 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. |
| ImageNet | Imágenes organizadas por carpetas/categorías, normalmente una etiqueta dominante por imagen o recorte. | Clasificación visual de componentes, espacios o escenas BIM. |
| PASCAL VOC | Anotaciones 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.
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.
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')))