본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 15. 04:41

오늘의 오픈 소스 프로젝트 (#93): OpenMed — 기기를 떠나지 않는 임상용 AI

요약

OpenMed는 환자 데이터의 보안을 위해 클라우드 전송 없이 기기 내에서 임상 텍스트를 처리하는 로컬 우선 헬스케어 AI 라이브러리입니다. 1,000개 이상의 생물 의학 NLP 모델을 제공하며, Python부터 iOS까지 다양한 플랫폼에서 배포가 가능합니다.

핵심 포인트

  • 데이터 프라이버시를 위해 온디바이스(on-device) 처리 방식 채택
  • 생성형 LLM 대신 인코더 트랜스포머 기반의 높은 성능 제공
  • 13가지 임상 NER 도메인 및 PII 비식별화 기능 지원
  • Python, Swift, Docker 등 멀티 플랫폼 배포 지원

서론

"임상 데이터는 기기를 절대 떠나지 않습니다."

이 글은 Open Source Project of the Day 시리즈의 #93번째 기사입니다. 오늘의 프로젝트는 OpenMed입니다. 이는 HuggingFace 연구원인 Maziyar Panahi가 구축한 로컬 우선(local-first) 헬스케어 AI 라이브러리로, 클라우드로의 데이터 이동 없이 임상 텍스트 처리를 위해 특별히 설계되었습니다.

표준적인 헬스케어 AI 워크플로우는 환자 데이터를 클라우드 업체로 전송하고 구조화된 결과를 다시 받는 방식입니다. 이는 지속적인 컴플라이언스(compliance, 규제 준수) 노출 지점입니다. HIPAA, GDPR 및 국가 데이터 보호법은 환자 데이터가 이동하는 방식에 특정 제약을 가하며, "클라우드로 전송하는 것"은 논의가 시작되기도 전에 의료 기관에 강력한 제한 사항이 되는 경우가 많습니다.

OpenMed는 대신 온디바이스(on-device) 처리를 도입합니다. 로컬에서 실행되는 1,000개 이상의 생물 의학 NLP(Natural Language Processing, 자연어 처리) 모델을 제공하며, 네트워크 호출이나 외부 API 키가 필요 없고, Python 서비스부터 iOS 앱까지 배포가 가능합니다.

학습 내용

  • 임상 작업을 위해 OpenMed가 생성형 LLM(Large Language Models) 대신 인코더 트랜스포머(encoder transformers)를 선택한 이유
  • 질병 탐지부터 유전학에 이르는 13가지 모든 임상 NER(Named Entity Recognition, 개체명 인식) 도메인
  • 18가지 모든 HIPAA Safe Harbor 식별자를 다루는 PII(Personally Identifiable Information, 개인 식별 정보) 비식별화의 엔지니어링 설계
  • 멀티 플랫폼 지원: Python/MLX, Swift/OpenMedKit, Docker/FastAPI
  • v1.2.0에서 도입된 Zero-shot NER 및 관계 추출(relation extraction)
  • Apple Silicon 대 CPU PyTorch 성능 비교

사전 요구 사항

  • NLP 기초 지식 (개체명 인식, Transformer 모델)
  • Python 경험
  • 헬스케어 데이터 프라이버시(HIPAA, 데이터 비식별화 맥락)에 대한 기본 이해

프로젝트 배경

OpenMed란 무엇인가?

OpenMed는 "데이터가 보안 환경을 떠나지 않고도 임상 텍스트를 구조화된 통찰력으로 전환한다"는 목표를 가진 로컬 우선 헬스케어 AI 툴킷입니다.

핵심 역량은 생성형 AI (Generative AI)가 아니라, 추출 및 분류를 수행하는 인코더 트랜스포머 (Encoder Transformers, BERT, ELECTRA, DeBERTa 제품군)입니다. 관련 논문 (arXiv:2508.01630)에 따르면 12개의 생물 의학 NER (Named Entity Recognition, 개체명 인식) 벤치마크 중 10개에서 최첨단 (State-of-the-art) 성능을 기록했습니다.

저자 / 팀

  • 저자: Maziyar Panahi
  • 배경: HuggingFace 연구원, 생물 의학 NLP (Natural Language Processing), spaCy 및 HuggingFace Transformers 커뮤니티 기여자
  • 라이선스: Apache-2.0
  • 최신 버전: v1.5.5 (2026년 6월)

프로젝트 통계

  • ⭐ GitHub Stars: 2,800+
  • 🍴 Forks: 274+
  • 📦 HuggingFace 모델: 1,000+
  • 🌍 지원 언어: 12개
  • 📄 라이선스: Apache-2.0

핵심 기능

주요 기능

임상 텍스트 입력
      ↓
로컬 모델 추론 (Local model inference, BERT/ELECTRA/DeBERTa)
...

활용 사례

  1. 임상 텍스트 구조화 (Clinical text structuring)

    • 퇴원 기록 및 의료 기록에서 질병명, 약물, 해부학적 위치 추출
    • 13개의 생물 의학 NER 도메인: 화학 물질, 질병, 유전자, 단백질, 종(species), 해부학, 종양학 등
  2. 환자 데이터 비식별화 (Patient data de-identification)

    • HIPAA Safe Harbor의 18가지 식별자 모두 포함
    • 네 가지 편집 (Redaction) 방법: 마스킹 ([NAME]), 교체 (Faker 기반 대리 정보), 해싱 (Hash), 날짜 이동 (Date-shift)
  3. iOS 및 macOS 의료 앱 개발

    • 네이티브 API를 포함한 OpenMedKit Swift 패키지 — PHI (Protected Health Information, 개인 건강 정보)가 기기를 절대 떠나지 않음
    • v1.2.0 iOS 스캔 데모: 5단계 임상 워크플로 — 스캔, OCR 검토, 비식별화, 임상 추출, 내보내기
  4. 엔터프라이즈 헬스케어 시스템 통합

    • 기존 워크플로에 삽입할 수 있는 Docker/FastAPI REST API 제공
    • 100ms 미만의 지연 시간 (Latency) 엔드포인트를 갖춘 AWS SageMaker Marketplace 관리형 버전

빠른 시작

설치:

# CPU
pip install openmed

...

임상 NER:

from openmed import analyze_text

# 질병 탐지
...

PII (개인 식별 정보) 비식별화:

from openmed import deidentify

text = "Patient John Smith (DOB: 1985-03-15, SSN: 123-45-6789) was admitted..."
...

배치 처리 (Batch processing):

from openmed import BatchProcessor

processor = BatchProcessor(
...

Swift/iOS:

import OpenMedKit

let analyzer = OpenMedNER(model: .diseaseDetectionSuperClinical)
...

모델 레지스트리 (Model Registry)

모델 (Model)도메인 (Domain)파라미터 (Parameters)HuggingFace 다운로드 수
disease_detection_superclinical질병/상태 (Diseases/conditions)434M104K
...

심층 분석 (Deep Dive)

생성형 LLM이 아닌 인코더 트랜스포머 (Encoder Transformers)를 사용하는 이유

이것은 OpenMed 설계에서 가장 중대한 기술적 선택입니다.

생성형 LLM (Generative LLMs; GPT-4, Claude 등)은 의료 텍스트 작업에서 근본적인 문제를 가지고 있습니다. 바로 출력이 결정론적 (deterministic)이지 않다는 점입니다. 생성형 모델에게 개인정보 (PII) 탐지를 요청하면, 특정 입력값에 대해 출력 결과에 환자의 이름을 다시 재현하거나, 원문에는 없는 약물 이름을 환각 (hallucination)하여 생성할 수도 있습니다. 임상 애플리케이션에서 이는 허용될 수 없는 실패 모드입니다.

NER (개체명 인식)을 수행하는 인코더 전용 트랜스포머 (Encoder-only transformers)는 분류 (classification) 문제입니다. 즉, 각 토큰에 고정된 집합으로부터 레이블을 할당하는 방식입니다. 이러한 모델은 주어진 입력에 대해 결정론적인 출력을 생성하며, 새로운 토큰을 생성하지 않으므로 환각이 발생하지 않습니다. 또한 33M에서 568M 사이의 파라미터 수로 로컬에서 실행 가능하며, 명시적인 소스 위치와 함께 감사 가능한 (auditable) 결과를 생성합니다. 의료 분야의 작업에서는 이러한 특성들이 유창한 문장을 생성하는 능력보다 훨씬 더 중요합니다.

개인정보 필터 엔지니어링 (Privacy Filter Engineering)

OpenMed의 PII 탐지는 단순히 NER 모델을 실행하는 것 그 이상입니다. 그 위에는 여러 계층이 존재합니다.

문맥 인식 탐지 (Context-aware detection): 후보군 주변의 100자 창(window) 내에서 키워드 부스팅 (Keyword boosting)을 수행합니다. SSN: 뒤에 오는 숫자 시퀀스는 주변에 레이블이 없는 동일한 숫자 시퀀스보다 더 높은 신뢰도 점수를 받습니다.

체크섬 검증 (Checksum validation): 구조화된 식별자 형식에 대한 오탐 (false positives)을 줄입니다.

  • 미국 SSN: 형식 검증 (format validation)
  • 인도 Aadhaar: Verhoeff 체크섬 알고리즘
  • 브라질 CPF/CNPJ: Luhn 체크섬
  • 이탈리아 Codice Fiscale: 형식 + 문자 검증
  • 독일 Steuer-ID: 형식 검증

Smart Entity Merging (스마트 엔티티 병합): 서브워드 토큰화 (subword tokenization) 파편화 문제를 해결합니다. BERT 계열 모델은 "O'Brien"을 ["O", "'", "Brien"]로 분리합니다. 엔티티 병합 로직은 이러한 파편들을 완전한 엔티티로 재조립하여, 불완전한 개인정보 (PII) 탐지 결과가 발생하는 것을 방지합니다.

세 가지 프라이버시 필터 (Privacy Filter) 변체:

  • Baseline: 범용 PII 탐지
  • Nemotron fine-tuned: 더 높은 정밀도 (precision)
  • Multilingual (v1.4.0): 16개 언어에 걸친 통합 모델

멀티 플랫폼 런타임 (Multi-Platform Runtime)

┌──────────────────────────────────────────────────────┐
│                  OpenMed Runtime                     │
├────────────────┬─────────────────┬───────────────────┤
...

Swift 및 Python 경로는 동일한 MLX 모델 파일을 공유합니다. 병원 시스템은 동일한 모델 아티팩트 (model artifacts)를 사용하여, 별도의 모델 유지보수 없이 Python 기반 서버 추론을 수행하는 동시에 iPad 상의 기기 내부 (on-device)에서 OpenMedKit을 실행할 수 있습니다.

제로샷 기능 (Zero-Shot Capabilities) (v1.2.0)

v1.2.0에서는 미리 정의된 엔티티 카테고리가 필요하지 않은 제로샷 (zero-shot) 인터페이스를 도입했습니다:

from openmed import zero_shot_ner

# 사전 학습된 NER 카테고리에 얽매이지 않는 커스텀 엔티티 레이블
...
from openmed import extract_relations

# 엔티티 간의 의미론적 관계 추출
...

사전 학습된 NER 모델의 범위를 벗어나는 임상 엔티티의 경우, 제로샷은 유연한 탈출구 (escape hatch)를 제공합니다.

파인튜닝 (Fine-Tuning) 설계

OpenMed의 모델은 도메인 적응형 사전 학습 (DAPT, domain-adaptive pre-training)과 LoRA 파인튜닝을 결합하여 사용합니다:

  • 사전 학습 코퍼스 (Pre-training corpus): 35만 개의 생물 의학 지문 (biomedical passages)
  • LoRA: 모델 파라미터의 1.5% 미만 업데이트
  • 학습 시간: 단일 GPU에서 12시간 미만
  • 탄소 발자국 (Carbon footprint): 전체 학습 과정 동안 1.2 kg CO₂e 미만

자신의 데이터로 파인튜닝을 원하는 실무자들에게 이 수치는 매우 의미가 큽니다. 멀티 GPU 클러스터가 필요하지 않으며, 단일 소비자용 GPU와 몇 시간의 시간만 있으면 충분합니다.

버전 히스토리 (Version History)

버전 (Version)날짜 (Date)주요 변경 사항 (Key Changes)
v1.0.02026년 4월첫 번째 안정화 버전 (First stable release), MLX 백엔드 (backend), Swift 패키지 (package)
...

링크 및 리소스 (Links and Resources)

공식 리소스 (Official Resources)

참조 표준 (Standards Referenced)

  • HIPAA Safe Harbor (18가지 환자 식별자)
  • OWASP 의료 데이터 보안 가이드라인 (healthcare data security guidelines)
  • STRIDE 위협 모델링 (STRIDE threat modeling) (개인정보 필터 보안 설계 (Privacy Filter security design))

결론 (Conclusion)

OpenMed은 데이터가 기기를 벗어날 수 없는 의료용 자연어 처리 (medical NLP)라는 특정한 형태의 문제를 해결합니다.

이러한 제약 조건은 많은 산업 분야에서는 선택 사항이지만, 많은 의료 환경에서는 법적으로 의무 사항입니다. OpenMed은 이 제약 조건을 하나의 아키텍처 (architecture)로 전환했습니다: 결정론적 분류 (deterministic classification)를 위한 인코더 모델 (encoder models), 로컬 가속화를 위한 MLX, 모바일 네이티브 통합을 위한 Swift 패키지, 오탐 (false positives)을 줄이기 위한 체크섬 검증 (checksum validation), 토큰화 파편 (tokenization fragments)을 처리하기 위한 스마트 엔티티 병합 (Smart Entity Merging) 등이 그것입니다. 각 계층은 임상 텍스트 처리 과정에서 나타나는 실제 엔지니어링 문제를 해결합니다.

의료용 AI 애플리케이션을 구축하는 개발자나 임상 텍스트를 연구하는 연구자들에게 OpenMed은 현재 오픈 소스 생태계에서 가장 완전한 로컬 우선 (local-first) 옵션 중 하나입니다. 개인 식별 정보 (PII) 비식별화 기능과 다국어 지원은 의료 분야 외에도 클라우드 이동 없이 민감한 데이터를 처리해야 하는 금융, 법률, 보험, 공공 기록 등 모든 분야에서 직접적인 관련성을 가집니다.

_ PrimeSkills를 탐색해 보세요 — 엄선된 AI 에이전트와 기술을 위한 마켓플레이스입니다. 각 기술은 실제 기업 워크플로우에서 검증되었으며, 과장된 광고를 걷어내고 진정으로 작동하는 것만을 제공합니다._

더 유용한 통찰력과 흥미로운 제품들을 확인하시려면 저의 홈페이지를 방문해 주세요.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0