2020년 1월 4일 토요일

지식 서비스 개발을 위한 그래프 모델, 온톨로지 구조, SPARQL 및 CKAN 사용하기

이 글은 지식 서비스 개발을 위한 유용한 모델인 온톨로지 구조에 대해 이야기한다. 더불어, 데이터와 지식의 차이, 온톨로지와 시멘틱을 표현하는 방법을 간략히 설명하고, 관련 오픈소스를 소개한 후, 간단히 사용해 본다.

데이터와 지식의 차이
데이터를 아무리 많이 저장해 보아도, 여기서 지식을 얻는 것은 쉽지 않다. 데이터 간의 관계를 만들고, 추론할 수 있는 구조가 없으면, 쓸모없는 파일일 뿐이다. 그래서, 데이터를 어떻게 구조화하면 지식을 효과적으로 검색할 수 있는 지에 대한 연구가 오랫동안 있어 왔다. 이 글은 다음 ? 에 해당하는 것이다.

데이터 > 빅데이터 저장 > ? > 지식 검색

지식 추론 기능
지식은 사용자의 관점에 따라 상대적인 개념이다. 예를 들어, 다음과 같은 사실 데이터가 있다고 하자.
  • A는 B를 가진다.
  • B는 C를 가진다.
사실 데이터는 트리플(triple)인 주어, 목적어, 술어를 가진다. 여기서 지식은 사실 데이터를 이용해 다음과 같이 추론 될 수 있다.
  • A는 C를 가진다.
지식은 다양한 방법으로 얻을 수 있다. 사람은 지식을 얻을 때 연역, 귀납, 유추의 방법을 사용한다. 위 지식은 연역을 사용한 것이다. 귀납은 관찰된 사실을 일반화하는 것이다. 유추는 유사성을 바탕으로 대상의 성질을 추측한다. 사람은 계산을 통해, 확률 통계적 지식을 얻을 수 있다.
  • 지식 추론 기능 = {연역, 귀납, 유추, 확률 통계}
이 4가지를 지식 추론 기능이라 한다. 이 기능은 컴퓨터 계산기능으로 대치될 수 있다. 위 기능에서 연역, 귀납, 유추는 서로 유사한 면이 있다. 수치를 다루는 확률 통계는 이 글에서 다루지 않는다. 이 부분은 인공지능 머신러닝, 데이터 마이닝의 수치해석적 기능에 속한다.

이 글에서는 특히 연역 기능을 컴퓨터에서 구현하기 위한 사실 데이터 표현 방법인 온톨로지와 추론 기능에 해당하는 시멘틱 정보 검색 방법을 간략히 설명한다.

지식의 표현과 시멘틱
지식은 그래프 구조로 나타낼 수 있는 데, 특히, 멀티미디어가 많은 자료들은 그래프 형식으로 자료를 매달아 놓고, 그래프 노드 간의 관계를 정의해 놓으면, 지식을 효과적으로 추가, 삭제, 검색 할 수 있는 매우 유연한 구조로 만들 수 있다.

데이터를 그래프로 표현하가 각 데이터의 관계를 정의해 놓으면 다음과 같은 의미있는 질의를 할 수 있다.
John likes Neo.

이는 John과 Neo 사이에 어떤 관계가 있는 지를 질의하는 기능을 구현함으로써 가능하다. 시멘틱(semantic. 의미)은 사실관계가 있는 데이터를 그래프 형식으로 나타내어 검색할 수 있을 때 가능한 것이다. 이것이 가능한 데이터베이스를 시멘틱(semantic) 데이터베이스라 하며, 이 데이터베이스의 구조를 온톨로지 데이터 구조라 한다.

참고로, 시멘틱의 개념은 복잡 다양한 웹의 데이터를 효과적으로 검색하기 위한 방법을 개발하기 위해 발생되었다.

