본문으로 건너뛰기

© 2026 Molayo

GH Trending릴리즈2026. 06. 15. 22:15

openmed: 단 한 줄의 코드로 임상 텍스트를 구조화된 인사이트로 변환

요약

OpenMed는 임상 텍스트를 구조화된 데이터로 변환하는 온디바이스 의료 AI 프레임워크입니다. 1,000개 이상의 특화된 모델을 통해 개인정보(PII) 비식별화와 개체명 추출을 클라우드 연결 없이 로컬에서 수행합니다.

핵심 포인트

  • 1,000개 이상의 특화된 생물 의학 및 임상 모델 제공
  • 100% 온디바이스 실행으로 환자 데이터 보안 및 HIPAA 준수 지원
  • Python 한 줄의 코드로 간편하게 임상 텍스트 분석 가능
  • Apple MLX 기반의 iPhone 네이티브 Swift 앱 지원

OpenMed — local-first healthcare AI

단 한 줄의 코드로 임상 텍스트를 구조화된 인사이트로 변환하세요.

개체명 추출 (Entity extraction), 개인정보 (PII) 비식별화, 그리고 귀하의 자체 하드웨어에서 완전히 실행되는 1,000개 이상의 특화된 의료 모델 — Python의 한 줄 코드부터 Apple MLX 기반의 iPhone용 네이티브 Swift 앱까지 지원합니다. 클라우드는 없습니다. 벤더 종속성 (Vendor lock-in)도 없습니다. 환자 데이터가 귀하의 네트워크를 벗어나지 않습니다.

1,000개 이상의 모델 · 12개 언어 · 247개 PII 체크포인트 · 100% 온디바이스 (on-device) · Apache-2.0

English ·
简体中文 ·
Español ·
Français ·
Deutsch ·
Italiano ·
Português ·
Nederlands ·
العربية ·
हिन्दी ·
తెలుగు ·
日本語 ·
Türkçe ·
فارسی

OpenMed는 **완전히 온디바이스 (on-device)**로 실행됩니다 — 임상 텍스트가 기기를 절대 벗어나지 않습니다. 여기 iPhone에서 완전히 오프라인으로 작동하는 모습이 있습니다:

OpenMed Scan on iPhone — on-device PII de-identification and clinical extraction via OpenMedKit

OpenMedKit을 통한 iPhone에서의 실행 — 임상 노트를 스캔하고, 비식별화하며, 임상 신호를 추출합니다. 이 모든 과정은 Apple MLX를 통해 로컬에서 이루어집니다. 아무것도 업로드되지 않습니다.

OpenMed redacting PII from a clinical discharge document in real time

실시간 PII 비식별화 — Nemotron Privacy Filter가 임상 퇴원 패킷에서 이름, 주소, ID 및 청구 데이터를 완전히 온디바이스 (on-device)로 편집합니다.(표시된 모든 값은 합성 데이터입니다.)

from openmed import analyze_text
result = analyze_text(
"Patient started on imatinib for chronic myeloid leukemia.",
...

API 키나 네트워크 호출 없이 로컬에서 실행되는 최첨단 임상 NER (Named Entity Recognition) 모델입니다.

OpenMed |
Cloud medical APIs | |
|---|---|---|
| 사용자의 장치/서버에서 실행 | ✅ | ❌ |
| 환자 데이터가 네트워크를 벗어남 | 절대 없음 (Never) | 벤더로 전송됨 |
| 비용 | 무료 및 오픈 소스 (Free & open-source) | 호출당 과금 |
| 특화된 의료 모델 | 1,000개 이상 | 제한적 |
| 언어 | 12개 이상 | 다양함 |
| ... |

특화된 모델 (Specialized models)— 엄선된 1,000개 이상의 생물 의학 및 임상 모델이 포함되어 있으며, 다수가 독점적인 스택 (proprietary stacks)보다 뛰어난 성능을 발휘합니다.
HIPAA 준수 비식별화 (HIPAA-aware de-identification)— 18가지 Safe Harbor 식별자 전체를 지원하며, 스마트 엔티티 병합 (smart entity merging) 및 형식 보존 가상 데이터 (format-preserving fakes) 기능을 제공합니다.
어디서나 실행 가능 (Runs everywhere)— CPU, CUDA, Apple Silicon (MLX)에서 작동하며, OpenMedKit을 통해 iOS/macOS 앱에서 네이티브로 실행됩니다.
한 줄 배포 (One-line deployment)— Python API, Docker화된 REST 서비스 또는 배치 파이프라인 (batch pipelines)을 지원합니다.
종속성 없음 (Zero lock-in)— Apache-2.0 라이선스, 귀하의 인프라, 귀하의 데이터를 사용합니다.

OpenMed는 데이터가 이미 존재하는 곳에서 실행되도록 설계되었습니다. Apple 하드웨어에서는 MLX를 통해 가속화되며, OpenMedKit을 통해 iPhone, iPad, Mac 앱으로 직접 탑재됩니다. 따라서 개인정보 (PII) 탐지 및 임상 추출이 장치 내에서 완전히 오프라인으로 수행됩니다.

// 앱에 OpenMedKit 추가
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "1.5.5"),
...

