본문 바로가기

Machine Learning

[Knowledge Graph] 지식그래프 구축을 위한 사전지식

본내용은 부스트캠프 3기 RE 데이터 구축 프로젝트를 진행하면서 작성한 내용입니다. 관련 프로젝트 내용은 아래 깃허브 링크에서 활용하실 수 있습니다.
https://github.com/boostcampaitech3/level2-data-annotation_nlp-level2-nlp-09

용어에 대한 정의 

지식그래프

(출처: 삼성 SDS 인사이트)

 

지식그래프란 관련 있는 정보들을 엣지와 노드로 표현한 지식구조로 표현한 것이다. 노드는 객체(ex. 인물 지역 등)를 표현하며, 엣지는 객체들 간의 관계(ex.가족 관계, 직업)를 나타낸다. 정보를 일반적인 지식그래프의 형태로 저장하면 연관성 높은 정보들을 쉽게 확인할 수 있기 때문에, 사용자에게 더욱 풍부한 정보를 제공할 수 있다.

 

그래프 DB

그래프 데이터베이스는 행과 열을 가지는 표 형식 데이터를 저장하는 관계형 데이터베이스(RDBMS)와는 달리, 지식그래프에서의 노드 간의 엣지 관계를 네트워크 형태로 저장하는 데이터베이스에 해당한다.

Neo4J

Neo4J는 그래프DB 시장 내의 점유율 1위 주자로, 현재 많은 기업에서 활용하고 있는 데이터베이스 서비스이다. 또한, 오픈소스 데이터베이스로써, 가장 많은 글로벌 레퍼런스를 보유하고 있다.

Cypher

Cypher는 Neo4J를 대상으로 개발된 쿼리어로, 현재는 오픈 사이퍼 프로젝트를 통해 다양한 회사의 그래프 데이터베이스에서 쿼리어로 활용되고 있다.

자세한 내용 알아보기

그래프 데이터베이스와 지식그래프와 관련된 자세한 내용을 하고자 한다면, 아래 링크를 읽어보는 것을 추천한다.

https://d2.naver.com/helloworld/8446520

https://www.samsungsds.com/kr/insights/TechToolkit_2021_Knowledge_Graph.html


Neo4J에 데이터 업로드를 위한 Cypher 쿼리어

RE 데이터를 업로하는데 있어, 필요한 간단한 Cypher 쿼리어들을 보여주고자 한다. 일반적으로 노드 및 엣지 생성에 있어 ‘CREATE’ 명령어를 활용할 수 있지만, 데이터의 중복을 방지하고 데이터의 무결성을 보장하기 위해 ‘MERGE’ 명령어셋을 활용한 쿼리어를 사용할 예정이다. (’CREATE’를 사용하고자 하는 경우, 쿼리 내 ‘MERGE’ 단어 부분만 ‘CREATE’로 변경하여 사용할 수 있음)

 

이름(name) 속성을 가진 노드 생성

Ex. ‘ORG’ 타입의 ‘우크라이나’ 이름 속성을 가진 노드 생성

MERGE ( n: ORG { name : ‘우크라이나’} )​

 

두 엔티티 노드 간의 릴레이션 생성

Ex. ‘ORG’ 타입이고 각 이름 속성이 ‘러시아’와 ‘우크라이나’ 인 두 노드 사이의 ‘org: hostile’ 릴레이션 생성

MATCH (a: ORG), (b: ORG)
WHERE a.name = ‘러시아’ AND b.name=’우크라이나’
MERGE (a) - [r: org_hostile] →(b)

 

파이썬에서 사용하고자 하는 경우

파이썬에선 Neo4J 라이브러리내 GraphDatabase를 활용하여 위와 같은 코드를 실행할 수 있으며, 관련 내용은 깃허브 코드를 참고바람 [깃허브 코드]


Neo4J 내에서 Bloom 시각화 툴 활용해보기

Neo4J 내에서 Cypher 쿼리문을 활용해, 결과값을 리턴해볼 수도 있지만, 간단하게 Bloom 시각화 툴을 활용해 직관적으로 지식그래프의 형태를 구경해볼 수 있다. 그래프DB만 잘 구축되어 있다면 활용해볼 수 있다.