Klinische Texte auf kontrollierter Hardware in strukturierte, de-identifizierte Erkenntnisse umwandeln.
Die lokale Kernlaufzeit von OpenMed führt Extraktion und De-Identifikation aus, sobald die benötigten Modellartefakte vorliegen. Modelldownloads, Adapter für entfernte Anbieter, telemetrieaktivierte Pfade und nutzerkonfigurierte Integrationen können das Netzwerk verwenden; prüfen Sie die Bedingungen jedes Modells und Datensatzes.
PyPI package · Python 3.10+ · Model catalog · Research paper · Apache-2.0 SDK source
OpenMedKit · Apple Silicon / MLX · Android / ONNX Runtime Mobile · Browser / Transformers.js · Documentation
Local-First-Laufzeit · 33 modellgestützte PII-Sprachen · Apache-2.0 SDK
English · 简体中文 · Español · Français · Deutsch · Italiano · Português · Nederlands · العربية · हिन्दी · తెలుగు · 日本語 · Türkçe · فارسی
PII-De-Identifikation in Echtzeit: Der Nemotron Privacy Filter schwärzt Namen, Adressen, IDs und Abrechnungsdaten aus einem klinischen Entlassungsbericht, vollständig auf dem Gerät. (Alle gezeigten Werte sind synthetisch.)
from openmed import analyze_text
result = analyze_text(
"Patient started on imatinib for chronic myeloid leukemia.",
model_name="disease_detection_superclinical",
)
for entity in result.entities:
print(f"{entity.label:<12} {entity.text:<28} {entity.confidence:.2f}")
# DISEASE chronic myeloid leukemia 0.98
# DRUG imatinib 0.95Ein klinisches NER-Modell nutzt die lokale Laufzeit, nachdem die benötigten Artefakte verfügbar sind.
| Bereitstellungsaspekt | Grenze des OpenMed SDK |
|---|---|
| Kernlaufzeit | Verarbeitet lokal, sobald die benötigten Artefakte vorliegen |
| Optionale Netzwerkpfade | Downloads, entfernte Adapter, Telemetriepfade und Integrationen können das Netzwerk nutzen |
| Validierung | Betreiber prüfen Modell- und Datenbedingungen, Datenschutzverhalten und klinische Eignung |
| Schnittstellen | Python, Swift, Android, Browser und Dienste, soweit unterstützt |
- Kuratierter Modellkatalog: Jedes Modell, jede Lizenz und jeder Datensatz muss für den Einsatzzweck geprüft werden.
- An Safe Harbor ausgerichtete Konfiguration: Kann die 18 Identifikatorkategorien adressieren; fachliche Bereitstellungsprüfung bleibt erforderlich, und die SDK-Nutzung belegt für sich keine HIPAA-Konformität.
- Unterstützte Ausführungspfade: CPU-, CUDA-, MLX-, Mobil-, Dienst- und Browseradapter hängen von Umgebung und Artefakt ab.
- Bereitstellungsschnittstellen: Python, Container, Dienste und Stapelabläufe erfordern Konfiguration und Validierung.
- SDK-Quellcode: unter der Apache-2.0 License veröffentlicht; Modell- und Datenbedingungen unterscheiden sich.
Auf unterstützter Apple-Hardware kann OpenMed MLX und OpenMedKit für lokale Verarbeitung nutzen, sobald die benötigten Artefakte vorliegen. Modellbezug und nutzerkonfigurierte entfernte Integrationen bleiben getrennte Netzwerkgrenzen.
// Add OpenMedKit to your app
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "2.0.0"),
]- MLX-Runtime für PII-Token-Klassifikation, die Privacy-Filter-Familie und experimentelle Zero-Shot-Aufgaben der GLiNER-Familie, mit CoreML-Fallback.
- Ein Modellname, jede Plattform: Auf Nicht-Apple-Hardware greifen MLX-Modellnamen automatisch auf den passenden PyTorch-Checkpoint zurück.
- Python auf Apple Silicon ebenfalls:
pip install --upgrade "openmed[mlx]".
Anleitungen: MLX-Backend · OpenMedKit (Swift) · CoreML-Export
flowchart LR
A["Klinischer Text"] --> B["OpenMed<br/>(Local-First)"]
B --> C["Medizinische Entitäten"]
B --> D["PII erkannt"]
B --> E["De-identifizierter Text"]
style B fill:#0D6E6E,stroke:#0A5656,stroke-width:2px,color:#ffffff
style C fill:#D6EBEB,stroke:#0D6E6E,color:#0E1116
style D fill:#F7DCD8,stroke:#C5453A,color:#0E1116
style E fill:#F5E27A,stroke:#A9A088,color:#0E1116
# Core + Hugging Face runtime (Linux, macOS, Windows; CPU or CUDA)
pip install --upgrade "openmed[hf]"
# Add the REST service
pip install --upgrade "openmed[hf,service]"
# Apple Silicon acceleration (MLX)
pip install --upgrade "openmed[mlx]"|
Python-API from openmed import analyze_text
analyze_text(
"Patient received 75mg "
"clopidogrel for NSTEMI.",
model_name=
"pharma_detection_superclinical",
) |
REST-Dienst uvicorn openmed.service.app:app \
--host 0.0.0.0 --port 8080
|
Batch from openmed import BatchProcessor
p = BatchProcessor(
model_name=
"disease_detection_superclinical",
group_entities=True,
)
p.process_texts([...]) |
Offline / air-gapped? Verweise model_name (oder model_id) auf ein lokales Verzeichnis, und OpenMed lädt es, ohne den Hugging Face Hub zu kontaktieren:
from openmed import OpenMedConfig, analyze_text
result = analyze_text(
"Patient presents with chronic myeloid leukemia and Type 2 diabetes.",
model_id="./models/OpenMed-NER-DiseaseDetect-SuperClinical-434M",
config=OpenMedConfig(device="cpu"),
)Ein kuratiertes Registry spezialisierter medizinischer NER-Modelle. Durchstöbere den vollständigen Katalog.
| Modell | Spezialisierung | Entitätstypen | Größe |
|---|---|---|---|
disease_detection_superclinical |
Krankheiten & Befunde | DISEASE, CONDITION, DIAGNOSIS | 434M |
pharma_detection_superclinical |
Arzneimittel & Medikation | DRUG, MEDICATION, TREATMENT | 434M |
pii_superclinical_large |
PII & De-Identifikation | NAME, DATE, SSN, PHONE, EMAIL, ADDRESS | 434M |
anatomy_detection_electramed |
Anatomie & Körperteile | ANATOMY, ORGAN, BODY_PART | 109M |
gene_detection_genecorpus |
Gene & Proteine | GENE, PROTEIN | 109M |
from openmed import extract_pii, deidentify
text = "Patient: John Doe, DOB: 01/15/1970, SSN: 123-45-6789"
# Extract PII with smart merging (prevents tokenization fragmentation)
result = extract_pii(text, model_name="pii_superclinical_large", use_smart_merging=True)
# De-identify with the method you need
deidentify(text, method="mask") # [NAME], [DATE]
deidentify(text, method="replace") # Faker-backed, locale-aware, format-preserving fakes
deidentify(text, method="hash") # Cryptographic hashing
deidentify(text, method="shift_dates", date_shift_days=180)- Intelligentes Entity-Merging hält
01/15/1970zusammen, statt es zu fragmentieren. - Faker-basierte Verschleierung mit benutzerdefinierten Anbietern für klinische IDs (CPF, CNPJ, BSN, NIR, Codice Fiscale, NIE, Aadhaar, Steuer-ID, NPI).
- HIPAA-Grenze: An Safe Harbor ausgerichtete Kategorien und konfigurierbare Schwellen sind Implementierungshilfen; eine fachliche Bereitstellungsprüfung bleibt erforderlich und die SDK-Nutzung allein belegt keine Konformität.
Vollständiges PII-Notebook · Intelligentes Merging · Anonymisierung
Privacy-Filter-Familie: drei Modellfamilien auf der OpenAI-Privacy-Filter-Architektur
Der Modellcode ist identisch (gpt-oss-artiger Sparse-MoE-Transformer mit lokaler Attention, Sink-Tokens, RoPE+YaRN, tiktoken-o200k_base-Tokenisierung); nur die Trainingsdaten unterscheiden sich. Alle nutzen dieselbe extract_pii() / deidentify()-API, nur das Argument model_name= ändert sich.
| Variante | PyTorch (CPU + CUDA) | MLX (Apple Silicon) | MLX 8-bit |
|---|---|---|---|
| OpenAI Privacy Filter | openai/privacy-filter |
OpenMed/privacy-filter-mlx |
…-mlx-8bit |
| Nemotron-PII fine-tune | OpenMed/privacy-filter-nemotron |
…-nemotron-mlx |
…-nemotron-mlx-8bit |
| OpenMed Multilingual | OpenMed/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 baseline
extract_pii(text, model_name="OpenMed/privacy-filter-nemotron") # same code, different weights
extract_pii(text, model_name="OpenMed/privacy-filter-mlx") # Apple Silicon (MLX)Auf Nicht-Apple-Silicon-Hosts werden MLX-Modellnamen automatisch durch den passenden PyTorch-Checkpoint ersetzt (mit einer einmaligen Warnung). Schreibe einen Modellnamen, führe ihn überall aus. Siehe Privacy-Filter-Architektur & Backend-Routing.
Extraktion und De-Identifikation in en, fr, de, it, es, nl, hi, te, pt, ar, ja und tr, insgesamt der registrierte PII-Modellkatalog.
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])"Beispiele pro Sprache anzeigen (Portugiesisch, Niederländisch, Hindi, Arabisch, Japanisch, Türkisch)
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)
hindi = extract_pii("रोगी: अनीता शर्मा, फोन: +91 9876543210, पता: नई दिल्ली 110001", lang="hi", use_smart_merging=True)
arabic = extract_pii("المريضة ليلى حسن، الهاتف +20 10 1234 5678، الرقم القومي 29801011234567.", lang="ar", use_smart_merging=True)
japanese = extract_pii("患者 佐藤 花子、電話 +81 90 1234 5678、マイナンバー 1234 5678 9012.", lang="ja", use_smart_merging=True)
turkish = extract_pii("Hasta Ayşe Yılmaz, telefon +90 532 123 45 67, TCKN 10000000146.", lang="tr", use_smart_merging=True)
for r in (portuguese, dutch, hindi, arabic, japanese, turkish):
print([(e.label, e.text) for e in r.entities])Ein Docker-freundlicher FastAPI-Dienst mit Request-Validierung, gemeinsamem Pipeline-Preload und einheitlichen Fehler-Envelopes.
pip install --upgrade "openmed[hf,service]"
uvicorn openmed.service.app:app --host 0.0.0.0 --port 8080
# or with Docker
docker build -t openmed:local .
docker run --rm -p 8080:8080 -e OPENMED_PROFILE=prod openmed:localcurl -X POST http://127.0.0.1:8080/pii/extract \
-H "Content-Type: application/json" \
-d '{"text":"Paciente: Maria Garcia, DNI: 12345678Z","lang":"es"}'Siehe die vollständige REST-Dienst-Anleitung.
Vollständige Anleitungen unter openmed.life/docs.
| Erste Schritte | Text analysieren | Modell-Registry |
| PII-Erkennungsleitfaden | Anonymisierung | Batch-Verarbeitung |
| Konfigurationsprofile | REST-Dienst | MLX-Backend |
Der Wächter von OpenMed ist eine flauschige Perserkatze, gestaltet als kleiner Avicenna (Ibn Sina), der große persische Arzt, dessen Kanon der Medizin rund 600 Jahre lang das medizinische Standardwerk der Welt war. Er wacht über das aufgeschlagene Buch des medizinischen Wissens, in einer Palette rund um persisches Türkis (fīrūza): ein Local-First-Wächter für deine privatesten Daten.
Beiträge willkommen: Bug-Reports, Feature-Wünsche und PRs.
- Ein Issue eröffnen
- Übersetzungen willkommen: Hilf mit, die README in anderen Sprachen zu vervollständigen, die oben im Sprachumschalter verlinkt sind.
OpenMed baut auf hervorragender Open-Source-Arbeit auf. Besonderer Dank an OpenAI (die Privacy-Filter-Architektur), NVIDIA (den Nemotron-PII-Datensatz), Hugging Face (transformers und das Modell-Ökosystem), Apple (MLX) und die Maintainer von Faker.
Der Quellcode des OpenMed SDK wird unter der Apache-2.0 License veröffentlicht.
Wenn OpenMed für deine Forschung nützlich ist, zitiere es bitte:
@misc{panahi2025openmedneropensourcedomainadapted,
title={OpenMed NER: Open-Source, Domain-Adapted State-of-the-Art Transformers for Biomedical NER Across 12 Public Datasets},
author={Maziyar Panahi},
year={2025},
eprint={2508.01630},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2508.01630},
}Wenn OpenMed dir nützlich ist, hilft ein Stern anderen, es zu entdecken.
4,700+ GitHub stars · 29 Jul 2026 snapshot
Erstellt vom OpenMed-Team