1부 이해 · 트랙 2 지식 구조의 기본기

제 1 차 시

트리플 — 주어·관계·목적어 구조

기계가 읽는 지식의 최소 단위를 배우고, 트리플이 모여 그래프가 되는 과정을 따라간다.
읽기 약 11분 · 연습 1회

주어 — 관계 — 목적어

트리플

기계가 읽는 지식의 최소 단위. 세 자리로 된 문장 하나다.

아무리 큰 지식그래프도 트리플의 집합이다.
트리플로 쪼갤 수 있으면 기계가 읽을 수 있다.

학 습 목 표

  1. 자연어 문장을 트리플로 변환한다.
  2. 트리플의 집합이 그래프가 되는 원리를 설명한다.
  3. 터틀 표기와 SPARQL 질의의 기본 꼴을 읽는다.

문장을 쪼개면

1부에서 온톨로지는 개념화를 기계가 읽을 수 있게 적은 명세라고 정리하였다. 트랙 2는 그 '적는 법'을 다룬다. 출발점은 트리플(triple)이다. 트리플은 주어, 관계, 목적어의 세 자리로 된 진술이다.

심리학 문장 하나를 쪼개 본다. "숫자폭 과제는 작업기억을 측정한다." 주어는 숫자폭 과제, 관계는 measures, 목적어는 작업기억이다. 괄호로 적으면 (숫자폭과제, measures, 작업기억)이다. 문장에 들어 있던 지식이 세 자리에 남김없이 담겼다.

복잡한 문장은 트리플 여러 개로 쪼갠다. "해마가 손상된 환자는 새로운 일화기억을 만들지 못한다"는 한 트리플에 담기지 않는다. 적어도 (해마, part_of, 뇌), (일화기억 형성, depends_on, 해마) 같은 트리플들로 분해해야 한다. 쪼개는 과정이 곧 분석이다. 무엇이 개체이고 무엇이 관계인지를 결정해야 하기 때문이다.

자연어 문장트리플
작업기억은 기억의 한 종류다(작업기억, is_a, 기억)
해마는 뇌의 일부다(해마, part_of, 뇌)
N백 과제는 작업기억을 측정한다(N백과제, measures, 작업기억)
작업기억의 영어 이름은 working memory다(작업기억, label, "working memory"@en)

표 1문장과 트리플의 대응. 마지막 행의 목적어는 다른 개체가 아니라 값 그 자체 — 리터럴(literal) — 이다.

트리플이 모이면 그래프가 된다

트리플 하나는 점 둘과 화살표 하나다. 트리플이 여러 개 모이면, 같은 개체를 가리키는 자리들이 자동으로 이어진다. (작업기억, is_a, 기억)의 '작업기억'과 (숫자폭과제, measures, 작업기억)의 '작업기억'은 같은 마디(node)다. 그 결과가 그래프, 곧 지식그래프다. 표가 아니라 그물이 되는 이유가 이것이다. 누구도 그물을 따로 설계하지 않았다. 트리플을 쌓으면 그물이 자란다.

기억 작업기억 장기기억 일화기억 숫자폭과제 N백과제 is_a is_a is_a measures measures 트리플 5개가 '작업기억'과 '기억' 마디를 공유하며 하나의 그래프로 이어진다.
그림 1트리플에서 그래프로. 이 그림의 자료가 아래 터틀 코드와 SPARQL 질의에 그대로 쓰인다.

표준 표기 — RDF와 터틀

트리플을 적는 W3C 표준 데이터 모델이 RDF(Resource Description Framework)다. RDF를 사람이 읽기 쉽게 적는 표기법이 터틀(Turtle)이다. 위 그림을 터틀로 적으면 다음과 같다.

# 접두어 선언: 긴 IRI를 줄여 쓴다
@prefix : <http://example.org/mem#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

:작업기억   rdfs:subClassOf :기억 .
:장기기억   rdfs:subClassOf :기억 .
:일화기억   rdfs:subClassOf :장기기억 .
:숫자폭과제 :measures      :작업기억 .
:N백과제    :measures      :작업기억 .

