KnowledgeGraph

두통 온톨로지 구축과 RDFox Datalog를 이용한 추론

joyHong 2024. 10. 10. 23:16

특정 도메인에서 어떤 문제를 해결하거나 처리를 해야하는 경우에

대부분 매뉴얼이나 업무담당자의 생각/노하우에 담겨져 있고 이를 기반으로 처리가 되어진다. 

또한 이러한 처리 방법이나 정보를 프로그램을 통해 절차적으로 구성하여 자동화된 처리를 하고 있다고 볼 수 있다.

최근에는 LLM을 활용하여 매뉴얼 자체를 소스로 삼아 사용자가 궁금해 하는 내용을 찾고 이를 활용해 해답을 내놓는 방식으로 적용을 하기도 한다.

이 글에서는 기존에 많이 이야기되었던 온톨로지 추론과 LLM을 혼용하여 어떠한 문제 혹은 목적을 달성하기 위한 방안에 대해 설명하고자 한다.

그 목적하는 바는  "두통 환자에 대한 원격 진료/진단을 가정하여, 사용자의 대화나 상담으로부터 정보를 취득하고, 취득한 정보를 바탕으로 어떤 질환인지를 판단하는 것"이다.

1. 기본적인 정보는 온톨로지로 구성한 데이터를 활용하고,

2. 사용자의 대화나 상담으로부터 정보를 취득하는 것은 LLM을 통해 수행하고, 취득한 정보는 RDF를 구성하여 저장소에 로드하며

3. 저장소에 로드된 RDF는 미리 정의된 추론 규칙에 의해 새로운 사실을 생성해 내어 

최종적으로 환자가 어떤 질환인지를 판단하도록 하는 것이다.

 

이글에서는 위에서 언급한 2번 과정인 사용자와의 인터페이스, 그리고 그 과정에서 취득한 정보를 처리하는 것은 다루지 않으며

두통에 대한 온톨로지를 구축하고, 사용자로부터 취득하고 처리한 정보를 입력받아 추론을 통해 새로운 정보를 구성하는 것에 대해 다룬다.


상기에서 밝힌 바와 같이 두통 환자에 대한 진료를 목표로 한다.

두통 환자에 대한 진단을 위하여 두통에 대한 정보가 필요하며, 이 정보를 온톨로지로 구성하여 데이터로서 활용하고자 한다.

두통에 대한 정보는 국제두통질환분류 제3판 한글판 2018 버전으로부터 추출하여 활용한다.

 

온톨로지는 특정 영역이나 세계를 개념과 개념간의 관계로 표현한 것으로, 여기서는 두통 질환에 대한 개념과 그 개념들 간의 관계를 표현하도록 하였다. 온톨로지는 개념, 관계, 속성, 공리, 인스턴스, 제약조건 등으로 구성되는데, 국제두통질환분류에서 명시한 내용을 바탕으로 몇가지 개념과 관계, 속성, 제약조건을 발췌하였고, 맛보기로 몇몇개의 질환에 대한 실제 인스턴스를 구축하였다.

 

먼저 개념에 대한 내용은 질환분류 문서에 나온 내용을 토대로 두통 환자에 대한 진료를 위해 필요한 주요한 개념을 도출하도록 한다.

질환을 진단하기 위해서는 기준이 있어야 하고, 그 기준에 부합하는 증상이 있다. 기준에 부합하는 질환은 어떤 두통인지를 나타내며, 두통에는 분류에 따른 여러가지 종류가 있다. 이를 개념화하여 아래의 내용과 같이 두통에 대한 분류체계, 질환, 진단기준, 증상 으로 구분하여 구성하였다.

 

두통에 대한 분류체계는 문서에서 이미 계층형으로 잘 구성이 되어 있어 이를 적극 활용하였으며, 광의/협의 관계를 잘 표현할 수 있는 SKOS를 통해 아래와 같이 구성하였다.

두통 분류체계

 

제일 상위로서 '두통'이라는 concept이 존재하고 하위로 편두통, 그리고 그 하위로 조짐편두통, 만성편두통, 무조짐편두통 등이 존재한다.

여기서는 모두 skos:narrower 관계를 통해 두통에 대한 분류체계를 구성하였고, 환자로부터 획득하는 증상 정보를 통해 진단 기준에 부합하는지에 따라 어떤 질환인지를 구별하고 그 질환은 어떤 두통 분류체계에 포함되는지를 판단하는 것에 사용된다.

 

