'2022 항저우 아시안게임 금메달리스트는?', '금메달리스트들이 태어난 곳은?', '해당 출생지들에서 태어난 다른 사람들은?'
이렇게 우리가 궁금한 내용은 꼬리에 꼬리를 물고 이어질 수 있다.
이러한 정보를 각각 나눠두지 않고 하나의 그래프로 연결시킬 수 있는데, 이것을 바로 '지식그래프(Knowledge Graph)'라고 부른다.
이번 글에서는 지식그래프란 무엇인지 살펴보고, 어떻게 활용되고 있는지 알아보고자 한다.
지식그래프(Knowledge Graph)란?
지식그래프(Knowledge Graph)는 말 그대로 "지식"을 "그래프"의 형태로 표현한 것이다.
아래 그림에서의 예시들("다빈치는 모나리자를 그렸다", "모나리자는 루브르 박물관에 위치해 있다" 등)과 같이
각 데이터 개체(entity) 사이의 관계(relation)를 그래프의 선(edge)으로 나타낸 것이며,
데이터 간 어떻게 유기적으로 연결되어 있는지 파악할 수 있는 형태로 구성되어 있다.
1990년~2000년대로 거슬러 올라가 보면,
이전에는 지식그래프라는 용어 대신 "시맨틱 웹(Semantic Web)"이라는 용어가 제시되었다.
웹의 아버지라고 불리는 팀 버너스리(Tim Berners-Lee)가 처음 제시한 이 용어는
"웹에 존재하는 정보를 기계가 이해할 수 있는 형태로 표현하는 기술"이라는 뜻을 담고 있으며,
"문서 간의 연결 뿐만 아니라 데이터 간의 연결이 이루어지고 이것이 웹에서 표현될 수 있는 것"을 시맨틱 웹의 비전으로 삼았다.
이러한 시맨틱 웹의 비전에 따라 생성된 것이 데이터를 서로 연결한 형태의 LOD(Linked Open Data)가 생성되었고, 대표적으로 아래와 같은 LOD들이 있다.
- DBpedia : https://www.dbpedia.org
- Wikidata : https://www.wikidata.org
- YAGO (Yet Another Great Ontology) : https://yago-knowledge.org
- Freebase : https://developers.google.com/freebase?hl=ko
'지식그래프'라는 용어는 2012년 구글에서 검색 서비스에 이러한 형태의 데이터를 검색 서비스에 도입하게 되면서 본격적으로 사용되게 되었다.
이후 다른 기업에서도 자체적인 지식그래프를 구축하기 시작했으며,
검색에서 특정 개체와 연관되어 있는 다른 개체에 대한 정보를 부가적으로 제공하거나, 추천시스템에서 연관된 개체를 기반으로 좀 더 관련 있는 개체를 추천해주는 식으로 활용되고 있다.
최근 chatgpt로 뜨겁게 떠오르고 있는 LLM에서도 특정 정보에 대해 좀 더 정확하고 상세한 답변을 제공하기 위해 지식그래프가 쓰일 수 있으며, 어떻게 연관되는지는 아래 글에서 확인할 수 있다.
지식그래프는 어떻게 구성되어 있을까?
지식그래프는 개체(entity)마다 속성(property)를 가지고 있고,
개체마다 지닌 속성에 따라서 개체 간의 관계(relation)가 나타낼 수 있다.
예를 들어 "손흥민(A)의 아버지(r)는 손웅정(B)이다" 라는 정보가 있었을 때,
"손흥민(A)"이라는 개체는 "아버지(r)"라는 속성의 값으로 "손웅정(B)"이라는 개체를 가지는 것이다.
(속성은 relation이라는 뜻을 담아 r로 표현해봤다.)
지식그래프는 '주제(subject)', '술어(predicate)', '객체(object)'로 구성되는 트리플(triple) 구조로 되어 있는데,
위 예시를 지식그래프의 형태로 나타내자면
손흥민(A)은 subject, 아버지(r)는 predicate, 손웅정(B)은 object로
'손흥민(subject) - 아버지(predicate) - 손웅정(object)'의 형태로 구성된다.
이렇게 표준화된 형식으로 저장하는 것을 RDF(Resource Description Framework)라고 부르며,
RDF에는 트리플 형식뿐만 아니라 각 subject와 object가 고유한 식별자인 URI(Uniform Resource Identifier - 흔히 우리가 알고 있는 url 형식이랑 유사하다고 볼 수 있다.)로 저장되어야 한다는 특징 또한 지니고 있다.
지식그래프는 어떻게 확장될 수 있을까?
지식그래프의 장점은 데이터가 서로 연결되어 있다는 점이다.
이러한 점을 이용해서 가지고 있는 정보를 이용하여 부가적인 정보를 만들어낼 수 있는데, 다음과 같은 관계 패턴을 통해 확인할 수 있다.
(여기에서의 relation은 술어(predicate)이라고 볼 수 있다.)
- symmetric relation
: A와 B 사이에 관계 r이 있다면, B와 A도 같은 관계 r을 가진다는 것이다.
ex) "임시완의 동료는 황광희"이면, "황광희의 동료도 임시완"이다. - inverse relation
: A와 B 사이에 관계 r이 있다면, B와 A는 관계 r에 대한 inverse한 관계를 가진다는 것이다.
ex) "체르니의 선생님은 베토벤"이면, "베토벤의 제자는 체르니"가 성립된다. - transitive relation
: A와 B 사이에 관계 r1가 있고, B와 C 사이에 관계 r2가 있다면, A와 C 사이에도 관계 r3가 생긴다.
ex) "바트 심슨의 엄마는 마지 심슨"이고 "마지 심슨의 남편은 호머 심슨"이면 "바트 심슨의 아빠는 호머 심슨"이다.
반면에 지식그래프의 한계점이라면 누락되어 있는 데이터가 많이 존재한다는 것이다.
실제로 Freebase라는 지식그래프에서 인물 관련 데이터의 93.8%가 출생지가 비어있고 78.5%가 국적이 비어있다고 밝혀졌다.
따라서 이를 보강할 수 있는 Knowledge Completion이라는 기술이 있으며, 다음과 같은 세부적인 문제들을 다룬다.
- link prediction
: subject - predicate - object 의 triple 구조에서 subject 또는 object가 비어있을 때 이를 추론하는 것이다.
특정 entity와 relation이 주어졌을 때, 연결될 entity를 추론하는 것이다. - relation prediction
: link prediction과는 반대로 특정 entity들이 주어졌을 때 relation을 예측하는 것이다.
subject - predicate - object에서 predicate을 예측한다고 보면 된다. - triple classification
: 위의 케이스들과는 다르게, triple이 주어졌을 때 이 triple이 참인지 거짓인지를 판별하는 것이다.
이러한 기술을 기반으로 해서 지식그래프를 더욱 완성시킬 수 있고, 이 완성된 지식그래프를 통해 다양하게 활용시킬 수 있다.
지식그래프는 어디에서 활용되고 있을까?
그렇다면 실제로 지식그래프가 어떻게 사용되고 있는지 살펴보고자 한다.
우선 대표적으로 검색 결과를 제공할 때, 연결된 정보를 기반으로 좀 더 다양한 결과를 제공할 수 있다.
예를 들어, "대만 박물관"을 검색하면 대만에 있는 박물관 목록을 제공할 수 있고, 특정 명소를 검색했을 때도 연관되어 있는 명소를 추가적으로 보여줄 수 있다.
(참고 : https://blog.naver.com/naver_search/223154215069)
또한 추천시스템에서도 활용될 수 있는데, 우리가 흔히 접하는 넷플릭스 같은 OTT 플랫폼에서의 추천 영화, 드라마 또한 지식그래프를 기반으로 추천될 수 있다.
예를 들어, 2000년대에 개봉한 액션 영화를 많이 본 사람에게는 비슷한 영화를 추천해주거나, 이를 다른 사용자의 시청기록을 기반으로도 유사하게 추천해줄 수 있다.
(참고 : https://towardsdatascience.com/movie-recommendations-powered-by-knowledge-graphs-and-neo4j-33603a212ad0)
마지막으로 LLM(Large Language Model)에서도 지식그래프를 기반으로 좀 더 다양하고 정확한 정보를 학습하여 일반적인 지식에 대한 질문도 잘 답변해주는 모델을 만들어낼 수 있다.
(참고 : https://arxiv.org/abs/2306.08302)
이렇게 '주제(subject) - 술어(predicate) - 객체(object)'와 같은 트리플(triple) 형식으로 구성되어 있는 지식그래프를 통해 다양한 정보를 생성해낼 수 있고, 여러 분야에서 활발히 활용되고 있다.
시간이 지나면서 데이터는 더 많이 쏟아지고 축적되어 갈 것이기 때문에, 지식그래프는 점점 더 커져가면서 중요하고 유용하게 사용될 수 있을 것이라고 생각한다.
앞으로 지식그래프가 이용되는 사례가 더욱 많아져서 각광받는 분야가 되었으면 좋겠다 :)
참고자료
https://www.youtube.com/watch?v=xop5tC9T5xM
https://paperswithcode.com/task/knowledge-graph-completion
'DATA SCIENCE' 카테고리의 다른 글
[KG] 온톨로지는 어떻게 만들고 평가할 수 있을까? (1) | 2024.11.24 |
---|---|
[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 |
[Kaggle] kernel 내 plot에서 한글 깨짐 해결 (0) | 2020.07.05 |
[Kaggle] kernel에서 data 추가하기 (0) | 2020.07.05 |