코드 1터틀 표기. 한 줄이 트리플 하나이고, 마침표가 문장의 끝이다. is_a는 RDF 어휘에서 rdfs:subClassOf로 적는다.

목적어 자리에는 두 종류가 올 수 있다. 다른 개체를 가리키는 자원(resource), 또는 값 그 자체인 리터럴이다. "작업기억"@ko 같은 문자열, 7±2 같은 숫자가 리터럴이다. 리터럴은 화살표가 나가지 못하는 끝점이다.

질의 맛보기 — 질문도 트리플 모양이다

트리플로 적은 지식에는 트리플 모양으로 질문한다. SPARQL 질의는 변수(물음표로 시작)를 섞은 그래프 패턴(graph pattern)이고, 답은 그 패턴에 들어맞는 값들이다.

SELECT ?과제 WHERE { ?과제 :measures :작업기억 . }

# 실행 결과
작업기억을 측정하는 과제: 숫자폭과제
작업기억을 측정하는 과제: N백과제

코드 2SPARQL 질의와 실제 실행 결과(파이썬 rdflib). "어느 자리든 변수로 바꿀 수 있다"는 것이 핵심이다. 과제를 고정하고 개념을 물을 수도, 관계 자체를 물을 수도 있다.

트리플에 담기지 않는 것

세 자리 구조에는 한계도 있다. "스트룹 과제는 선택적 주의를 2분 동안 측정한다"처럼 네 번째 정보(시간)가 붙는 진술, "이 관계의 근거는 아무개의 2010년 논문이다"처럼 트리플 자체에 대한 진술은 세 자리에 바로 담기지 않는다. 해결책 — 진술을 개체로 승격하는 구체화(reification)와 주석 — 은 구축 실습에서 출처(evidence)를 달 때 다룬다. 지금은 한계의 존재만 기억하면 된다.

— — —

변환 연습

다음 문장을 트리플(들)로 변환하라.

문 1"스트룹 과제는 선택적 주의를 측정한다."

답 확인

(스트룹과제, measures, 선택적주의). 한 트리플로 충분하다.

문 2"일화기억과 의미기억은 서술기억의 종류다."

답 확인

두 트리플로 쪼갠다. (일화기억, is_a, 서술기억), (의미기억, is_a, 서술기억). 주어가 둘이면 트리플도 둘이다.

문 3"작업기억의 저장 용량은 보통 3~5개 덩이로 추정된다."

답 확인

함정 문제다. '저장 용량'을 개체로 세울지, 리터럴 값을 달지, 추정의 출처는 어디에 달지를 먼저 결정해야 한다. 한 가지 답: (작업기억, has_capacity, "3~5 덩이"). 더 정밀한 모형화는 관계 설계(3차시)와 출처 기재(트랙 5)에서 다룬다.

— — —

적용: 실습 프로젝트의 원자 단위

실습에서 만들 심리학 온톨로지의 모든 지식은 결국 트리플로 적힌다. 개념의 계층도, 과제와 개념의 연결도, 한국어·영어 라벨도, 정의의 출처도 전부 트리플이다. 따라서 용어 수집 단계(트랙 5의 2차시)에서 문헌의 문장을 읽는 일은 곧 트리플 후보를 캐는 일이 된다. 이 차시의 변환 연습이 그 작업의 예행이다.

용어 정리

용어원어뜻
트리플triple주어·관계·목적어 세 자리로 된 지식의 최소 단위
자원 / 리터럴resource / literalIRI가 붙은 개체 / 값 그 자체(문자열, 숫자)
터틀TurtleRDF 트리플의 표준 텍스트 표기법
그래프 패턴graph pattern변수를 섞은 트리플 모양. SPARQL 질의의 본체
구체화reification진술 자체를 개체로 승격해 그 진술에 대해 말할 수 있게 하는 기법
이 차시가 기대고 있는 자료
W3C (2014). RDF 1.1 Concepts and Abstract Syntax; RDF 1.1 Turtle. · W3C (2013). SPARQL 1.1 Query Language. · 코드 실행: Python rdflib.
트랙 2 · 차시 1트리플