다음은 각각의 두통 질환별로 해당 질환에 대한 설명, 그 질환으로 판정되는 진단기준, 그리고 각 진단기준에서 나타나는 증상에 대해 설명하고 있는 정보를 통해 각각의 개념을 도출하고, 각 개념에 따라 실제 인스턴스를 구성하였다. 모델에는 domain, range와 간단한 제약조건만 사용하여 구성하였고, 관계와 속성을 심플하게 구성하였다.

Ontotext GraphDB를 통해 표현한 온톨로지 모델 도식

 

모델 구성이 마치면 구성한 모델에 따라 실제 데이터를 RDF 트리플로 생성하여 인스턴스를 구축한다. 초기에 구축하는 인스턴스는 두통분류체계, 질환, 판단기준, 증상 개념에 대한 인스턴스만 구축하였다. 나머지 환자, 환자상태, 진단결과에 대한 인스턴스는 시스템을 통해 환자의 액션에 따라 LLM을 통해 자동으로 생성된다고 가정한다. 

초기에 구축한 인스턴스는 아래의 일부 예시와 같다.

RDFox를 사용해 표현한 실제 인스턴스들 정보

 

주황색의 fact data는 초기에 구축하는 인스턴스가 되고, 파란색의 fact data 는 환자로부터 획득한 증상 정보를 통해 LLM이 만들어내는 인스턴스가 된다. 그리고 inferred data는 추론엔진이 생성되어 있는 fact data와 실시간으로 입력되는 fact data를 통해 추론이 되어지는 데이터가 된다.

 

 

 

생성되는 시점에 따른 인스턴스 구분은 아래와 같이 초기 구축, 환자가 진료서비스를 시작할 때 구축, 환자가 설문내용이나 대화를 통해 획득한 정보로 구축, 마지막으로 추론을 통해 구축되는 것으로 구분된다.

 

RDF 트리플 저장소로는 RDFox를 사용하였으며, 추론을 하기 위해 Datalog라는 언어를 사용하여 구성하였다.

https://www.oxfordsemantic.tech/rdfox

https://docs.oxfordsemantic.tech/index.html

 

Table of Contents — RDFox documentation

© Copyright 2024, Oxford Semantic Technologies Ltd.

docs.oxfordsemantic.tech

Datalog는 1차 술어 논리 문장을 나타내는 여러 개의 개별적인 규칙으로 구성된다. 이 규칙은 "A이면 B이다" 라는 문장과 같이 표현된다.

간단하게 datalog 언어로 표현하면 아래와 같다.

B :-  A 

":-" 를 통해 좌우항을 구분한다고 

 

이 글에서 사용한 추론 규칙을 일부 예시는 다음과 같다.

1. 환자의 통증지속시간이 4시간에서 72시간 사이에 포함되면 환자는 지속시간_4-72시간 이라는 증상을 가진다는 규칙

2. 진단기준 DC_1_1_C가 포함하는 증상과 환자가 가지고 있는 증상이 2개 이상 일치하면 환자 상태는 DC_1_1_C 진단기준과 매칭된다는 규칙

prefix dc: <http://purl.org/dc/elements/1.1/>
prefix ont: <http://joyhong.tistory.com/ontology/>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix zig: <http://joyhong.tistory.com/zigzag/>
PREFIX g: <http://joyhong.tistory.com/graph/>

ont:hasSymptoms[?patient, zig:지속지간_4-72시간] g:user :-
    ont:Patient[?patient] g:user,
    ont:duration[?patient, ?duration] g:user,
    FILTER (?duration >= 4 && ?duration<=72) .
    
ont:matched[?pc, zig:DC_1_1_C] g:inferred :-
    AGGREGATE (
        ont:Patient[?patient] g:user,
        ont:hasStatus[?patient, ?pc] g:user,
        ont:hasSymptoms[?patient, ?symptoms] g:user,
        ont:contain[zig:DC_1_1_C, ?symptoms]
        ON ?patient ?pc
        BIND COUNT(?symptoms) AS ?numberOfSymptoms
    ),
    FILTER (?numberOfSymptoms >= 2) .

 

추론 규칙을 통해 실시간으로 입력되는 정보에 따라 증분추론이 일어나게 되고, 환자가 어떤 두통에 해당하는지를 판단할 수 있게 된다.


이글에서는 사람이 두통 환자를 진단하는 과정과 유사하게 시스템이  진단할 수 있도록 두통질환분류 지식을 표현하고 추론을 하도록 하는 방법을 간략하게 설명하였다. 온톨로지는 사람과 기계가 모두 이해할 수 있는 형태로 정보를 구조화하고 표현하는 지식표현의 방법 중에 하나이다. 추론은 논리적인 연산을 통해 주어진 정보로부터 새로운 정보를 도출하는데 사용되며, 사람의 사고 방식과 유사하게 논리를 풀어낼 수 있는 좋은 도구이다.