Ontology (온톨로지)
정의
**Ontology (온톨로지)**는 특정 도메인의 데이터 표준을 정의하는 행위이자, 그 표준을 컴퓨터가 이해할 수 있는 형식으로 표현한 모델. 사람들 간의 합의된 개념, 속성, 관계를 구조화하여 컴퓨터가 처리할 수 있게 함.
핵심 요소
| 요소 | 설명 | 예시 |
|---|---|---|
| Classes (클래스) | 개념의 범주 | Movie, Actor, Director, User |
| Properties (속성) | 객체의 특징 | title, release_date, rating, language |
| Relationships (관계) | 객체 간의 연결 | ACTED_IN, DIRECTED_BY, RATED |
| Constraints (제약) | 규칙과 제한사항 | rating 0-10, release_date는 과거 |
온톨로지 설계 프로세스
도메인 분석 (Domain Analysis)
↓
개념 추출 (Concept Extraction)
↓
관계 정의 (Relationship Definition)
↓
속성 결정 (Property Assignment)
↓
제약 조건 설정 (Constraints)
↓
온톨로지 모델링 (Formal Representation)
↓
검증 및 최적화 (Validation & Optimization)
실제 예시: 영화 도메인
Classes
Movie (영화)
├─ title: String
├─ release_date: Date
├─ duration: Integer
├─ rating: Float (0-10)
└─ description: Text
Actor (배우)
├─ name: String
├─ birth_date: Date
├─ nationality: String
└─ filmography: [Movie]
Director (감독)
├─ name: String
├─ birth_date: Date
└─ directed_movies: [Movie]
User (사용자)
├─ user_id: String
├─ name: String
└─ preferences: [String]
Relationships
ACTED_IN(Actor → Movie)
- 배우가 영화에 출연
DIRECTED_BY(Movie → Director)
- 영화를 감독이 연출
BELONGS_TO(Movie → Genre)
- 영화가 장르에 속함
RATED(User → Movie)
- 사용자가 영화에 평점 부여
SIMILAR_TO(Movie → Movie)
- 영화들 간의 유사성
온톨로지 vs. 지식그래프
| 항목 | 온톨로지 | 지식그래프 |
|---|---|---|
| 역할 | 설계/표준 정의 | 구현/실제 데이터 |
| 대상 | 개념/관계 (추상) | 구체적 인스턴스 |
| 예시 | Class “Movie” | 노드 “Inception (영화)“ |
| 목적 | 도메인 모델링 | 데이터 저장 및 검색 |
Ontology (설계 단계)
Movie, Actor, ACTED_IN
↓
Knowledge Graph (구현 단계)
[Inception] --ACTED_IN--> [Leonardo DiCaprio]
문서에서의 온톨로지 추출
예: 책의 구조
온톨로지:
Book (클래스)
├─ title
├─ author
├─ Chapter (하위 클래스)
│ ├─ title
│ └─ section
└─ INDEX (관계)
└─ reference_count
문서 내 관계들:
- 제목 ↔ 목차 (포함 관계)
- 목차 ↔ 소목차 (계층 관계)
- 개념 ↔ 개념 (참조 관계)
- 본문 ↔ 각주 (설명 관계)
한 문서만 분석해도 추출되는 관계 수: 매우 많음 (전체 맥락)
GraphRAG와의 관계
1. 온톨로지 설계
└─ 클래스, 속성, 관계 정의
2. 지식그래프 구축
└─ 온톨로지 기반으로 실제 노드/엣지 생성
3. GraphRAG 검색
└─ 정제된 온톨로지 기반의 풍부한 검색
4. 에이전트 활용
└─ 구조화된 정보로 고품질 답변 생성
온톨로지 설계의 중요성
✅ 좋은 온톨로지의 효과
- 의미 명확성: 모호함 제거
- 재사용성: 다른 시스템에서도 적용 가능
- 확장성: 새로운 클래스/관계 추가 용이
- 상호운용성: 다양한 도메인과 통합 가능
❌ 나쁜 온톨로지의 문제
- 혼란: 같은 개념을 다르게 표현
- 불완전성: 핵심 관계 누락
- 과도 복잡성: 필요 이상으로 상세함
- 유지보수 어려움: 변경 시 파급 효과 큼
온톨로지 모델링 표기법
1. UML (Class Diagram)
┌─────────────┐
│ Movie │
├─────────────┤
│ - title │
│ - rating │
├─────────────┤
│ + getActors │
└─────────────┘
2. RDF/Turtle
:Movie a owl:Class ;
rdfs:label "영화" ;
rdfs:comment "영화 작품" .
:title a owl:DatatypeProperty ;
rdfs:domain :Movie ;
rdfs:range xsd:string .3. Property Graph (Neo4j)
CREATE (m:Movie {title: "Inception", rating: 8.8})
CREATE (a:Actor {name: "Leonardo DiCaprio"})
CREATE (m)-[:ACTED_IN {character: "Cobb"}]->(a)
실무 팁
- 도메인 전문가와 협력: 올바른 개념 정의 필수
- 작게 시작: 핵심 개념부터 시작 후 확장
- 반복적 설계: 초안 → 검증 → 개선 사이클
- 문서화: 명확한 정의 기록 (미래 유지보수 위해)
- 버전 관리: 온톨로지 변경 이력 추적
통합 개념
- Knowledge Graph — 온톨로지의 구현체
- Graph Database — 온톨로지 저장 수단
- Graph RAG — 온톨로지 기반 검색
- — 온톨로지 표현 방식
관련 소스: why-use-graphrag (온톨로지 도입부)