어떻게 작동하는가? 내부 원리 심층 분석 (Under the Hood)
단순히 ‘내 컴퓨터에서 돌아간다’는 사실을 넘어, OpenMed가 내부적으로 어떻게 방대한 의료 텍스트를 처리하는지 세 가지 핵심 관점에서 파헤쳐 보겠습니다.
1. 가벼움의 미학, 목적이 뚜렷한 소형 모델 군단
OpenMed는 수백 기가바이트의 메모리를 요구하는 거대한 챗봇 모델이 아닙니다. 주어진 텍스트에서 특정한 성질의 단어(예를 들어 질병명, 환자 이름, 약품명 등)만 형광펜으로 칠해주는 역할, 즉 ‘개체명 인식(NER)’에 극도로 집중하도록 수십 번 가지치기 된 소형 언어 모델(Small Language Model)들입니다.
가장 가벼운 ‘TinyMed’ 구조는 매개변수가 6,500만(65M) 개 수준에 불과하며, 매우 복잡한 임상 텍스트를 정밀하게 분석하는 ‘SuperClinical’ 구조도 4억 3,400만(434M) 개 수준입니다. 이렇게 모델을 작게 유지하는 전략 덕분에 수백만 원짜리 서버용 그래픽 카드가 없더라도 평범한 노트북에서 메모리 초과 현상 없이 부드럽게 구동됩니다.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#F0EEE9","primaryBorderColor":"#2a78d6","primaryTextColor":"#2b2926","secondaryColor":"#e8f0fb","secondaryBorderColor":"#4a3aa7","secondaryTextColor":"#2b2926","tertiaryColor":"#eafaf3","tertiaryBorderColor":"#1baf7a","tertiaryTextColor":"#2b2926","lineColor":"#8a8578","textColor":"#2b2926","edgeLabelBackground":"#F0EEE9","noteBkgColor":"#F0EEE9","noteTextColor":"#2b2926","noteBorderColor":"#8a8578","clusterBkg":"#faf9f6","clusterBorder":"#d8d4c8","fontFamily":"Pretendard, sans-serif"}}}%%
pie title "지원 가능한 민감정보 보호 언어 분포"
"유럽 주요 언어권" : 45
"아시아 주요 언어권" : 35
"중동 및 아프리카 언어권" : 15
"기타 언어권" : 5
특히 이 프레임워크는 제약, 화학 물질, 혈액암 특화, 유전체학 등 매우 세분화된 1,500여 개의 전문 모델을 갖추고 있어 필요한 분야의 모델만 골라 장착할 수 있습니다.
{
"type": "bar",
"data": {
"labels": ["제약 및 약물 감지 모델", "화학 물질 감지 모델", "혈액암 감지 특화 모델"],
"datasets": [
{
"label": "인기 특화 모델 누적 다운로드 횟수 (2025년 기준)",
"data": [147305, 126785, 126465],
"backgroundColor": [
"rgba(54, 162, 235, 0.7)",
"rgba(75, 192, 192, 0.7)",
"rgba(153, 102, 255, 0.7)"
]
}
]
},
"options": {
"responsive": true
}
}
2. 기기의 잠재력을 한계까지 끌어내는 하드웨어 최적화 백엔드
현대의 많은 의료진과 연구진은 배터리가 오래가고 성능이 뛰어난 Apple의 Mac 장비나 iPad를 사용합니다. 흥미롭게도 OpenMed는 이러한 Apple 환경에서 구동될 때 널리 쓰이는 기존의 방식 대신 ‘MLX 프레임워크’라는 무기를 꺼내 듭니다.
MLX는 Apple Silicon(M 시리즈 칩셋)의 독특한 통합 메모리(Unified Memory) 구조에 완벽하게 대응하기 위해 만들어진 머신러닝 라이브러리입니다. 기존에는 CPU 메모리에 올려둔 텍스트 데이터를 그래픽 연산을 위해 GPU 메모리로 무겁게 복사해서 옮겨야만 했지만, MLX를 거치면 복사 과정 자체를 생략하고 즉시 연산을 시작할 수 있습니다. 이로 인해 추론 속도는 급격하게 상승하고 전력 소모는 크게 떨어져, 배터리만으로 구동되는 오프라인 랩톱에서도 쾌적한 의료 텍스트 분석이 가능해졌습니다.
물론 일반적인 Windows PC나 NVIDIA GPU 서버를 사용하는 환경에서도 PyTorch 기반 백엔드로 자동 전환되어 최고의 성능을 발휘합니다.
3. 완벽한 규제 준수를 위한 비식별화(De-identification) 라이프사이클
의사의 메모에는 병명과 함께 환자의 실명, 나이, 전화번호가 뒤섞여 있기 마련입니다. OpenMed는 한국어, 영어, 프랑스어 등을 포함한 총 17개의 언어 환경에서 단순 규칙이 아닌 인공지능의 문맥 이해를 바탕으로 무려 55가지 이상의 개인 건강 정보를 정밀하게 식별합니다.
단순히 주민등록번호의 형태를 띠고 있다고 가리는 것이 아닙니다. “김환자 씨가 3월 15일에 서울병원에서 치료를 받았다”라는 전체 문장의 흐름을 분석하여 ‘김환자’가 사람 이름(NAME)이고, ‘3월 15일’이 특정 날짜(DATE)이며, ‘서울병원’이 기관명(ORGANIZATION)임을 정확히 파악하여 솎아냅니다.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#F0EEE9","primaryBorderColor":"#2a78d6","primaryTextColor":"#2b2926","secondaryColor":"#e8f0fb","secondaryBorderColor":"#4a3aa7","secondaryTextColor":"#2b2926","tertiaryColor":"#eafaf3","tertiaryBorderColor":"#1baf7a","tertiaryTextColor":"#2b2926","lineColor":"#8a8578","textColor":"#2b2926","edgeLabelBackground":"#F0EEE9","noteBkgColor":"#F0EEE9","noteTextColor":"#2b2926","noteBorderColor":"#8a8578","clusterBkg":"#faf9f6","clusterBorder":"#d8d4c8","fontFamily":"Pretendard, sans-serif"}}}%%
sequenceDiagram
participant UserApp as 병원 시스템
participant OpenMedAPI as 코어 API
participant PiiEngine as 정보 감지 엔진
participant Masking as 비식별화 필터
UserApp->>OpenMedAPI: 환자 실명과 민감 기록이 포함된 텍스트 전송
OpenMedAPI->>PiiEngine: 선택된 다국어 모델 로드 및 문맥 추론
PiiEngine-->>OpenMedAPI: 환자 식별 정보 및 관련 질병 명칭 추출 완료
OpenMedAPI->>Masking: 추출된 데이터 좌표를 바탕으로 마스킹 지시
Masking-->>OpenMedAPI: 민감 정보가 블라인드 처리된 안전한 텍스트 생성
OpenMedAPI-->>UserApp: 외부 유출 위험이 전혀 없는 최종 결과 반환
이 과정은 소프트웨어 내부적으로 매우 체계적인 상태 변화를 거치며 이루어집니다.
%%{init: {"theme":"base","themeVariables":{"primaryColor":"#F0EEE9","primaryBorderColor":"#2a78d6","primaryTextColor":"#2b2926","secondaryColor":"#e8f0fb","secondaryBorderColor":"#4a3aa7","secondaryTextColor":"#2b2926","tertiaryColor":"#eafaf3","tertiaryBorderColor":"#1baf7a","tertiaryTextColor":"#2b2926","lineColor":"#8a8578","textColor":"#2b2926","edgeLabelBackground":"#F0EEE9","noteBkgColor":"#F0EEE9","noteTextColor":"#2b2926","noteBorderColor":"#8a8578","clusterBkg":"#faf9f6","clusterBorder":"#d8d4c8","fontFamily":"Pretendard, sans-serif"}}}%%
stateDiagram-v2
[*] --> 임상텍스트수신
임상텍스트수신 --> 토큰화단계
토큰화단계 --> 로컬모델연산진행
로컬모델연산진행 --> 개체인식및분류완료
state 개인정보보호전략 {
개체인식및분류완료 --> 민감정보마스킹적용
민감정보마스킹적용 --> 가상합성데이터치환
}
개인정보보호전략 --> 최종안전결과물생성
최종안전결과물생성 --> [*]
위 다이어그램에서 볼 수 있듯, 민감 정보를 단순히 삭제하는 ‘마스킹’ 전략 외에도, 이름이나 날짜를 진짜와 비슷해 보이지만 실제와는 전혀 다른 가상의 데이터로 치환하여 문맥의 자연스러움을 유지하는 ‘합성 데이터 치환’ 기능까지 유연하게 선택할 수 있습니다.