라봉이의 개발 블로그

지식 그래프(Knowledge Graph) 만들기-3 n-triple(nt)이란?, cayley 그래프란?? 본문

개인 프로젝트/지식 그래프(Knowledge Graph) 만들기

지식 그래프(Knowledge Graph) 만들기-3 n-triple(nt)이란?, cayley 그래프란??

Labhong 2018. 12. 10. 18:09
반응형

들어가기 전에

이 포스트는 학교 프로젝트로 지식 그래프를 구축해보고 그에 대한 서비스 구현까지 완료해보기 위해 그에 대한 자료를 정리하는 글입니다. 이에 관해 공부해보는 사람들에게 도움이 되었으면 해서 글을 공유하고자 합니다.

저번 포스트에서는 시맨틱 웹과 RDF가 무엇인지 알아보았다면 이번 포스트에선 RDF 그래프를 텍스트 형식으로 표현한 N-triple과 nt 파일, 그리고 cayley 오픈소스에 대해 알아보도록 하겠습니다.

N-triple이란?

출처: https://www.w3.org/TR/n-triples/

N-triple이란 간단히 말하여 RDF 그래프를 한 줄씩 텍스트 형식으로 나타낸 것을 의미합니다. 파일 확장자로서 nt를 사용합니다.

이전의 포스트에선 RDF 트리플이 무엇인지에 대해 배웠습니다. 이 RDF 트리플을 텍스트 파일 한 줄로 나타낸 것을 N-triple 형식이라고 하고 확장자 nt로서 저장합니다.

눈으로 확인하는게 제일이니 예시를 들어보겠습니다.

<http://psyhm.tistory.com/resource/laptop> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class> . 

먼저 보면 공백을 기준으로 4개로 나눌 수 있습니다. <http://psyhm.tistory.com/resource/laptop>, <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>, <http://www.w3.org/2000/01/rdf-schema#Class> 그리고 '.' 입니다. 편하게 앞에서부터 A, B, C라고 하겠습니다.

먼저 맨 앞의 데이터 A는 RDF 트리플의 주어(Subject)입니다. 그 뒤로 순서대로 B는 서술어(Predicate)와 C는 목적어(Object)입니다. '.'(점)은 이 줄의 끝 즉, RDF 트리플의 끝을 나타냅니다.

그리고 '<'와 '>'로 이루어진 데이터를 IRI(Internationalized Resource Identifier)라고 부르고 이는 RDF 그래프에 존재하는 단 하나의 node를 의미합니다.

다음 트리플을 해석하자면 A는 B 속성으로 C라는 의미입니다. 다시 말해서 A와 C는 B의 관계를 가지고 있다는 의미입니다.

다른 예시를 보겠습니다.

<http://psyhm.tistory.com/resource/laptop> <http://psyhm.tistory.com/predicate/name> "노트북"^^<string> . 

다음 N-triple은 위와 조금 다릅니다. 주어(Subject)는 같지만 서술어(Predicate)와 목적어(Object)는 다릅니다. 그리고 Object는 단순 문자열로 이루어져 있습니다. 이렇게 단순 string이나 number, date가 올 수 있는데 이를 Literal이라고 부릅니다.

두 예시를 그림으로 나타내면 다음과 같습니다.

RDF 그래프는 사실 어휘 구조가 잡혀있지 않습니다. 단순히 주어와 목적어의 관계를 나타낼 뿐 그 이상의 의미를 가지기 어렵습니다. 따라서 사용자는 그래프에서 의미있는 혹은 연관있는 데이터를 추출하기 어렵습니다. 이를 해결할 방안으로 '스키마' 혹은 '온톨로지' 라고 불리는 어휘 구조를 만들어냈습니다.

링크: https://www.w3.org/TR/rdf-schema/

이처럼 RDF의 N-triple을 이용하면 그래프로서 구현할 수 있게 되고 그래프 데이터베이스에서 사용할 수 있습니다.

필자는 그래프 오픈소스로서 cayley를 이용하여 RDF 그래프를 생성하였습니다.

cayley 그래프

링크: https://cayley.io/

도큐먼트: https://github.com/cayleygraph/cayley/tree/master/docs

Cayley 홈페이지에서 cayley를 다음과 같이 소개하고 있습니다.

cayley는 Freebase 기반의 그래프 데이터베이스와 구글의 지식 그래프에 영감을 얻은 오픈 소스 그래프이다.

Cayley를 이용하면 N-triple 같은 RDF 파일을 load 하여 자동으로 그래프를 구현해주고 다양한 Query를 이용하여 그래프에서 데이터를 추출할 수 있습니다. 사실 그래프 데이터베이스의 SQL 격인 Sparql은 Cayley에서 지원해주지 않아서 프로젝트에서 쿼리 작성하는게 조금 어려웠지만 Cayley에서 지원해주는 다른 Query로 질의어를 작성하였습니다.

cayley를 사용하기 위해서 먼저 cayley를 다운 받아야합니다. 링크: https://github.com/cayleygraph/cayley/releases

저는 맥 유저이기 때문에 cayley darwin이라는 zip 파일을 다운받아 설치하였습니다.

도큐먼트를 보면 간단히 Cayley를 이용하는 법에 대해 설명하고 있습니다. 링크: https://github.com/cayleygraph/cayley/blob/master/docs/Quickstart-As-Application.md

./cayley http -i ./data/30kmoviedata.nq.gz -d memstore --host=:64210 

위의 명령어는 cayley 그래프를 http 서버를 이용하여 visualize하거나 질의를 보낼 수 있도록 실행하는 것입니다.

-i 옵션은 nq파일(N-Quad)을 그래프에 input 하라는 명령입니다.

-d 옵션은 database로서 memstore를 사용한다는 의미입니다. cayley 자체가 그래프 데이터베이스가 아니라 그래프를 구현할 수 있도록 제공하는 애플리케이션이기 때문에 database를 설정해야합니다. 추후에 NoSql이나 Key-value, 그리고 RDBMS에서 그래프를 저장할 수도 있지만 현재는 간단하게 메모리에 저장하도록 설정한 것입니다.

—host 옵션은 호스트:포트를 설정하여 서버를 설정하는 것입니다. :64210의 의미는 웹브라우저에 http://localhost:64210을 입력하면 cayley 그래프에 접근할 수 있다는 의미입니다.

다른 그래프 데이터베이스를 사용하기 위해선 configuration 파일을 작성한 뒤에 init 명령어로 그래프를 초기화해주어야 합니다. 링크: https://github.com/cayleygraph/cayley/blob/master/docs/Configuration.md

저는 cayley.json을 cayley 디렉토리에 저장하여 configuration 파일을 작성하였습니다.

{     "store": {         "backend": "mongo",         "address": "localhost:27017",         "options": {             "database_name":"cayley"         }     },     "query": {         "timeout": "30s"     } } 

저는 mongodb를 그래프를 저장할 데이터베이스로 설정하였습니다. 그 뒤에 init 명령어로 초기화하였습니다.

./cayley init --db=mongo --dbpath="localhost:27017" 

그 뒤에 nt 파일을 load 하여 그래프를 구축하였습니다.

./cayley load -i <nt 혹은 nq 파일의 path> 
반응형
Comments