openmed
무엇인가
OpenMed는 임상 텍스트를 입력받아 의료 개체명 인식(NER)과 HIPAA 대상 개인식별정보(PII) 비식별화를 수행하는 로컬 우선 런타임이다. 클라우드 의료 NLP API가 차지하던 자리를 온디바이스 실행으로 대체한다. Python 라이브러리, CLI, REST 서비스, Kotlin(OpenMedKit)·TypeScript(npm openmed) 바인딩이 같은 모델 카탈로그를 호출한다. SDK 소스는 Apache-2.0으로 배포된다.
어떻게 동작하나
핵심 API는 analyze_text()와 extract_pii()/deidentify()다. analyze_text()는 model_name 또는 model_id로 모델을 지정하고 엔티티의 label과 text를 담은 결과를 반환한다. 모델은 매니페스트 항목으로 관리되며, 아티팩트가 로컬에 준비된 뒤의 추론은 네트워크를 쓰지 않는다. 백엔드는 Hugging Face/PyTorch, Apple MLX, ONNX Runtime Mobile, Transformers.js 네 갈래이고 같은 모델 이름을 백엔드별 아티팩트로 매핑한다. Privacy Filter 계열은 gpt-oss 스타일 sparse-MoE 트랜스포머에 local attention, sink token, RoPE+YaRN, tiktoken o200k_base를 조합한 구조를 쓰며 세 모델 패밀리가 동일한 API를 공유한다. BatchProcessor는 여러 문서를 묶어 CPU에서 최대 3.3배, MLX에서 2.2배 처리량을 낸다.
무엇과 다른가
일반적인 의료 NLP 파이프라인은 텍스트를 외부 API로 전송하고 결과를 되받는다. OpenMed는 모델 가중치를 사용자 네트워크 안에 두고 추론까지 그 안에서 끝낸다. 비식별화 대상이 네트워크 경계를 넘지 않으므로 전송 구간 암호화나 리전 선택 같은 외부 처리 전제가 필요 없다. 백엔드가 달라도 모델 이름 하나로 같은 추론을 재사용하도록 설계되어 서버·모바일·브라우저가 동일한 카탈로그를 공유한다.
어떻게 쓰나
pip install --upgrade "openmed[hf]"로 코어와 Hugging Face 런타임을 설치한다. REST 서비스가 필요하면 openmed[hf,service], Apple Silicon 가속은 openmed[mlx] extra를 추가한다. 첫 호출은 analyze_text("...", model_name="pharma_detection_superclinical") 형태다. REST는 uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080으로 띄우고 GET /health로 상태를 확인한다. python -m openmed.onnx.convert --model <hf-model> --include-transformersjs는 임의의 Hugging Face 모델을 ONNX·Transformers.js 번들로 내보낸다. ./install-skills.sh는 Claude Code, Codex, OpenCode, ~/.agents/skills에 스킬을 설치한다.
전제와 한계
Python 3.10 이상이 필요하다. 추론은 로컬에서 수행되지만 모델 아티팩트 최초 다운로드, 원격 제공자 어댑터, 텔레메트리가 켜진 경로, 사용자가 설정한 연동은 네트워크를 사용할 수 있다. MLX 모델 이름은 Apple Silicon이 아닌 호스트에서 대응하는 PyTorch 체크포인트로 자동 치환되고 1회 경고가 출력된다. 모델과 데이터셋마다 라이선스 조건이 다르므로 개별 확인이 필요하다.