PII 토큰 분류, Privacy Filter 제품군, 그리고 실험적인 GLiNER 제품군 제로샷 (zero-shot) 작업을 위한 MLX 런타임 (MLX runtime) — CoreML 폴백 (fallback) 경로를 포함합니다.
하나의 모델 이름으로 모든 플랫폼 지원— MLX 모델 이름은 Apple 이외의 하드웨어에서 자동으로 일치하는 PyTorch 체크포인트로 폴백됩니다.
Apple Silicon에서의 Python도 지원합니다: pip install "openmed[mlx]"

.

가이드: MLX 백엔드 · OpenMedKit (Swift) · CoreML 내보내기

MLX vs CPU latency on Apple Silicon — 24 to 33 times faster

Apple Silicon에서의 MLX: CPU PyTorch보다 24–33배 빠름 — Privacy Filter 기준 — 추론 단계당 중앙값 지연 시간 (median latency), 낮을수록 좋습니다.

flowchart LR
A["임상 텍스트 (Clinical text)"] --> B["OpenMed<br/>(100% 온디바이스)"]
B --> C["의료 엔티티 (Medical entities)"]
...
# Core + Hugging Face 런타임 (Linux, macOS, Windows; CPU 또는 CUDA)
pip install "openmed[hf]"
# REST 서비스 추가
...
from openmed import analyze_text
analyze_text(
"Patient received 75mg "
...

|

uvicorn openmed.service.app:app \
--host 0.0.0.0 --port 8080

|

from openmed import BatchProcessor
p = BatchProcessor(
model_name=
...

오프라인/에어갭 환경에서 사용하려면? model_name (또는 model_id)을 로컬 디렉터리 경로로 지정하면 OpenMed가 Hugging Face Hub와 통신하지 않고도 모델을 불러옵니다:

from openmed import OpenMedConfig, analyze_text
result = analyze_text(
"Patient presents with chronic myeloid leukemia and Type 2 diabetes.",
...

전문 의료 NER(Named Entity Recognition) 모델의 엄선된 레지스트리 — 전체 카탈로그를 확인하세요.

ModelSpecialization (특화 분야)Entity types (개체 유형)Size (크기)
disease_detection_superclinicalDisease & conditions (질병 및 상태)DISEASE, CONDITION, DIAGNOSIS434M
pharma_detection_superclinicalDrugs & medications (약물 및 의약품)DRUG, MEDICATION, TREATMENT434M
pii_superclinical_largePII & de-identification (개인 식별 정보 및 비식별화)NAME, DATE, SSN, PHONE, EMAIL, ADDRESS434M
anatomy_detection_electramedAnatomy & body parts (해부학 및 신체 부위)ANATOMY, ORGAN, BODY_PART109M
gene_detection_genecorpusGenes & proteins (유전자 및 단백질)GENE, PROTEIN109M
from openmed import extract_pii, deidentify
text = "Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789"
# 스마트 병합(smart merging)으로 PII 추출 (토큰화 파편화를 방지)
...

**스마트 개체 병합(Smart entity merging)**은 01/15/1970을 분리하지 않고 온전하게 유지합니다. **Faker 기반 난독화(Faker-backed obfuscation)**는 사용자 지정 임상 ID 제공업체(CPF, CNPJ, BSN, NIR, Codice Fiscale, NIE, Aadhaar, Steuer-ID, NPI)를 지원합니다. HIPAA: 18개 Safe Harbor 식별자 모두 구성 가능하며 신뢰도 임계값 설정이 가능합니다. 배치 PII(Batch PII) (v1.5.5): BatchProcessor(operation="extract_pii" | "deidentify", batch_size=16)를 사용하여 여러 문서에서 추출 또는 비식별화할 수 있습니다.

Complete PII notebook · Smart merging · Anonymization

Privacy Filter family — OpenAI Privacy Filter 아키텍처 기반의 세 가지 모델 패밀리

동일한 모델 코드(로컬 어텐션 (local attention), 싱크 토큰 (sink tokens), RoPE+YaRN, tiktoken o200k_base를 사용하는 gpt-oss-style sparse-MoE 트랜스포머 (transformer))를 사용하지만, 학습 데이터는 다릅니다. 모든 모델은 동일한 extract_pii() / deidentify() API를 통해 경로를 지정하며, 오직 model_name= 파라미터만 변경하면 됩니다.

변형 (Variant)PyTorch (CPU + CUDA)MLX (Apple Silicon)MLX 8-bit
OpenAI Privacy Filteropenai/privacy-filterOpenMed/privacy-filter-mlx…-mlx-8bit
Nemotron-PII fine-tuneOpenMed/privacy-filter-nemotron…-nemotron-mlx…-nemotron-mlx-8bit
OpenMed MultilingualOpenMed/privacy-filter-multilingual…-multilingual-mlx…-multilingual-mlx-8bit
from openmed import extract_pii
text = "Patient Sarah Connor (DOB: 03/15/1985) at MRN 4471882."
extract_pii(text, model_name="openai/privacy-filter") # PyTorch 베이스라인
...

Apple Silicon이 아닌 호스트에서는 MLX 모델 이름이 일치하는 PyTorch 체크포인트(checkpoint)로 자동 대체됩니다(1회성 경고 발생) — 하나의 모델 이름만 전달하면 어디서든 실행할 수 있습니다. Privacy Filter 아키텍처 및 백엔드 라우팅 (backend routing)을 참조하세요.

en, fr, de, it, es, nl, hi, te, pt, ar, ja, tr에 걸친 추출 및 비식별화 (de-identification) — 총 247개의 PII 체크포인트.

python -c "from openmed import extract_pii; print([(e.label, e.text) for e in extract_pii('Dr. Pedro Almeida, CPF: 123.456.789-09, email: pedro@hospital.pt', lang='pt').entities])"

언어별 예시 보기 (포르투갈어, 네덜란드어, 힌디어, 아랍어, 일본어, 터키어)

from openmed import extract_pii
portuguese = extract_pii("Paciente: Pedro Almeida, CPF: 123.456.789-09, telefone: +351 912 345 678", lang="pt", use_smart_merging=True)
dutch = extract_pii("Patiënt: Eva de Vries, BSN: 123456782, telefoon: +31 6 12345678", lang="nl", use_smart_merging=True)
...

요청 검증 (request validation), 공유 파이프라인 프리로드 (pipeline preload), 통합 에러 엔벨로프 (error envelopes)를 갖춘 Docker 친화적인 FastAPI 서비스입니다.

pip install "openmed[hf,service]"
uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080

또는 Docker 사용 시

...

curl -X POST http://127.0.0.1:8080/pii/extract \
-H "Content-Type: application/json" \
-d '{"text":"Paciente: Maria Garcia, DNI: 12345678Z","lang":"es"}'

모델 생명주기 (v1.5.5): GET /models/loaded를 통해 필요할 때 메모리 확보 및 POST /models/unload, 그리고 keep_alive 유휴 시간 설정:

OPENMED_SERVICE_KEEP_ALIVE=10m uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080
curl -X POST http://127.0.0.1:8080/models/unload -H "Content-Type: application/json" -d '{"all":true}'

전체 REST 서비스 가이드를 참조하세요.

전체 가이드는 openmed.life/docs에서 확인 가능합니다.

| 시작하기 | 텍스트 분석 | 모델 레지스트리 |
| FAQ | 익명화 (Anonymization) | 배치 처리 (Batch Processing) |
| 구성 프로필 (Configuration Profiles) | REST 서비스 | MLX 백엔드 |

OpenMed의 수호자는 작은 아비세나(Avicenna, Ibn Sina) 스타일의 복슬복슬한 페르시아 고양이입니다. 아비세나는 600년 동안 세계 표준 의학 교과서였던 『의학정전 (Canon of Medicine)』을 쓴 위대한 페르시아 의사입니다. 그는 페르시아 청록색(fīrūza) 팔레트로 구성된 오픈 북 형태의 의료 지식을 감시하며, 가장 사적인 데이터를 위한 로컬 우선(local-first) 수호자 역할을 합니다.

기여를 환영합니다 — 버그 보고, 기능 요청, PR 모두 환영합니다.

  • 이슈 열기 (Open an issue)
    번역도 환영합니다— 상단의 스위처에 연결된 다른 언어의 README 파일을 완성하는 데 도움을 주세요.

OpenMed는 훌륭한 오픈 소스 작업 위에 구축되었습니다 — 특히 OpenAI(Privacy Filter 아키텍처), NVIDIA(Nemotron PII 데이터셋), Hugging Face(transformers 및 모델 생태계), Apple(MLX), 그리고 Faker 유지보자들에게 감사를 표합니다.

Apache-2.0 라이선스 하에 배포됩니다.

@misc{panahi2025openmedneropensourcedomainadapted,
title={OpenMed NER: Open-Source, Domain-Adapted State-of-the-Art Transformers for Biomedical NER Across 12 Public Datasets},
author={Maziyar Panahi},
... 

만약 OpenMed가 유용하다면, 스타(star)를 눌러 다른 사람들이 발견할 수 있도록 도와주세요.

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0