KnowledgeGraph

[지식그래프] #4. 계층적인 구성이 용이한 지식 그래프

joyHong 2022. 8. 28. 00:23

이번 글에서는 저장소에 저장되어 있는 동일한 데이터에 대해 도메인마다 혹은 데이터를 보는 관점마다 다르게 접근할 수 있는 방안에 대해 다루어 보려고 합니다. 예시로 사용하고자 하는 데이터는 이전 글에서 사용한 arxiv 데이터를 그대로 사용합니다.

arxiv 데이터에는 저자, 논문, 분류에 대한 데이터를 그래프 형태로 저장하고 있습니다. 만약 이 데이터를 2개의 부서 혹은 조직 혹은 사용자 그룹에서 사용하고자 한다고 가정할 때, 저자(사람)에 대한 정의가 조금씩 다를 수 있습니다. A조직은 ‘저자'라고 부르지만 B조직은 ‘연구자'라고 부를 수 있습니다. (예시를 위해 비약적으로 레이블을 통해 구분하였습니다. 실제 경우는 도메인마다 다른 유형들이 있을 것입니다.)

예시에서는 간단하지만 데이터가 많아지고 위에서 처럼 레이블로 구분되는 경우가 아니라면 데이터를 요청하는 곳에서 사용하는 용어들에 대해서 정확하게 대응하기가 어려울 것입니다. A조직과 B조직이 동일한 데이터를 사용함에도 도메인의 차이에 따라 서로 다르게 데이터를 지칭하는 경우와 같습니다.

이러한 경우에 지식 그래프에 또 하나의 계층을 추가하여 문제를 풀어나갈 수 있습니다. 추가하는 계층에는 특정 도메인이나 조직에서 사용하는 용어를 사용하여 데이터들을 정의합니다. 이 계층에서 사용하는 용어들은 추상화된 개념을 주로 사용하여 구성할 수 있습니다. 데이터에 메타데이터를 추가하여 사용하는 것과 유사한 개념입니다.

그럼 A조직에서 주로 사용하는 용어를 데이터에 추가하도록 하겠습니다. 원래 데이터와는 논리적으로 분리시켜 새로운 그래프에 신규 데이터를 추가하겠습니다. 이 예시에서는 arxiv_part_a 라는 그래프에 저장을 하고, 저장되는 데이터는 Author에 대한 용어로 “저자", Person에 대한 용어로 “사람"을 추가하겠습니다.

PREFIX ont: <http://localhost/ontology/>
INSERT INTO GRAPH <arxiv_part_a> {
  ont:Author rdfs:label "저자".
  ont:Person rdfs:label "사람".
}

B조직에서는 “저자"라는 용어를 사용하지 않고 “연구자"라는 용어를 사용합니다. 그렇기 때문에 B조직을 위해서는 arxiv_part_b 그래프에 Author에 대한 용어로 “연구자"를 추가하겠습니다.

PREFIX ont: <http://localhost/ontology/>
INSERT INTO GRAPH <arxiv_part_b> {
  ont:Author rdfs:label "연구자".
}

간단한 예시이지만 그래프를 구분하여 새로운 데이터를 추가하였습니다. 그래프 구조의 유연함은 새로운 정보를 손쉽게 구성할 수 있습니다.

다음으로는 각 조직마다 주로 사용하는 용어로 조회를 하도록 하겠습니다. 이 글에서는 예시로서 SPARQL 질의를 통해 설명을 하고 있지만 조회와 같은 형태들은 응용 프로그램 단에서 처리를 할 것 입니다. 즉, 실제 데이터를 조회하는 사람들은 SPARQL을 모르더라도 익숙한 키워드 기반의 검색을 통해 원하는 데이터를 찾아갈 것입니다. 따라서 사용자들이 익숙한 용어를 통해 데이터를 찾을 수 있다는 점이 주요한 포인트입니다. 아래의 예시는 A조직와 B조직의 사용자가 각각 “저자"와 “연구자"라는 용어를 통해 동일한 데이터를 찾는 것을 보여줍니다.