온톨로지 개념과 트리플 데이터 구조
시멘틱 데이터베이스를 만들수 있는 도구는 온톨로지(ontology)가 있다. 온톨로지는 도메인에 의존된 지식과 관계를 형식 기술 언어로 명세화한 것이다. 좀 더 쉽게 말하면 사물과 사물 간의 관계를 표현하는 방법이다.
An ontology is a formal, explicit specification of a shared conceptualization of a domain of interest) - T. Gruber
예를 들어, 다음과 같은 사물과 관계가 포함되어 있는 문장이 있다고 하자.
John friend Susan.
이 문장에는 많은 관계와 가정이 지식으로 포함되어 있다. 예를 들어, John, Susan은 사물이다. 그들과의 관계는 friend이며 friend는 최소 1명 이상 제약조건이 있다. 이를 OWL로 명세화하면 다음과 같다.
John rdf:type owl:Thing .
Susan rdf:type owl:Thing .
John rdf:type _:x .
_:x owl:onProperty friend .
_:x owl:minCardinality "1"^^xsd:nonNegativeInteger .
이렇게 사물과의 관계와 의미를 명확히 형식화하는 방법을 온톨로지라 한다. 온톨로지에 대한 상세한 설명은 다음 링크를 참고한다.
온톨로지는 그래프 형식으로 지식을 표현하는 저장소 역할을 할 수 있다. 온톨로지는 보통 Triple 형식으로 데이터를 표현하는 데, 최근 실용적으로 많이 사용되는 것은 산업표준인 TTL(Terse RDF Triple Language. Turtle) 그래프 형식의 트리플 포맷이다.

트리플 형식은 다음과 같이 기본적으로 주어, 술어, 목적어 형식의 3개 데이터를 가진다. 이를 서로 연결하면 그래프 온톨로지 구조가 된다. 주어나 목적어는 그래프의 노드, 술어는 링크로 표현된다.
이를 이용해 복잡한 모델을 연결된 데이터(Linked Data)인 간단한 그래프 구조로 만들 수 있다. 이를 이용해 그래프 데이터모델에서 지식을 얻기 위한 추론을 다음과 같이 할 수 있다.
Mike → said → (triples → can be → objects)
A → has B (B → has C)


다음은 온톨로지 저장소는 이런 그래프 데이터 형식으로 구성된 database이다. 이 database에서 추론 등 다양한 query를 하기 위한 정보 질의 표준 언어가 SPARQL이다. 이 언어는 위 그래프 지식 모델에서 A has C? 라는 질문에 대한 결과를 답하기 위해, 그래프 검색을 수행한다.

만약, IoT 데이터를 온톨로지로 구현한다면 온톨로지를 표현하는 스키마 구조를 만들어야 하고, 다음과 같이 스키마가 반영된 온톨로지 데이터 저장소에 데이터를 얻어 저장해야 한다.
  • Room  has  Property set
  • Property set  has  Property IoT sensor 
  • Property IoT sensor  has  IoT temperature sensor
온톨로지 표현을 위한 그래프 구조는 확장성이 좋고, 데이터 간 상호운용성 지원이 편리하고, 지식을 탐색하기 용이한 방법이다. 

그래프 데이터는 편집기로 작성할 수도 있지만, 전용 편집기를 이용하면 편리하다. 다음과 같은 오픈소스 도구를 이용하면 좀 더 편하게 만들 수 있다.
지식 서비스 시스템 구조와 질의 언어
다음은 이를 이용한 일반적인 지식 서비스 시스템 구조를 보여준다. 대부분의 지식 서비스는 다음과 같은 구조를 가진다.
지식 서비스 시스템 구조

그래프 형식으로 표현된 지식을 검색하기 위해서는 검색 언어가 필요하다. 초창기는 SPARQL을 지원하는 JENA란 오픈소스를 사용했으나 자바를 사용하고 무거워, 최근에는 SPARQL을 좀 더 가볍고 편리하게 사용하는 Node.js기반 도구를 이용하는 경향이 많다.
앞의 지식 서비스 시스템을 구현하기 위해서는 지식 데이터를 CRUD(create, read, update, delete)하고 지식을 검색하는 서버를 제공해야 하는 데, Node.js는 서버를 매우 쉽게 만들 수 있다. 게다가, 수많은 무료 도구를 손쉽게 설치할 수 있다.

이외에 페이스 북에서는 수많은 SNS 데이터에서 지식을 검새하기 위해 그래프 DB를 오픈소스로 공개했다. 
이를 이용해 다음과 같은 SNS 지식 검색을 수행할 수 있다. 
  • Who is John's friend? And does John's friend have family, live in Seattle, and like traveling as a hobby?
  • What is John's annual income and how much will he earn at the next 10 years?
  • How much will Sunny's house price rise in 10 years, and how much will maintenance cost?
물론 검색에 필요한 사실 데이터는 모두 그래프 데이터베이스에 입력되어 있어야 하며, 사실 데이터가 수치일 경우, 머신 러닝 및 통계 패키지를 이용해 계산된 예측값이 그래프 노드 어딘가에 입력되어 있어야 한다. 당연히 예측값 계산은 다양한 통계기법(회귀식, 커브피팅, 딥러닝 등)을 이용해 미리 준비해 놓어야 한다.

