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)

실무 팁

  1. 도메인 전문가와 협력: 올바른 개념 정의 필수
  2. 작게 시작: 핵심 개념부터 시작 후 확장
  3. 반복적 설계: 초안 → 검증 → 개선 사이클
  4. 문서화: 명확한 정의 기록 (미래 유지보수 위해)
  5. 버전 관리: 온톨로지 변경 이력 추적

통합 개념


관련 소스: why-use-graphrag (온톨로지 도입부)