Section 01지식을 그래프로
텍스트는 중복으로 가득하다. RAG가 청크를 검색해 LLM에 넣을 때, 노이즈도 함께 들어간다. 우리에게 필요한 것은 간결한 개요도다.
대부분의 사람은 마인드맵의 이점을 안다. 좋은 개요도는 간결하다 — 책의 모든 것에 밑줄을 긋는 것은 아무것도 긋지 않는 것과 같다. 개요도의 원칙은 미래에 질문에 답하게 해줄 핵심 정보와 그것을 잇는 관계를 추출하는 것이다.
이런 스키마는 그래프 — 더 정확히는 지식 그래프(Knowledge Graph, KG) — 로 표현된다. 컴팩트하고, 엔티티와 관계로 지식을 나타내며, 그래프 검색 알고리즘으로 분석할 수 있다.
그래프와 지식 그래프
그래프는 노드(꼭짓점)를 관계(엣지)로 연결한 데이터 구조다. 무방향·방향·가중치·레이블·다중그래프 등 여러 유형이 있다. KG는 세 가지 속성을 가진 그래프다.
- 노드는 실제 엔티티를 나타낸다(사람·장소·유전자·질병·금융 상품).
- 관계는 노드 간의 의미론적 연결을 정의한다.
- 노드와 엣지는 속성을 가질 수 있다(라벨·출생일·식별자).
정식으로, KG는 사실 기반의 삼중항(triplet)으로 표현되는 지식 기반이다. 삼중항은 (head, relation, tail) 또는 (subject, predicate, object) 형태다 — 예: (Napoleon, BornIn, Ajaccio).
Section 02분류법과 온톨로지
그래프와 KG의 차이는 무엇인가. 그래프는 엔티티 간 관계를 표현하는 구조일 뿐이지만, KG는 인간과 기계에 추론 능력을 주어 의미론적 관계를 명시적으로 만든다.
분류법 (Taxonomy)
분류법은 유사한 의미를 계층 구조로 정리한 것이다(보통 트리 — dog와 cat을 mammals 아래로). 매우 큰 KG를 검색·필터링할 때 도움이 된다.
온톨로지 (Ontology)
온톨로지는 분류법과 비슷하지만 더 유연하고 표현력 있다. 엔티티 그룹의 관계·속성·분류를 정의하고, 엔티티가 어떻게 상호작용하는지 규칙까지 정한다(합집합·여집합·기수성·추이성). 공유 어휘를 활성화해 정보를 일관되게 통합한다.
| 유형 | 역할 | 위치 |
|---|---|---|
| 도메인 독립 온톨로지 | 특정 도메인과 무관한 기본 개념 제공, 데이터 통합 지원 | 첫 번째 수준, 먼저 구축 |
| 도메인 온톨로지 | 전문 도메인(의료·금융)의 기본 용어 제공 | 하위 수준, 도메인 독립의 부클래스 |
KG는 정적 개체가 아니다. 지식은 진화하고 새 엔티티·관계가 추가된다. 지식 그래프 추론(KGR)의 핵심 작업 중 하나가 새 관계 예측이다 — A가 B의 남편이고 C의 아버지라면, B는 C의 어머니다: (A, husband of, B) ∧ (A, father of, C) → (B, mother of, C).
Section 03LLM으로 KG 생성
KG 구축은 다단계 프로세스다.
① 지식 생성 — KG의 목적을 정하고, 소스를 모으고, 어디에 저장·쿼리할지 결정한다.
② 지식 평가 — 얻은 KG의 품질을 평가한다.
③ 지식 정제 — 오류를 확인하고 수정한다(평가와 동시 수행 가능).
④ 지식 보강 — 지식의 간격을 채운다. 추가 소스를 통합하거나 여러 KG를 병합한다.
⑤ 지식 배포 — KG를 독립 애플리케이션(그래프 DB)으로 배포하거나 다른 앱에서 쓴다.
지식 생성의 첫 단계는 온톨로지 정의다. 하향식(핵심 온톨로지 먼저)이나 상향식(전문 온톨로지 먼저)으로 접근한다. 다음은 소스에서 삼중항을 추출하는 일이다. 두 작업으로 나뉜다.
- 명명된 개체 인식(NER) — 텍스트에서 엔티티를 추출·분류한다.
- 관계 추출(RE) — 문맥에서 엔티티 간 연결을 식별한다.
LLM은 훈련되지 않은 작업에도 유용한 선천적 능력을 가졌다. 그래서 LLM으로 엔티티와 관계를 추출해 KG를 구축할 수 있다.
def extract_triplets(text, ontology): prompt = build_prompt(text, ontology) # 온톨로지 제약 포함 response = llm.generate(prompt) triplets = [] for line in response.parse(): h, r, t = line.head, line.relation, line.tail if validate(h, r, t, ontology): # 온톨로지 검증 triplets.append((h, r, t)) return triplets # 그래프 DB에 저장
Section 04GraphRAG
전통적 RAG는 임베딩 벡터의 유사도로 텍스트 청크를 찾는다. GraphRAG는 지식 그래프에서 검색하고, 찾은 삼중항을 컨텍스트로 제공한다.
GraphRAG는 LLM에 컨텍스트를 제공하고 더 나은 응답을 생성하기 위해 KG를 활용하는 프레임워크다. 고전적 RAG와 매우 비슷해, 혼동을 피하려 후자를 벡터 RAG라 부른다. GraphRAG는 세 단계로 이루어진다.
① 그래프 기반 인덱싱(G-indexing) — 그래프 데이터베이스를 구축하고 올바르게 인덱싱한다. 개방 KG(위키데이터 등)를 쓰거나 직접 구축한다.
② 그래프 가이드 검색(G-retrieval) — 쿼리가 오면 답에 필요한 부분 그래프를 추출한다.
③ 그래프 향상 생성(G-generation) — 찾은 지식을 컨텍스트로 LLM이 답변을 생성한다.
| 검색기 | 방식 | 특성 |
|---|---|---|
| 비모수 검색기 | 휴리스틱 규칙, k-홉 경로 탐색 | 가장 단순·빠름, 부정확 |
| GNN 기반 검색기 | 그래프 신경망으로 유사 부분 그래프 검색 | 정확하지만 계산 비용 큼 |
| LLM 기반 검색기 | 트랜스포머 모델, 도구로 그래프 검색 | 정확, 에이전트로 활용 가능, 비쌈 |
검색 세분성
벡터 RAG는 청크 크기로 세분성을 제어하지만, GraphRAG는 무엇을 검색하느냐로 제어한다.
- 노드 — 개별 엔티티와 그 속성. 대상이 명확한 쿼리에 유용.
- 삼중항 — 노드와 그 관계까지. 관계에 관심 있을 때.
- 경로 — 노드와 관계의 체인. 엔티티 X에서 Y까지 잇는 사슬.
- 부분 그래프 — 노드·관계의 부분집합. 복잡한 패턴 분석에.
- 하이브리드 — 여러 세분성을 적응적으로.
찾은 그래프 정보는 LLM에 더 소화하기 쉬운 형태로 변환된다 — 그래프 형식(인접 행렬·엣지 테이블), 자연 언어 설명, 구문 트리, 또는 GraphML 같은 코드 유사 형식.
Section 05그래프 추론
KG는 검색뿐 아니라 추론의 도구다. 그래프에 담긴 정보와 그래프 자체의 구조에 대해 추론할 수 있다.
- 지식 그래프 임베딩 — 엔티티·관계를 벡터로 임베딩해 누락 관계 예측 등에 쓴다.
- 그래프 신경망(GNN) — 그래프를 기본으로 처리하는 신경망. 노드 분류·엣지 예측에.
- 지식 그래프에 대한 LLM 추론 — LLM이 그래프 구조와 내용에 대해 추론한다.
| 방식 | 지식 출처 | 강점 |
|---|---|---|
| 직접 LLM | 매개변수적 메모리만 | 빠름, 외부 의존 없음 · 환각·구식 지식 |
| 벡터 RAG | 텍스트 청크 | 최신 정보 · 중복·전역 정보 부족 |
| GraphRAG | 엔티티·관계·부분 그래프 | 컴팩트, 구조적 추론, 전역 정보 · 구축 비용 |