A조직의 사용자인 경우에는 arxiv 와 arxiv_part_a 두 개의 그래프를 통해 데이터를 찾을 수 있습니다. 아래의 예시는 “저자"라는 키워드를 입력하여 저자 목록을 찾게 해주는 SPARQL 입니다.

SELECT ?s ?label
FROM <arxiv>
FROM <arxiv_part_a>
WHERE {
  ?s a ?c .
  ?s rdfs:label ?label.
  ?c rdfs:label "저자" . 
}

반면 B조직의 사용자는 동일한 데이터이지만 “연구자"라는 용어를 통해 데이터를 찾을 수 있습니다. B조직의 사용자가 서비스를 이용할 때는 arxiv와 arxiv_part_b 두 개의 그래프를 이용합니다.

SELECT ?s ?label
FROM <arxiv>
FROM <arxiv_part_b>
WHERE {
  ?s a ?c .
  ?s rdfs:label ?label.
  ?c rdfs:label "연구자" . 
}

 

 

온톨로지로 구성된 지식 그래프는 추론 이라는 장점을 활용할 수 있습니다. 우리는 위에서 조직A에서 사용하는 용어로 Person에 “사람”이라는 용어를 생성하였습니다. 이전 글에서 생성한 온톨로지 스키마를 떠올려보면 Person은 Author의 상위 클래스로 선언을 하였습니다. 따라서 “저자"인 데이터는 모두 “사람" 이라고 할 수 있습니다. 추론을 적용하기 전에 원 데이터를 먼저 살펴보겠습니다.

SELECT *
FROM <arxiv>
WHERE {
  <http://localhost/resource/author_0> ?p ?o.
}

author_0은 유형이 Author이라고만 되어 있는 부분을 확인하였습니다. 그럼 추론을 적용하여 그 유형이 어떻게 되는지 살펴보겠습니다.

define input:inference <urn:rdf:ontology:inference:rules>
SELECT *
FROM <arxiv>
WHERE {
  <http://localhost/resource/author_0> ?p ?o.
}

author_0은 유형이 Author 뿐만 아니라 Person 이라고 함께 나옵니다.

(이 추론 부분은 지원하는 저장소마다 다릅니다. 그리고 SPARQL 구문과 컴파일러마다 서로 다릅니다.)

이를 응용하면 A조직의 사용자는 “사람"이라는 용어를 통해서도 저자 목록을 찾을 수 있게 됩니다.

define input:inference <urn:rdf:ontology:inference:rules>
SELECT ?s ?label
FROM <arxiv>
FROM <arxiv_part_a>
WHERE {
  ?s a ?c .
  ?s rdfs:label ?label.
  ?c rdfs:label "사람" . 
}

 

이글에서의 예제는 원 데이터는 전혀 손대지 않고 추가적인 데이터만 구성하여 서로 다른 용어를 사용하여 동일한 데이터를 찾는 과정을 보였습니다. 이와 유사하게 추상화 개념을 도입함으로 전체 데이터에 대한 추상 개념을 추가하고 관리할 수 있습니다. 일반적인 용어, 추상 용어를 통해 데이터에 대한 메타데이터를 부여하고 이를 통해 데이터를 찾을 수 있게 되면, 엔지니어가 복잡한 쿼리를 생성하고 요청자에게 전달하는 과정이 일부 줄어들고 복잡함이 줄어들 수 있습니다.

지식 그래프를 활용하면 데이터 민주화, FAIR 데이터 원칙 등의 물결에도 용이하게 접근할 수 있습니다. 정보의 구조화, 유연한 구성, 손쉬운 탐색, 필요한 데이터에 접근, 상호 운영성, 재사용이 가능한 데이터를 구성하는데 지식 그래프는 적절한 도구로서 활용이 가능합니다. 바로 위의 키워드들이 지식 그래프를 통해 가능하다는 것들은 간단한 예시이지만 보여진 것 같습니다. 지식 그래프는 기술입니다. 시각화 도구가 아닙니다. 데이터에 대한 접근 관점을 조금 바꾸어 보면 지식 그래프의 면모를 찾을 것입니다.

끝.