지난 주말 감사한 기회를 통해 제 6회 GUG 세미나에 연사자로서 참여하게 되었다.
GUG 세미나는 Graph User Group이라는 그래프 기술 지식교류 모임에서 주최하는 세미나로,
이번 세미나는 '온톨로지와 GraphRAG'라는 주제로 다뤄지게 되었다.
온톨로지와 관련된 여러 주제 중 '온톨로지 구축 및 평가'를 주제로 발표하게 되었는데,
업무에서 지식그래프를 처음 접하게 되었던 시기에 어떻게 온톨로지를 만들게 되었는지와
그 이후에 정량적인 지표를 통해 온톨로지를 평가 방식에 대하여 이야기를 나누게 되었다.
이번 글에서도 해당 세미나 내용을 중심으로 조금 더 깊이 있게 다뤄보고자 한다.
이런 분들이 읽으시면 좋아요!
* 온톨로지가 무엇인지 궁금하신 분
* 온톨로지를 어떻게 만들기 시작해야 하는지 궁금하신 분
* 구축해둔 온톨로지의 구조에 대하여 정량적인 평가를 하고자 하시는 분
온톨로지(Ontology)란?
'온톨로지'라는 개념은 사실 통상적으로 널리 알려진 개념은 아닌, 다소 생소하게 느껴질 수 있는 분야이다.(하지만.. 해당 세미나에 참석하신 분들 중 대부분 온톨로지에 관심이 있는 분들이셔서 깜짝 놀랐다.. 내가 우물 안 개구리였구나 느낄 수 있는 순간이었다..!)
온톨로지의 사전적 정의를 살펴보면,
'존재하는 사물과 사물 간의 관계 및 여러 개념을 컴퓨터가 처리할 수 있는 형태로 표현한 것'이라고 설명하고 있다.
우리가 창작물의 종류에는 문학, 음악, 시각, 영상이 있다고 개념적으로 생각하고 이해하고 있듯이,
이런 분류 정보를 컴퓨터도 이해할 수 있도록 정의해주는 지식 체계를 온톨로지라고 한다.
온톨로지에는 다음과 같은 구성요소가 존재한다.
- 분류(Class): 개념이 같은 대상을 묶은 집합
- 속성(Property): 분류(Class) 또는 객체(Instance)가 가지는 특성
- 객체(Instance): 분류(Class)의 개별적인 예제
- 제약조건(Constraint): 속성(Property)에 대한 사용범위 등을 제한
이러한 온톨로지 중에는 일반적인 개념들을 구성하는 온톨로지도 있으며, 특정 도메인에 대해 세부적으로 다루는 온톨로지도 있는데,
여기에서는 일반 개념들을 다루는 온톨로지의 분류 체계를 어떻게 구축하였는지에 대해 설명하고자 한다.
온톨로지 분류 체계(Taxonomy)의 구축 방식
(참고) 해당 내용에 대한 구체적인 정보는
"방향 비순환 그래프의 중심성을 이용한 위키데이터 기반 분류체계 구축 (2021)" 논문을 통해 확인하실 수 있습니다.
전통적으로 통상적인 온톨로지를 구축하는 방식은 TiFi: Taxonomy Induction for Fictional Domains (2019) 논문에 의하면 아래 3가지로 나뉜다.
- 수동 구축
: 해당 도메인 전문가 및 온톨로지 전문가(Ontologist)들에 의해 수동으로 생성 - 말뭉치(text corpora) 활용
: 상하위 관계 나타내는 일정 텍스트 패턴(ex: Hearst 패턴)을 정의한 뒤, 말뭉치(text corpora)에서 해당 패턴을 추출하여 생성 - 위키피디아 분류 네트워크(WCN: Wikipedia Category Network) 활용
: 위키피디아 내부적으로 구성하고 있는 분류체계를 통하여 생성
위 방식 중, 데이터 기반으로 명확히 생성할 수 있는 위키피디아 분류 네트워크(WCN) 활용 방식을 통해 진행하였으며,
위키피디아가 속해있는 위키미디어 프로젝트 중 지식그래프와 같은 형식으로
각 객체에 대한 속성 및 값 정보를 제공하고 있는 위키데이터(Wikidata)를 기반으로 진행하게 되었다.
Wikidata 중 분류체계를 담고 있는 데이터(item)는 instance of가 "Wikimedia category(Q4167836)" 로 설정되어 있다.
이 중, 업무에서는 한국어 분류체계를 중심으로 다루고자 했기 때문에 이름(label)이 "분류:~"로 시작하는 대상으로 필터링했다.
해당 데이터가 갖고 있는 속성 중,
"category contains(P4224)"라는 속성을 통해 해당 분류가 어떤 데이터에 속하는지 파악할 수 있었으며,
따라서 해당 속성 값을 기반으로 온톨로지의 분류 체계를 생성하기 위한 후보군을 추출할 수 있었다.
(ex: 사람 - human: Q5, 영화 - film: Q11424)
약 1000개의 분류 후보군을 추출한 뒤,
wikidata에서 보유하고 있는 데이터 간 상하위 관계를 나타내는 속성인 "subclass of(P279)"를 기반으로
각 분류 간 연결 정보를 통해 DAG(Directed Acyclic Graph: 방향 비순환 그래프) 형식의 분류 체계를 생성할 수 있었다.
다만 위와 같이 생성했을 때, 과도하게 많은 분류가 존재한다고 판단되어 불필요하게 생성된 분류는 제거할 필요성이 생기게 되었다.
따라서 한 정점에서 도달할 수 있는 다른 정점의 비율을 나타내는 local reaching centrality를 기준으로 가지치기(pruning)을 진행하였으며,
해당 centrality가 0인 대상을 제거함으로서 약 250개의 분류와 약 300개의 상하위 관계를 가진 분류체계를 생성할 수 있었다.
온톨로지 분류 체계(Taxonomy)의 평가 방식
(참고) 해당 내용에 대한 구체적인 정보는
"Class Granularity: How richly does your knowledge graph represent the real world? (2024)" 논문을 통해 확인하실 수 있습니다.
이와 같이 온톨로지의 분류 체계를 구축했는데,
또한 앞으로 분류 체계를 필요에 의해 수정해나갈 때 수정한 뒤의 분류 체계가 더욱 좋은 분류 체계인지 알 수 있는 방법이 필요했다.
따라서 온톨로지를 정량적으로 평가할 수 있는 지표를 마련하고자 하였다.
우선 기존 온톨로지 평가 지표를 살펴봤을 때, OntoCAT: An Ontology Consumer Analysis Tool and Its Use on Product Services Categorization Standards (2006) 논문에 의하면 아래와 같이 3가지 종류의 지표가 존재하고 있다.
- Schema Metrics: 분류 체계의 구조 특성을 담은 지표
- Attribute Richness: class 당 평균 property 수
- Inheritance Richness: class 당 평균 하위 class (subclass) 수
- Instance Metrics: 인스턴스 분포 정보를 담은 지표
- Class Richness: instance가 존재하는 class 비율
- Average Population: class 당 평균 instance 수
- Class Metrics: 분류별 특성을 담은 지표
- Importance: 해당 class에 속하는 instance 비율
- Relationship Richness: 해당 class의 property 중 실제 데이터가 존재하는 property 비율
다만 위 방식으로는 특정 분류(class)를 세분화시켰을 때 좋은 분류체계를 나타내는 것인지,
해당 분류만의 고유 특징을 잘 담아내고 있는 것인지에 대한 확인이 어려웠다.
따라서 Class Granularity라는 분류 세분화에 대한 지표를 생성해 보았으며, 해당 지표 계산 방식은 다음과 같다.
(아래 분류체계 및 수치 정보는 모두 실제 개체 및 속성 수를 나타내는 것이 아닌, 그저 예시일 뿐이다..!)
1. DP(Distinct Property)
우선 각 분류(class)마다 정의되어 있는 속성(property) 수를 계산한다.
2. IDPP(Instance with Distinct Property Proportion)
그 다음, 실제 정의된 속성이 얼마나 사용되고 있는지 확인하고자
각 분류에 정의된 속성(DP: Distinct Property)별로 사용되고 있는 비율을 계산한다.
3. IDPPA(Instance with Distinct Property Proportion Average)
2번에서 각 속성마다의 비율을 계산했다면, 해당 값을 분류별로 평균을 계산해준다.
4. Class Granularity
최종적으로는, 3번에서의 분류별 IDPPA 값에 대하여 평균을 계산해 줌으로서
분류 세분화에 대한 지표를 나타내는 Class Granularity를 구해줄 수 있게 된다.
이와 같은 Class Granularity는 특정 분류를 세분화하고자 할 때,
세분화하는 것이 더욱 유의미한 분류 체계를 생성하는 것인지 세분화 전/후 지표 결과를 비교하며 온톨로지를 구축하는 데에 활용할 수 있다.
결론
지금까지 세상에 대해 사람들이 생각하는 것을 컴퓨터가 이해할 수 있도록 만드는 온톨로지의 분류 체계에 대하여 구축하고 평가하는 방법에 대해 살펴보았다.
위키미디어 재단에서의 분류를 기준으로 wikidata를 기반으로 분류 체계를 생성한 과정과
온톨로지를 평가할 수 있는 방식 및 분류 세분화와 관련된 지표에 대해서 다뤄보았는데,
해당 정보가 온톨로지를 처음 구축하고자 하시는 분들과 평가를 진행하기 원하시는 분들에게 조금이나마 도움이 되었으면 좋겠다.
또한 이러한 온톨로지를 기반으로 더욱 체계적인 지식그래프를 생성함으로써 더욱 성능이 좋은 GraphRAG를 만들 수 있다고 하는데,
말로만 들어왔던 GraphRAG에 대해 좀 더 살펴보면서 더 가치있게 온톨로지 - 지식그래프 - RAG 간 시너지를 낼 수 있는 방안에 대해 고민해볼 수 있도록 해야겠다.
'DATA SCIENCE' 카테고리의 다른 글
[KG] GraphRAG: RAG에 지식그래프 더하기 (논문 Review - From Local to Global: A GraphRAG Approach to Query-Focused Summarization) (1) | 2024.11.10 |
---|---|
[KG] LLM에 날개를 달아줄 지식그래프 (Unifying Large Lanuage Models and Knowledge Graphs 논문) (2) | 2023.07.02 |
[KG] 세상의 모든 데이터를 하나로 연결하는 지식그래프 (Knowledge Graph) (1) | 2023.03.12 |
[Kaggle] kernel 내 plot에서 한글 깨짐 해결 (0) | 2020.07.05 |
[Kaggle] kernel에서 data 추가하기 (0) | 2020.07.05 |