튜토리얼
Week 1: 온톨로지 입문

Week 1. 온톨로지 공학 입문

지식 표현의 역사, 상부 온톨로지, 도메인 온톨로지 설계


학습 목표

이 튜토리얼을 완료하면 다음을 할 수 있습니다:

  • 지식 표현(Knowledge Representation) 의 역사와 필요성 이해
  • 상부 온톨로지(Upper Ontology) 와 도메인 온톨로지의 관계 파악
  • 도메인 특화 온톨로지 설계 방법론 습득
  • Python 코드로 간단한 온톨로지 모델링

핵심 개념

1. 지식 표현이란?

지식 표현(Knowledge Representation, KR)은 인간의 지식을 컴퓨터가 처리할 수 있는 형태로 표현하는 분야입니다.

1960년대: 시맨틱 네트워크
1970년대: 프레임 이론 (Minsky)
1980년대: 전문가 시스템
1990년대: 기술 논리 (Description Logic)
2000년대: 시맨틱 웹 (RDF, OWL)
2020년대: LLM + 지식 그래프

왜 지식 그래프인가?

"파일 캐비닛" vs "탐정의 마인드맵"

복잡한 금융 사기 사건을 조사한다고 상상해보세요.

  • 관계형 데이터베이스(SQL) 는 잘 정리된 파일 캐비닛과 같습니다. "사용자", "거래", "장소" 폴더가 따로 있죠. 연결 고리(예: "사용자 A와 B가 같은 장소에서 거래했는가?")를 찾으려면 여러 폴더를 꺼내 종이를 대조해야 합니다. 데이터베이스 용어로는 "JOIN" 연산입니다. 너무 많이 하면 방이 종이로 가득 차서(일명 "조인 폭탄"), 조사가 마비됩니다.
  • 지식 그래프는 벽에 붙은 탐정의 마인드맵과 같습니다. 사람과 장소 사진이 붙어 있고, 붉은 실이 그들을 물리적으로 연결합니다. 연결을 찾으려면 실을 따라가기만 하면 됩니다. 폴더를 뒤적거릴 필요가 없죠.

이 차이는 SQL이 거래 기록에 뛰어난 반면, 그래프는 맥락연결을 이해하는 데 훨씬 우수함을 의미합니다.

접근 방식장점단점
관계형 DB성숙한 기술, ACID스키마 유연성 부족
문서 DB유연한 스키마관계 표현 어려움
벡터 DB시맨틱 검색블랙박스
지식 그래프관계 + 추론구축 복잡성

2. 온톨로지 구조

상부 온톨로지 (Upper Ontology)

모든 도메인에 적용 가능한 추상적 온톨로지입니다.

"레고(LEGO) 표준 규격" 비유

친구 10명과 거대한 레고 도시를 짓는다고 상상해보세요.

  • 각자 자신만의 블록을 정의한다면(누군가는 2x4 블록을 "벽돌"이라 부르고, 다른 누군가는 "직육면체"라 부른다면), 함께 조립할 수 없습니다. 아무것도 맞지 않죠.
  • 상부 온톨로지레고 표준 규격 정의서입니다. 모두가 동의하는 상위 수준의 보편적 개념("객체", "사건", "프로세스", "시간" 등)을 정의합니다.

자신의 도메인 온톨로지를 이 표준("상부 온톨로지")에 맞춤으로써, 나중에 다른 사람의 데이터와 연결할 수 있게 됩니다. 지식의 '범용 어댑터' 역할을 하는 셈이죠.

Thing
├── Entity
│   ├── Physical
│   │   ├── Object
│   │   └── Process
│   └── Abstract
│       ├── Concept
│       └── Relation
└── Property
    ├── Attribute
    └── Relation

대표적인 상부 온톨로지:

  • SUMO (Suggested Upper Merged Ontology)
  • DOLCE (Descriptive Ontology for Linguistic and Cognitive Engineering)
  • BFO (Basic Formal Ontology)

도메인 온톨로지

특정 도메인에 특화된 온톨로지입니다.

# 영화 도메인 온톨로지 예시
class Movie:
    title: str
    release_date: date
    genre: List[Genre]
 
class Person:
    name: str
    birth_date: date
 
class Director(Person):
    directed: List[Movie]
 
class Actor(Person):
    acted_in: List[Movie]
 
# 관계
# Director --directed--> Movie
# Actor --acted_in--> Movie
# Movie --has_genre--> Genre

3. 온톨로지 설계 원칙

Step 1: 범위 정의

역량 질문(Competency Questions) 정의:

  • "영화 X를 감독한 사람은 누구인가?"
  • "배우 Y가 출연한 영화는 무엇인가?"
  • "2024년에 개봉한 영화는 무엇인가?"

Step 2: 개념 식별

명사 추출: 영화, 감독, 배우, 장르, 시상식...

Step 3: 계층 정의

