데이터 구조화의 끝판왕
AI가 "이해"하는 데이터를 만드는 법
데이터에 "의미"를 부여하는 두 가지 핵심 개념
도메인의 개념과 관계를 형식적으로 정의한 체계. "고객은 주문을 하고, 주문은 제품을 포함하고, 제품은 카테고리에 속한다"를 기계가 이해할 수 있는 형태로 표현한다. 온톨로지는 스키마다 — 실제 데이터가 아니라 데이터의 구조와 규칙을 정의한다.
온톨로지를 기반으로 실제 데이터를 노드와 엣지로 연결한 그래프 구조. 온톨로지가 "고객은 주문을 한다"라는 규칙이면, 지식 그래프는 "김철수가 주문#1234를 했다"라는 실제 사실이다. 지식 그래프는 인스턴스 데이터다.
관계형 DB는 테이블과 JOIN으로 관계를 표현한다. 관계가 깊어지면 JOIN이 복잡해지고 성능이 떨어진다. 지식 그래프는 관계 자체를 일급 시민으로 저장하기 때문에, "3단계 떨어진 관계"를 찾는 것이 자연스럽고 빠르다. AI가 "김철수의 동료가 구매한 제품의 카테고리"를 찾아야 할 때, JOIN 5개보다 그래프 순회가 빠르다.
벤치마크에 따르면, 지식 그래프 없이 LLM을 사용하면 정확도 16.7%, 지식 그래프를 연결하면 56.2% — 3.4배 향상. 엔티티가 10개 이상인 복잡한 질문에서는 벡터 검색 정확도가 0%로 떨어지지만, 지식 그래프 기반은 70% 이상을 유지한다.
처음부터 OWL을 만들 필요는 없다 — 단계적으로 깊이를 더한다
단어와 정의만 있는 목록
시작점계층 구조 (is-a 관계). 예: 동물 > 포유류 > 개
분류동의어, 관련어, 상위어/하위어
관계속성, 제약, 논리 규칙, 추론 가능
추론모든 지식 그래프는 주어-술어-목적어 트리플로 구성된다
벡터 검색만으로 한계에 부딪혔다면 — 그래프가 답일 수 있다
출처: FalkorDB, TianPan, Lettria
| 질문 유형 | Vector RAG | GraphRAG | 추천 |
|---|---|---|---|
| "X에 대한 문서 찾아줘" | 적합 | 과잉 | Vector |
| "A와 B의 관계가 뭐야?" | 부족 | 적합 | Graph |
| "지난달 X의 총 매출은?" | 불가 | 적합 | Graph |
| "A가 B에게 미친 영향의 경로?" | 불가 | 적합 | Graph |
| "이 주제의 최신 논문 요약해줘" | 적합 | 불필요 | Vector |
지식 그래프를 직접 만들어보기 위한 도구들
온톨로지를 처음 만드는 사람을 위한 단계별 접근
연구에 따르면, DB 스키마에서 온톨로지를 추출하면 텍스트에서 추출한 것과 성능이 비슷하면서 비용은 훨씬 낮다. DDL(테이블 정의)을 LLM에게 주면 클래스, 속성, 관계를 자동 추출할 수 있다. 이미 있는 데이터의 구조를 활용하라.
노드 타입 3~7개, 관계 타입 5~15개로 시작. 50개 클래스의 완벽한 온톨로지보다 5개 클래스의 정확한 온톨로지가 낫다. 필요에 따라 점진적으로 확장.
벡터 검색을 버리고 그래프로 갈 필요 없다. 80%의 쿼리는 벡터 검색으로 충분하다. 복잡한 관계 추론이 필요한 15%에 그래프를 쓰고, 나머지는 벡터에 맡겨라.
초기 GraphRAG 구현에서 가장 큰 문제: "John Doe, 45" vs "John Doe, age 45", "Type 2 Diabetes" vs "T2D". 같은 엔티티를 다른 이름으로 인식하면 그래프가 무너진다. 동의어 사전과 정규화가 핵심.