LLM
언어적 맥락과 표현 변이를 폭넓게 이해한다.
텍스트에서 단어를 알아보는 일은 문패를 읽는 데 가깝다. 그러나 그 문패가 어느 집을 가리키는지 확인하려면 골목의 구조와 이웃의 관계까지 보아야 한다. 제7장은 개체명 인식에서 개체 중의성 해소로, 다시 의료 온톨로지와 지식그래프를 이용한 검색·해석·발견으로 나아가는 길을 그린다.
NER는 텍스트 속에서 개체로 보이는 표현을 찾는다. NED는 그 표현이 지식베이스의 어느 개체를 가리키는지 결정한다. 의료처럼 잘못된 연결의 비용이 큰 분야에서는 이 한 단계의 차이가 곧 시스템의 신뢰도다.
‘Zika’라는 말이 세 번 등장하는 짧은 문장이 있다. 첫 번째는 바이러스 자체를, 두 번째는 선천성 지카 증후군을, 세 번째는 지카 바이러스 감염을 가리킨다. 표면은 같은 글자지만 의미의 주소는 서로 다르다. 문맥을 읽지 않고 문자열만 묶으면 지식그래프는 연결될수록 더 정확해지는 것이 아니라, 오류를 더 멀리 퍼뜨리는 지도에 가까워진다.
반대의 문제도 있다. ‘breakbone fever’, ‘dandy fever’, ‘dengue fever’는 서로 다른 표현이지만 같은 질병 개념으로 모일 수 있다. ‘islets of Langerhans’와 ‘pancreatic islets’도 마찬가지다. NED는 하나의 표면형을 여러 의미로 가르는 일과, 여러 표면형을 하나의 의미로 모으는 일을 동시에 수행한다.
어디에 개체 표현이 있는지 찾고, 질병·증상·해부 구조 같은 범주를 붙인다.
발견된 언급을 UMLS와 같은 참조 지식베이스의 정확한 개체 ID에 연결한다.
연결된 개체를 SNOMED·HPO의 계층과 관계에 얹어 검색·추론·설명의 재료로 만든다.
이 장의 전통적 NED 파이프라인은 세 단계로 정리된다. 후보 선택은 가능한 주소를 모으고, 후보 순위화는 주변 문맥으로 가장 그럴듯한 주소를 고르며, 온톨로지 통합은 그 주소가 속한 지식의 이웃과 계층을 불러온다.
NER가 찾은 언급을 참조 지식베이스와 대조해 가능한 개체 집합을 만든다. ‘Zika virus’에는 바이러스, 감염, 항체 측정과 같은 서로 다른 후보가 따라붙을 수 있다.
언급 하나당 복수의 UMLS 후보 ID와 정규화 명칭
# 생의학 NER + UMLS linker 구성의 핵심 nlp = spacy.load("en_core_sci_md") nlp.add_pipe("scispacy_linker", config={"resolve_abbreviations": True, "linker_name": "umls"}) # 각 언급의 UMLS 후보 목록을 조회 for mention in doc.ents: candidates = mention._.kb_ents
후보마다 주변 단어와 표현형을 바탕으로 점수를 매긴다. ‘congenital’과 ‘syndrome’이 가까이 있으면 선천성 지카 증후군의 순위가 높아지는 식이다.
같은 ‘Zika’라도 transmission, congenital, infection 같은 주변 단서가 다른 정답을 만든다.
| 언급 | 1순위 후보 | 대안 후보 |
|---|---|---|
| Zika virus | C0318793 · Zika Virus | C0276289 · Zika Virus Infection |
| congenital Zika syndrome | C4546023 · Congenital Zika Syndrome | 단일 명확 후보 |
| Zika virus infection | C0276289 · Zika Virus Infection | C0318793 · Zika Virus |
선택된 UMLS 개체를 SNOMED·HPO의 개체와 연결한다. UMLS는 여러 임상 용어체계 사이의 환승역처럼 기능하고, 각 온톨로지는 계층·별칭·임상 관계를 제공한다.
UMLS C0276289는 SNOMEDCT_US 3928002의 ‘Zika virus disease’와 NCI·MeSH의 동의 표현으로 이어진다.
scispaCy는 언급 인식·후보 생성·순위화를 수행한다. 지식그래프는 그 결과를 문서 위치와 함께 보존하고, UMLS–SNOMED–HPO 연결을 통해 의미 계층과 관계 경로를 분석 가능하게 만든다.
범용 LLM은 의료 표현을 자연스럽게 나열할 수 있지만, 특정 UMLS 버전의 식별자와 정밀하게 연결하는 일은 별도의 도메인 지식과 검증 가능한 자원이 필요하다.
모델은 Zika virus, mosquito-borne transmission, congenital Zika syndrome, neurological complications, microcephaly, fetal malformations 등을 제시했다. 그러나 첫 번째 Zika가 바이러스이고 마지막 Zika가 감염이라는 구분은 완전하지 않았다.
실험 당시 모델은 직접 ID를 부여할 수 없다고 답했다. 핵심 문제는 자연어 생성 능력이 아니라, 특정 참조 지식베이스를 정확히 조회하고 결과를 검증하는 연결이 없다는 데 있다.
언어적 맥락과 표현 변이를 폭넓게 이해한다.
언급을 참조 ID 후보에 연결하고 순위를 계산한다.
검증 가능한 개체·계층·임상 관계를 제공한다.
원문·언급·정규 개체·온톨로지 근거를 한 구조에서 보존한다.
사례의 중심에는 SoHO 정책 담당자가 있다. 혈액·조직·세포·장기의 기증부터 환자 적용까지, 방대한 규정·감시 보고서·기술 지침을 빠르게 읽고 위험을 판단해야 하는 사람이다.
SoHO는 사람 유래 물질을 뜻한다. 혈액 수혈은 생명을 구하고, 신장 이식은 삶의 질을 높이며, 생식세포와 체외수정은 생명의 시작을 돕는다. 그러나 이 선한 기술의 길은 기증자 평가, 채취, 보존, 검사, 운송, 추적성, 이상반응 감시라는 촘촘한 절차 위에 놓인다. 어느 한 단계의 정보가 늦거나 흩어지면 안전의 사슬이 약해진다.
코로나19 같은 공중보건 위기는 기증 가능성을 줄이고 새로운 위험을 드러낸다. 수집·검사·처리 기술도 계속 변한다. 그래서 법적 틀은 미래 대응성, 위기 저항성, 민첩성을 함께 갖춰야 한다. 이 장의 KG는 규정을 장식하는 기술이 아니라, 정책 담당자가 최신 위험과 근거를 찾도록 돕는 의사결정 기반이다.
건강 감시, 감염병 위협 대응, 새로운 유행 경향, SoHO 안전과 연관된 비교적 짧은 보고서를 제공한다.
감염병 전파 위험을 넘어 수집·처리·저장·유통의 품질과 안전을 다루는 상세 지침과 기술 표준을 제공한다.
랑게르한스섬 이식의 특정 지침과 위험, 이 세포를 손상시키는 질병, 관련 문서의 정확한 문맥을 찾는다.
특정 지역의 지카 바이러스 확산과 연관 질환, 기증·수입 제한 판단에 필요한 감시 정보를 종합한다.
SoHO 지식그래프는 성격이 다른 두 세계를 잇는다. 정책·지침·위협 보고서는 자연어의 맥락을 품고 있고, UMLS·SNOMED·HPO는 식별자·계층·관계로 정돈된 의료 지식을 품고 있다.
EU BTC 분야의 정치·법률 맥락, 공급 중단, 신종 질병, 기술 발전, 정책 대안을 다룬다.
이해관계자의 우려, 국제 표준 조화, 검증되지 않은 세포 치료 주장과 같은 쟁점을 담는다.
EU 지침과 조화를 이루는 최소 기준, 최신 과학 지식, 전문가 의견, 국제 프로젝트 결과를 제공한다.
유럽에 영향을 줄 수 있는 감염병의 역학 변화와 전 세계 위협 상황을 주기적으로 집약한다.
UMLS는 여러 생의학 어휘를 묶는 메타시소러스다. 이 장의 예제는 2022AA 버전을 사용하며, scispaCy 결과의 UMLS CUI를 다른 온톨로지 코드와 연결하는 입구로 삼는다.
| 파일 | 역할 |
|---|---|
| MRCONSO.RRF | 다양한 어휘체계의 개체명, 코드, 동의어와 UMLS ID를 연결한다. |
| MRSTY.RRF | 각 UMLS 개체의 semantic type 코드와 명칭을 제공한다. |
SNOMED는 45만 개가 넘는 개념을 포함하는 다국어 임상 용어체계다. 단순 계층뿐 아니라 CAUSATIVE AGENT, FINDING SITE, PATHOLOGICAL PROCESS 같은 임상 관계를 제공한다.
| 소스 | 내용 |
|---|---|
| Description file | 개체와 관계의 이름·별칭을 제공한다. |
| Relationship file | 수치 코드로 표현된 source–type–destination 관계를 제공한다. |
| IS_A hierarchy | 루트의 원형 범주를 하위 개체에 전파할 수 있게 한다. |
HPO는 표현형 이상을 계층적으로 기술하고, 질병과 관찰 가능한 표현형의 연결을 제공한다. SNOMED가 임상 개념의 폭을 담당한다면 HPO는 질병–표현형 분석의 깊이를 보탠다.
| 파일 | 역할 |
|---|---|
| hpo.owl | 표현형 개체와 상하위 계층을 정의한다. |
| phenotype.hpoa | 질병과 표현형 특징 사이의 주석 관계를 제공한다. |
문서는 새 위험과 실제 판단 맥락을 빠르게 담지만 표현이 흔들린다. 온톨로지는 의미가 정돈되어 있지만 최신 문헌의 모든 연결을 즉시 담지는 못한다. 제7장의 핵심은 둘 중 하나를 택하는 것이 아니라, 서로의 빈틈을 드러내고 메우는 순환을 만드는 데 있다.
구축 과정은 다섯 단계다. 스키마를 정하고, 문서를 처리·적재하고, 의료 개체를 중의성 해소해 넣고, 온톨로지를 처리·매핑한 뒤, 같은 문장에 나타난 개체 사이에 공기 관계를 만든다.
문서·언급·정규 개체·온톨로지 노드와 관계를 설계한다.
OCR JSON에서 페이지 텍스트를 복원하고 File–Page 구조로 적재한다.
언급 위치, 문장 번호, UMLS ID, 별칭, semantic type을 보존한다.
SNOMED·HPO를 적재하고 UMLS ID를 매개로 MedicalEntity와 연결한다.
같은 문장에 나타난 의료 개체를 COOCCURR 관계로 투영한다.
‘Zika’라는 같은 표면형이 여러 MedicalEntity를 가리키거나, 서로 다른 표현이 하나의 MedicalEntity로 모이는 양쪽 경우를 모두 표현할 수 있다. 오류가 생기면 원문 위치까지 되짚을 수 있다.
Page–Mention 관계에는 시작·끝 문자 위치와 문장 번호를 배열로 저장한다. 검색 결과의 정확한 문맥을 잘라 보여주고 NED 오류를 디버깅하는 근거가 된다.
Amazon Textract 결과에서 줄의 bounding box와 페이지 구조를 이용해 본문을 복원한다.
처리 완료 라벨과 MERGE를 이용해 같은 페이지와 개체를 중복 적재하지 않는다.
수백 관계를 하나의 SNOMED_RELATION으로 두고 실제 관계명은 type 속성에 저장한다. IS_A만 별도 관계로 만든다.
SNOMED 루트의 Disease, Body structure, Pharmaceutical product 같은 원형 범주를 하위 노드에 전파한다.
// UMLS ID를 매개로 추출 개체와 SNOMED 연결 MATCH (m:MedicalEntity), (s:SnomedEntity) WHERE m.id IN s.umls_ids MERGE (m)-[:IS_SNOMED_ENTITY]->(s) // 질병 개체와 HPO 질병 주석 연결 MATCH (m:MedicalEntity), (d:HpoDiseaseEntity) WHERE m.id IN d.umls_ids MERGE (m)-[:IS_DISEASE_ENTITY]->(d)
// 같은 페이지의 같은 문장에 등장한 개체 쌍을 투영 MATCH (p:Page)-[r:MENTIONS_ENTITY]->(e:MedicalEntity) UNWIND r.sentence_index AS sentence WITH p, sentence, collect(DISTINCT e) AS entities // 모든 개체 쌍에 COOCCURR 생성 MERGE (e1)-[c:COOCCURR]-(e2) ON CREATE SET c.count = 1 ON MATCH SET c.count = c.count + 1
같은 문장에 함께 등장했다는 사실은 관계 탐색의 출발점이지, 원인·치료·위험 관계의 확정이 아니다. 후속 온톨로지 경로 분석과 원문 검토가 필요하다.
전통적 전문 검색은 입력 문자열을 문서에서 찾는다. 개념 검색은 먼저 온톨로지의 개체와 별칭을 찾고, 그 정규 개체가 언급된 페이지와 정확한 문맥을 되돌려준다.
검색어를 바꾸거나 검색 모드를 선택하면 결과 구성이 달라진다.
입력 문자열과 직접 일치하는 페이지를 중심으로 검색한다. 동의어와 임상 개체 ID는 자동으로 확장되지 않는다.
전문 검색의 첫 결과는 개념 검색 결과에서 19위에 놓였다. 그 페이지에는 UMLS 개체가 17회 언급되었고, 개념 검색의 최상위 페이지에는 같은 개체가 22회 언급되었다.
파일 경로와 페이지 번호뿐 아니라 개체 언급 횟수, 정확한 문자 위치와 주변 문맥을 함께 반환할 수 있다. 잘못된 NED를 페이지 단위로 점검하기도 쉬워진다.
‘islets of Langerhans’는 해부학 개체지만 전통 검색은 일반적인 섬 문서를 섞을 수 있다. 개념 검색은 ‘pancreatic islets’ 같은 별칭까지 확장하면서 지리적 섬의 결과를 걸러낸다.
구조적 지식 기반 검색은 동의어 확장에서 멈추지 않는다. 온톨로지 관계를 따라 관련 개체를 찾고, 그 개체가 언급된 다른 문서의 문맥까지 연결한다.
| 문서·페이지 | 찾은 의료 개체 | 왜 중요한가 |
|---|---|---|
| 장기 이식 품질·안전 지침 · p.137 | Diabetes Mellitus, Metabolic Syndrome X | 대사증후군·고혈압·당뇨·알부민뇨가 만성 신장 또는 전신 질환과 함께 논의된다. |
| 장기 이식 품질·안전 지침 · p.144 | Hyperglycemia, Type II Diabetes | 심한 두부외상 환자가 정상 췌장 기능에도 고혈당과 인슐린 치료를 보일 수 있다는 기증자 유지 문맥을 찾는다. |
시작 개체와 관련 질병 사이에 SNOMED의 FINDING_SITE 같은 관계가 있는지 확인한다.
언급의 시작·끝 위치를 기준으로 앞뒤 약 100자의 문맥을 안전하게 잘라낸다.
서로 다른 문서에 흩어진 지침·위험·임상 설명을 하나의 개념 경로로 모은다.
공기 관계는 두 개체가 같은 문장에 있다는 사실만 말한다. 온톨로지 경로는 그 동행의 이유를 설명하거나, 원문에 직접 쓰이지 않은 관련 지식을 확장한다.
문장 속 AIDS와 hepatitis가 함께 등장한 이유를 ‘둘 다 감염성 질환 위험’이라는 SNOMED 경로로 검증한다.
AIDS–간비대–간, AIDS–면역계 소견–루푸스 간염 같은 경로를 통해 원문에 없던 임상 연결을 추가로 탐색한다.
문서에서는 지카가 소두증과 Guillain–Barré 증후군의 원인으로 언급되고, 다른 페이지에서는 뎅기·치쿤구니야와 함께 신흥 병원체 맥락에 놓인다. 공기 빈도는 분석 우선순위를 제시하지만, 의미 확정은 원문과 온톨로지 경로를 함께 보아야 한다.
질병과 표현형 특징이 같은 문서에서 함께 등장할 때 HPO의 HAS_PHENOTYPIC_FEATURE 경로를 대조할 수 있다. 이미 알려진 표현형 관계를 확인하거나, 온톨로지에 없는 문헌상의 조합을 후보 지식으로 분리한다.
빠르게 변하는 의료 지식에서는 문헌이 온톨로지보다 먼저 도착한다. 함께 자주 등장하지만 유의미한 온톨로지 경로가 없는 개체 쌍은 새로운 관계 후보가 될 수 있다.
지카 바이러스와 Guillain–Barré 증후군은 여러 문장에서 반복해 함께 나타난다. 그러나 단순한 최단경로 검색은 SNOMED의 일반 허브를 지나며 수많은 우회 경로를 만든다. 기본 질의는 11,185개의 경로를 내놓았고, 고차수 허브를 제외하자 9개로 줄었다. 그럼에도 ‘viral disease’ 같은 일반 개념을 통과하는 길이 남아 직접적인 임상 관계를 설명하지 못했다.
이 실패는 무의미하지 않다. 텍스트에는 ‘Zika virus is a cause of … Guillain–Barré syndrome’이라는 문장이 있고, 그래프에는 두 개체의 반복 공기가 있으며, 온톨로지에는 적절한 직접 경로가 없다. 세 증거를 함께 보면 CAUSATIVE AGENT 같은 새 관계를 온톨로지 보강 후보로 제안할 수 있다.
허브 노드 허용 정도를 낮추면 후보 경로 수가 급격히 줄어드는 개념을 시각화한다.
일반 범주와 고차수 노드가 다수 포함되어 의미 있는 연결을 찾기 어렵다.
지카 바이러스가 Guillain–Barré 증후군의 원인이라고 기술한다.
두 개체가 동일 문장에 반복해서 등장한다.
SNOMED에서 임상적으로 만족스러운 연결이 발견되지 않는다.
CAUSATIVE AGENT 관계를 검증·통합 후보로 제안한다.
공기와 문장만으로 온톨로지를 자동 수정해서는 안 된다. 원문 출처, 관계 추출 정확도, 반복성, 반례, 전문가 검토를 거쳐야 한다. 이 장이 제시하는 것은 ‘발견 후보를 만드는 순환’이지 ‘사실을 자동 확정하는 기계’가 아니다.
제7장의 코드는 Python의 문서·NLP 적재기와 Neo4j Cypher 질의를 오간다. 중요한 것은 개별 라이브러리가 아니라, 단계마다 어떤 ID와 근거가 다음 단계로 넘어가는지 명확히 하는 일이다.
텍스트 복원 규칙, 페이지 ID, 문서 경로를 안정적으로 만든다. 원문 페이지는 모든 후속 근거의 닻이다.
표면형, 시작·끝 위치, 문장 번호, 후보, 선택 ID, 별칭과 semantic type을 함께 보존한다.
버전과 코드 체계의 매핑을 명시하고, 온톨로지 노드가 중복 생성되지 않도록 제약·인덱스를 둔다.
문서 속 언급과 정규 개체를 분리해야 동음이의·동의 표현을 동시에 모델링할 수 있다.
공기 빈도와 온톨로지 경로를 결합하되 고차수 허브, 일반 개념, 우회 경로의 잡음을 통제한다.
새 관계는 출처와 문맥을 가진 후보로 관리하고 전문가 검토 후 온톨로지에 반영한다.
| 위험 | 나타나는 증상 | 설계 대응 |
|---|---|---|
| 문자열 중심 병합 | 같은 이름의 다른 질병이 하나로 합쳐짐 | EntityMention과 MedicalEntity 분리, UMLS ID 연결 |
| 버전 불일치 | UMLS–SNOMED–HPO 코드 매핑 누락 | 온톨로지 릴리스와 적재 시점을 메타데이터로 관리 |
| 허브 경로 폭발 | 최단경로가 수천 개 나오지만 임상 의미가 약함 | 노드 차수 필터, 관계 타입 제한, 경로 길이·방향 제약 |
| 공기의 과대해석 | 동일 문장 출현을 인과관계로 오인 | 원문 문장, 관계 추출, 반례, 전문가 검증을 추가 |
| 결과 재현성 차이 | 환경·인덱스·적재 순서에 따라 순위가 미세하게 달라짐 | 버전 고정, 인덱스 명시, 적재 로그와 평가셋 유지 |
제7장의 성취는 하나의 NED 도구를 소개한 데 있지 않다. 원문, 개체 언급, 정규 ID, 의료 온톨로지, 검색과 발견을 하나의 검증 가능한 흐름으로 묶었다는 데 있다.
NER가 찾은 표현을 정확한 참조 개체와 연결해야 중의성과 동의어를 다룰 수 있다.
언어 이해는 강하지만 특정 UMLS·SNOMED 릴리스에 대한 검증 가능한 연결은 별도 자원이 필요하다.
File–Page–Mention–MedicalEntity를 분리해 검색 문맥, 오류 디버깅, 재처리를 가능하게 한다.
동의어 검색을 넘어 FINDING_SITE, IS_A, PATHOLOGICAL_PROCESS 같은 경로로 관련 문서를 연결한다.
온톨로지는 문헌 공기를 해석하고, 문헌은 온톨로지에 없는 새 관계 후보를 제시한다.