Entity
├── Person
│   ├── Director
│   ├── Actor
│   └── Producer
├── CreativeWork
│   ├── Movie
│   └── TVShow
└── Organization
    └── Studio

Step 4: 속성 정의

  • title (Movie → String)
  • directed (Director → Movie)
  • release_date (Movie → Date)

Step 5: 제약조건 추가

  • 영화는 최소 한 명의 감독이 있어야 함
  • 개봉일은 유효한 날짜여야 함
  • 장르는 정해진 목록에서 선택

실습 코드

Python으로 영화 온톨로지 모델링

from dataclasses import dataclass
from typing import List, Optional
from datetime import date
 
@dataclass
class Genre:
    name: str
    description: str
 
@dataclass
class Person:
    name: str
    birth_date: Optional[date] = None
 
@dataclass
class Movie:
    title: str
    release_date: date
    genres: List[Genre]
    directors: List[Person]
    actors: List[Person]
    runtime_minutes: int
 
# 인스턴스 생성
nolan = Person(name="Christopher Nolan", birth_date=date(1970, 7, 30))
inception = Movie(
    title="Inception",
    release_date=date(2010, 7, 16),
    genres=[Genre("Sci-Fi", "Science Fiction")],
    directors=[nolan],
    actors=[Person("Leonardo DiCaprio")],
    runtime_minutes=148
)

체크리스트

단계체크 항목
개념 이해☐ 지식 표현의 역사 이해
☐ 상부 온톨로지 vs 도메인 온톨로지 구분
설계☐ 역량 질문 정의
☐ 개념 및 계층 식별
☐ 속성 및 관계 정의
구현☐ Python 클래스로 모델링

면접 질문 맛보기

Q: 온톨로지와 스키마의 차이점은?

  • 스키마: 데이터 구조 정의 (테이블, 컬럼)
  • 온톨로지: 개념의 의미와 관계 정의 (시맨틱)

예시: 영화 테이블 스키마는 단순히 컬럼을 정의하지만, 온톨로지는 "감독은 Person의 일종이며, Movie와 'directed' 관계를 갖는다"를 표현합니다.

더 많은 면접 질문은 Premium Interviews (opens in a new tab)에서 확인하세요.


🎬 프로젝트: 영화 추천 지식그래프

이 과정에서는 9주에 걸쳐 영화 추천 지식그래프를 완성합니다. 매주 배운 개념을 프로젝트에 적용하며 실력을 쌓아갑니다.

프로젝트 개요

Week주제프로젝트 마일스톤
1온톨로지 입문영화 도메인 설계
2RDF & RDFS영화 데이터를 트리플로 표현
3OWL & 추론추론 규칙으로 숨은 관계 발견
4지식 추출위키피디아에서 영화 정보 수집
5Neo4j그래프 DB에 저장 및 쿼리
6GraphRAG"놀란 감독 스타일 영화 추천" 자연어 질의
7온톨로지 에이전트새 영화 자동 업데이트
8도메인 확장의료/법률/금융 케이스
9서비스 배포API + 대시보드

Week 1 마일스톤: 영화 도메인 온톨로지 설계

이번 주에는 영화 추천 시스템의 기반이 될 온톨로지를 설계합니다.

목표 질문 (Competency Questions):

  • "인셉션을 감독한 사람은?"
  • "레오나르도 디카프리오가 출연한 SF 영화는?"
  • "2010년 이후 평점 8.0 이상 영화는?"

설계할 클래스:

Movie
├── title: string
├── releaseDate: date
├── rating: float
└── runtime: integer

Person
├── name: string
└── birthDate: date

Director (extends Person)
└── directed: Movie[]

Actor (extends Person)
└── actedIn: Movie[]

Genre
└── name: string

설계할 관계:

  • directed: Director → Movie
  • actedIn: Actor → Movie
  • hasGenre: Movie → Genre

프로젝트 노트북에서 영화 추천 지식그래프의 첫 번째 단계를 시작합니다.

프로젝트 노트북에서는 다음을 직접 구현합니다:

  • owlready2로 Movie, Person, Director, Actor, Genre 클래스 생성
  • directed, actedIn, hasGenre 관계 정의
  • 인셉션, 다크나이트 등 실제 영화 데이터 입력
  • "놀란 감독 영화 찾기" 쿼리 작성

9주 후 완성되는 것: "놀란 감독 스타일의 SF 영화 추천해줘"라고 물으면, 지식그래프에서 감독-장르-평점 관계를 추론하고 자연어로 답변하는 AI 에이전트


실습 노트북

이론을 더 깊이 탐구하고 싶다면:

실습 노트북에서는 추가로 다음 내용을 다룹니다:

  • SUMO, DOLCE, BFO 상부 온톨로지 비교
  • 의료/법률 도메인 온톨로지 설계 연습
  • OWL 파일(.owl) 저장 및 로드
  • 역량 질문 기반 온톨로지 검증

다음: Week 2: RDF & RDFS