오픈소스 소개
시멘틱 데이터를 만들기 위한 온톨로지 도구는 다양하다. 오픈소스에도 많은 Knowledge base 구조를 제공하는 프로젝트가 많다.

도구는 크게 3가지로 나뉘는 데, 지식 그래프 모델링 및 질의 도구, wiki 지식 기반 도구, 텍스트 마이닝(text mining)가 있다. wiki도구는 단순한 키워드 검색 추론을 제공한다. 온톨로지 기반의 시멘틱 검색은 그래프 링크에 해당하는 술어 관계도 포함해 지식 검색이 가능하다. 텍스트 마이닝은 텍스트에서 추출한 사실 데이터의 그래프 모델에서 지식을 질의하는 서비스를 가능하게 한다. 이때 텍스트는 워드, 문서, 도면 등이 될 수 있다. 이런 데이터는 ETL(Extract, Transform and Load) 도구를 이용해 추출할 수 있다.

다음은 이와 관련된 기능을 제공하는 오픈소스 링크이다.
이외 최근 딥러닝(Deep Learning)이 발달하면서, 이를 기반으로 한 텍스트 마이닝 기술이 발전하고 있다. 

여기서는 Linked Data인 온톨로지 그래프에서 SPARQL을 통해 데이터를 질의하는 방법과 CKan 오픈 데이터 플랫폼을 이용해 개방형 데이터 지식 서비스를 제공하는 방법을 간단히 알아보겠다.

Fuseki 기반 간단한 SPARQL 서버 실행
미리 이런 도구를 설치해 놓고 필요할 때 꺼내서 사용하는 도커(docker) 기반 SPARQL 서버도 있다. fuseki는 편리한 SPARQL 서버로 미리 트리플 형식 데이터를 놓고 업로드해 놓으면 손쉽게 SPARQL 질의를 할 수 있고, 이는 인터넷 상에서 서버로 동작시킬 수 있다. 참고로, 도커는 가상머신처럼 동작하는 컨테이너이다. 이를 이용하면 복잡한 환경과 프로그램을 배포하기 쉽게 이미지로 만든 후 재사용할 수 있다.

사용은 간단하다. 도커를 설치한 후, 다음과 같이 도커 명령행 인터페이스에서 명령을 입력한다.
docker run -p 3030:3030 -e ADMIN_PASSWORD=pw123 stain/jena-fuseki

Docker에서 fuseki 이미지 실행 모습

크롬에서 localhost:3030 주소를 입력하고, 아이디와 암호를 admin, pw123으로 입력한다. 그럼, 다음과 같이 query를 사용할 수 있다.
도커에서 실행된 fuseki 기반 SPARQL 서버

참고로, 이 글에서 사용한 fuseki 도커 이미지에 대한 상세한 설명은 아래를 참고하길 바란다.
각 도구는 목적에 맞게 활용해야 이익을 얻을 수 있다. 그러므로, 도구가 목적에 맞는 지 분석하여 기능을 이용한 후 사용해야 한다. 

CKAN 기반 오픈 데이터 지식 서비스 개발
CKAN은 2010년 영국 정부에서 오픈 데이터 지식 서비스 플랫폼으로 사용된 이후, 미국 등 각국 정부에서 오픈 데이터 플랫폼 표준처럼 사용되고 있다. CKAN은 오픈 데이터 수집, 저장, 관리, Open API, RDF, GeoJSON, 지도맵피 등 다양한 기능을 오픈소스 모듈을 통해 지원한다. 무료 라이센스로 사용 및 소스 편집에 제한이 없다. 

사용을 위해, 우분투가 설치되어 있다는 가정하에, 다음 링크를 참고해 CKAN을 설치한다. 참고로, postgresql DB 사용자 지정할 때 암호를 꼭 입력한다(명령어 참고).

서버가 시작되면, localhost로 다음 웹페이지를 확인할 수 있다.

다음과 같이 예제 데이터셋을 클릭하면, 다양한 파일 포맷이나 API를 지원해 오픈 데이터를 사용할 수 있다.



이외에, Virtuoso DB 등을 사용하면, 엑셀, 워드 등 다양한 데이터소스에서 정보를 정규적인 쿼리 식을 이용해 얻을 수 있다.
Virtuoso Server 개념도

레퍼런스

댓글 3개: