학 습 목 표
- HermiT로 일관성 검사와 자동 분류를 실행하고 결과를 읽는다.
- CQ 10문을 SPARQL로 실행하여 전원 응답을 확인한다.
- 검증 스크립트를 회귀 테스트로 보존하는 체계를 갖춘다.
관문 1 — 추론기: 모순과 분류
5-1의 완료 판정 기준이 요구하는 첫 관문은 충족 불가능 클래스 0이다. 2-6에서 배운 대로, 추론기는 공리들의 논리적 귀결을 끝까지 밀어붙여 어떤 클래스도 모순에 빠지지 않는지(일관성), 그리고 명시하지 않은 포섭 관계가 도출되는지(분류)를 검사한다. 실행과 출력은 다음과 같다.
from owlready2 import *
onto = get_ontology("file://psymap.owl").load()
with onto:
sync_reasoner() # HermiT 호출
print(list(default_world.inconsistent_classes()))
충족 불가능 클래스: 0개 — 통과
작업기억 과제(정의된 클래스)로 분류된 클래스:
['N백 과제', '숫자폭 과제']
실제 실행 출력. 아래 두 줄이 이 파일의 첫 지적 수익이다 — 누구도 "숫자폭 과제는 작업기억 과제다"라고 쓰지 않았지만, 추론기가 정의된 클래스(5-5)의 필요충분조건으로부터 두 과제를 스스로 찾아 분류했다. 2-6의 실험이 실전에서 재현된 것이다.
충족 불가능 0은 "참"의 증명이 아님을 기억해야 한다(2-6). 추론기는 공리들이 서로 모순되지 않음만 보증한다. 내용이 심리학적으로 틀렸어도, 모순 없이 틀렸다면 통과한다. 그래서 두 번째 관문이 필요하다.
관문 2 — 역량 질문: 명세 대비 검증
5-1에서 적어 둔 CQ 10문은 이 온톨로지의 요구 명세였다(3-2). 이제 각 질문을 SPARQL로 번역해 실행한다. 전부를 하나의 스크립트(verify_psymap.py)로 묶어 두면, 앞으로 파일을 고칠 때마다 다시 실행하는 회귀 테스트가 된다. 열 질문의 실제 실행 결과가 다음 표다.
| CQ | 질문(요지) | 실제 출력 | 판정 |
|---|---|---|---|
| 1 | 작업기억의 상위 경로 | 작업기억 → 기억 능력 → 심리적 성향 → Thing | 통과 |
| 2 | 기억 능력의 하위 전체 | 10개 클래스(단기·장기·서술·일화·의미·비서술·절차·작업·음운 작업·언어) | 통과 |
| 3 | 작업기억을 측정하는 과제 | ['N백 과제', '숫자폭 과제'] | 골드스탠더드 일치 — PASS |
| 4 | 숫자폭 과제가 측정하는 것 | ['언어 기억', '음운 작업기억', '작업기억'] | 통과 — CA 기재와 일치 |
| 5 | 일화·의미기억의 정의와 공통 상위 | 정의 2건 + 공통 상위 '서술기억' | 통과 |
| 6 | 일화기억 정의의 근거 문헌 | Tulving (1972) | 통과 |
| 7 | 작업기억의 구성 요소 | ['시공간 잡기장', '음운 루프', '중앙 집행기'] | 통과 |
| 8 | 해마가 관여하는 기억 과정 | ['부호화', '응고화'] | 통과 |
| 9 | '작동기억' 검색이 닿는가 | ['작업기억'] (altLabel 경유) | 통과 |
| 10 | CA 대응물과 ID | 매핑 9건(개념 7, 과제 2) | 통과 — 5-8에서 상술 |
표 1CQ 10문 테스트의 실제 결과. 판정: 전원 통과. CQ3은 5-2에서 미리 적어 둔 골드스탠더드 {숫자폭, N백}과 출력이 정확히 일치했다 — 답을 미리 적어 두었기에 '통과'라는 말에 의미가 있다(3-2).
대표로 CQ7의 SPARQL을 본다. 5-4에서 설계한 관계가 질의의 어휘가 되는 것을 확인할 수 있다.
# CQ7: 작업기억의 구성 요소는? — 존재 제약을 더듬는 질의 SELECT ?c WHERE { ?c rdfs:subClassOf ?r . ?r owl:onProperty :component_of ; owl:someValuesFrom :PSY_0000018 . } ['시공간 잡기장', '음운 루프', '중앙 집행기']
CQ7의 질의와 실제 출력. "음운 루프 ⊑ ∃component_of.작업기억"이라는 공리(5-5)의 구조를 그대로 더듬는다 — 설계·구현·검증이 같은 어휘로 이어진다.
테스트는 버리지 않는다
verify_psymap.py는 이 차시로 수명이 끝나지 않는다. 3-2에서 본 CQ 생애주기의 요점은 검증 스크립트가 회귀 테스트로 남는다는 것이다. 5-8에서 정렬 주석을 더할 때도, 다음 반복에서 감각기억을 추가할 때도, 트랙 6에서 에이전트가 이 파일을 쓸 때도 — 고치고 나서 이 스크립트를 다시 돌리면 "전원 통과"가 유지되는지 수 초 만에 안다. 소프트웨어 공학의 테스트 스위트가 온톨로지 공학에도 그대로 있는 셈이다.
판별 연습
문 1추론기 통과와 CQ 통과 중 하나만 통과하는 두 실패 상황을 각각 구성해 보라.
답 확인
추론기만 통과: 공리가 거의 없는 깡통 파일 — 모순이 없으니 일관적이지만 어떤 CQ에도 답하지 못한다(공리 예산을 0으로 잡은 극단). CQ만 통과: 분리 공리와 상충하는 다중 분류가 숨어 있는데 질의가 그 지점을 묻지 않는 경우 — 질의는 답하지만 추론기는 충족 불가능을 보고한다. 2-6의 실험에서 숫자폭 과제를 두 서로소 범주에 걸었을 때가 정확히 이 꼴이었다.
문 2CQ4의 출력에 '단기기억'이 없다. 숫자폭 과제(특히 순방향)가 단기 유지를 잰다는 견해를 아는 사용자가 이를 공백이라 지적한다면.
답 확인
정당한 지적이고, 5-3의 결정으로 소급되는 문제다 — 단기기억과 작업기억의 관계에 공리를 보류했으므로 측정 주장도 작업기억 쪽으로만 적었다. 대응은 둘: measures 공리를 하나 더 추가하거나(숫자폭 → 단기기억), 보류 결정과 함께 note에 쟁점을 기록하고 다음 반복의 의제로 올리거나. 어느 쪽이든 결정 로그에 남긴다 — 검증이 설계 결정을 다시 심문하는 것, 그것이 해석학적 순환(3-6)이다.
적용: 산출물과 내려받기
완료 판정 기준의 두 관문 — 충족 불가능 0, CQ 10문 전원 응답 — 을 통과했다. 검증 스크립트 전문은 verify_psymap.py에서, 검증된 파일은 psymap.owl에서 열어 볼 수 있다 — 복사해 각 이름으로 저장하면 그대로 쓰인다. 남은 것은 바깥 세계와의 연결(5-8 정렬)과 돌아보기(5-9 회고)다.
용어 정리
| 용어 | 원어 | 뜻 |
|---|---|---|
| 일관성 검사 | consistency check | 공리 집합에 모순이 없는지의 추론기 검사 |
| 자동 분류 | classification | 추론기가 명시되지 않은 포섭 관계를 도출하는 것 |
| 테스트 스위트 | test suite | 한 번에 실행되는 검사 묶음. CQ 10문이 그것이다 |
Glimm, B. et al. (2014). HermiT: An OWL 2 Reasoner. Journal of Automated Reasoning, 53(3). · Grüninger, M. & Fox, M. S. (1995). Methodology for the Design and Evaluation of Ontologies. IJCAI Workshop. · 실습 파일: verify_psymap.py, psymap.owl(본 사이트 수록 — 출력은 모두 실제 실행 결과).