حوِّل النص السريري إلى رؤى منظَّمة ومجرَّدة من الهوية على عتاد تتحكم به.
ينفّذ وقت التشغيل المحلي الأساسي في OpenMed الاستخراج وإزالة الهوية بعد توفر عناصر النماذج المطلوبة. وقد تستخدم تنزيلات النماذج وموائمات المزوّدات البعيدة والمسارات المفعّل فيها القياس عن بُعد والتكاملات التي يهيئها المستخدم الشبكة؛ راجع شروط كل نموذج ومجموعة بيانات.
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
تشغيل محلي أولاً · 33 لغة PII مدعومة بالنماذج · Apache-2.0 SDK
English · 简体中文 · Español · Français · Deutsch · Italiano · Português · Nederlands · العربية · हिन्दी · తెలుగు · 日本語 · Türkçe · فارسی
إزالة معرّفات الهوية في الوقت الفعلي: يقوم Nemotron Privacy Filter بإخفاء الأسماء والعناوين والمعرّفات وبيانات الفوترة من تقرير خروج سريري، بالكامل على الجهاز. (جميع القيم المعروضة اصطناعية.)
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.95نموذج NER سريري يستخدم وقت التشغيل المحلي بعد توفر العناصر المطلوبة.
| اعتبار النشر | حدود OpenMed SDK |
|---|---|
| وقت التشغيل الأساسي | يعالج محليًا بعد توفر العناصر المطلوبة |
| مسارات الشبكة الاختيارية | قد تستخدم التنزيلات والموائمات البعيدة ومسارات القياس والتكاملات الشبكة |
| التحقق | يتحقق مالك النشر من شروط النماذج والبيانات وسلوك الخصوصية والملاءمة السريرية |
| الواجهات | Python وSwift وAndroid والمتصفح والخدمات حيث تكون مدعومة |
- فهرس نماذج منسّق: تحقّق من كل نموذج وترخيص ومجموعة بيانات لحالة الاستخدام.
- تهيئة متوافقة مع فئات Safe Harbor: يمكنها استهداف فئات المعرّفات الثماني عشرة؛ تبقى مراجعة خبير للنشر مطلوبة، واستخدام SDK لا يثبت بحد ذاته الامتثال لـ HIPAA.
- مسارات تنفيذ مدعومة: تختلف محوّلات CPU وCUDA وMLX والهاتف والخدمة والمتصفح حسب البيئة والعنصر.
- واجهات النشر: تتطلب Python والحاويات والخدمات ومسارات الدُفعات تهيئةً وتحققًا.
- مصدر SDK: منشور بموجب Apache-2.0 License؛ وتختلف شروط النماذج ومجموعات البيانات.
على عتاد Apple المدعوم، يمكن لـ OpenMed استخدام MLX و**OpenMedKit** للمعالجة المحلية بعد توفر العناصر المطلوبة. ويظل الحصول على النماذج وأي تكاملات بعيدة يهيئها المستخدم حدودًا شبكية منفصلة.
// Add OpenMedKit to your app
dependencies: [
.package(url: "https://github.com/maziyarpanahi/openmed.git", from: "2.0.0"),
]- زمن تشغيل MLX لتصنيف رموز PII، وعائلة Privacy Filter، ومهام zero-shot التجريبية لعائلة GLiNER، مع مسار احتياطي عبر CoreML.
- اسم نموذج واحد، كل المنصات: على العتاد غير التابع لـ Apple، تعود أسماء نماذج MLX تلقائيًا إلى نقطة تحقق PyTorch المقابلة.
- Python على Apple Silicon أيضًا:
pip install --upgrade "openmed[mlx]".
الأدلة: خلفية MLX · OpenMedKit (Swift) · تصدير CoreML
flowchart LR
A["نص سريري"] --> B["OpenMed<br/>(محلي أولاً)"]
B --> C["كيانات طبية"]
B --> D["تم كشف PII"]
B --> E["نص مُزال الهوية"]
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 from openmed import analyze_text
analyze_text(
"Patient received 75mg "
"clopidogrel for NSTEMI.",
model_name=
"pharma_detection_superclinical",
) |
خدمة REST uvicorn openmed.service.app:app \
--host 0.0.0.0 --port 8080
|
دفعي from openmed import BatchProcessor
p = BatchProcessor(
model_name=
"disease_detection_superclinical",
group_entities=True,
)
p.process_texts([...]) |
دون اتصال / معزول؟ وجِّه 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.",
model_id="./models/OpenMed-NER-DiseaseDetect-SuperClinical-434M",
config=OpenMedConfig(device="cpu"),
)سجل منتقى من نماذج NER الطبية المتخصصة، تصفّح الكتالوج الكامل.
| النموذج | التخصص | أنواع الكيانات | الحجم |
|---|---|---|---|
disease_detection_superclinical |
الأمراض والحالات | DISEASE, CONDITION, DIAGNOSIS | 434M |
pharma_detection_superclinical |
الأدوية والعلاجات | DRUG, MEDICATION, TREATMENT | 434M |
pii_superclinical_large |
PII وإزالة الهوية | NAME, DATE, SSN, PHONE, EMAIL, ADDRESS | 434M |
anatomy_detection_electramed |
التشريح وأجزاء الجسم | ANATOMY, ORGAN, BODY_PART | 109M |
gene_detection_genecorpus |
الجينات والبروتينات | 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)- الدمج الذكي للكيانات يبقي
01/15/1970كاملاً بدلاً من تجزئته. - تمويه قائم على Faker مع موفّرين مخصّصين لمعرّفات سريرية (CPF، CNPJ، BSN، NIR، Codice Fiscale، NIE، Aadhaar، Steuer-ID، NPI).
- حدود HIPAA: فئات متوافقة مع Safe Harbor وعتبات قابلة للتهيئة هي أدوات مساعدة للتنفيذ؛ تبقى مراجعة خبير للنشر مطلوبة ولا يثبت استخدام SDK وحده الامتثال.
عائلة Privacy Filter: ثلاث عائلات نماذج على معمارية OpenAI Privacy Filter
شِفرة النموذج واحدة (محوّل Sparse-MoE بأسلوب gpt-oss مع انتباه محلي، ورموز sink، وRoPE+YaRN، وتجزئة tiktoken o200k_base)؛ تختلف بيانات التدريب فقط. تمرّ جميعها عبر نفس واجهة extract_pii() / deidentify()، يتغيّر فقط الوسيط model_name=.
| المتغيّر | 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)على المضيفات غير العاملة بـ Apple Silicon، تُستبدل أسماء نماذج MLX تلقائيًا بنقطة تحقق PyTorch المقابلة (مع تحذير لمرة واحدة): اكتب اسم نموذج واحد، وشغّله في أي مكان. راجع معمارية Privacy Filter وتوجيه الخلفية.
الاستخراج وإزالة الهوية في en، fr، de، it، es، nl، hi، te، pt، ar، ja وtr، فهرس نماذج 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)
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])خدمة FastAPI صديقة لـ Docker، مع التحقق من الطلبات، والتحميل المسبق لخط أنابيب مشترك، وأغلفة أخطاء موحّدة.
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"}'راجع دليل خدمة REST الكامل.
الأدلة الكاملة على openmed.life/docs.
| البدء | تحليل النص | سجل النماذج |
| دليل كشف PII | إخفاء الهوية | المعالجة الدفعية |
| ملفات الإعداد | خدمة REST | خلفية MLX |
حارس OpenMed قطة فارسية كثيفة الفرو في هيئة ابن سينا (Avicenna) الصغير، الطبيب الفارسي العظيم الذي ظل كتابه «القانون في الطب» المرجع الطبي القياسي في العالم نحو 600 عام. يحرس كتاب المعرفة الطبية المفتوح، بلوحة ألوان مستوحاة من الفيروز الفارسي (fīrūza): حارس محلي أولاً لأكثر بياناتك خصوصية.
المساهمات مُرحَّب بها: تقارير الأخطاء وطلبات الميزات وطلبات السحب (PR).
- افتح مشكلة (issue)
- الترجمات مُرحَّب بها: ساعد في إكمال ملفات README بلغات أخرى المرتبطة في مبدّل اللغات بالأعلى.
يعتمد OpenMed على أعمال مفتوحة المصدر ممتازة: شكر خاص لـ OpenAI (معمارية Privacy Filter)، وNVIDIA (مجموعة بيانات Nemotron PII)، وHugging Face (transformers ومنظومة النماذج)، وApple (MLX)، ومشرفي Faker.
يُنشر الكود المصدري لحزمة OpenMed SDK بموجب Apache-2.0 License.
إذا كان OpenMed مفيدًا في بحثك، فيرجى الاستشهاد به:
@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},
}4,700+ GitHub stars · 29 Jul 2026 snapshot