Skip to content

Latest commit

 

History

History
486 lines (328 loc) · 18.8 KB

File metadata and controls

486 lines (328 loc) · 18.8 KB
لافتة README من OpenMed مع تميمة القط والشعار النصي بأحرف صغيرة وعلامة Open Cross، وتعرض النص ذكاء اصطناعي مفتوح المصدر للرعاية الصحية، وأكثر من 340 مليون تنزيل، وأكثر من 10 ملايين تثبيت

بياناتك. نموذجك. عتادك.

حوِّل النص السريري إلى رؤى منظَّمة ومجرَّدة من الهوية على عتاد تتحكم به.
ينفّذ وقت التشغيل المحلي الأساسي في 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 · فارسی


شاهده أثناء العمل

OpenMed يزيل معرّفات الهوية من تقرير خروج سريري في الوقت الفعلي
إزالة معرّفات الهوية في الوقت الفعلي: يقوم Nemotron Privacy Filter بإخفاء الأسماء والعناوين والمعرّفات وبيانات الفوترة من تقرير خروج سريري، بالكامل على الجهاز. (جميع القيم المعروضة اصطناعية.)

مثال في 30 ثانية

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؟

اعتبار النشر حدود OpenMed SDK
وقت التشغيل الأساسي يعالج محليًا بعد توفر العناصر المطلوبة
مسارات الشبكة الاختيارية قد تستخدم التنزيلات والموائمات البعيدة ومسارات القياس والتكاملات الشبكة
التحقق يتحقق مالك النشر من شروط النماذج والبيانات وسلوك الخصوصية والملاءمة السريرية
الواجهات Python وSwift وAndroid والمتصفح والخدمات حيث تكون مدعومة
  • فهرس نماذج منسّق: تحقّق من كل نموذج وترخيص ومجموعة بيانات لحالة الاستخدام.
  • تهيئة متوافقة مع فئات Safe Harbor: يمكنها استهداف فئات المعرّفات الثماني عشرة؛ تبقى مراجعة خبير للنشر مطلوبة، واستخدام SDK لا يثبت بحد ذاته الامتثال لـ HIPAA.
  • مسارات تنفيذ مدعومة: تختلف محوّلات CPU وCUDA وMLX والهاتف والخدمة والمتصفح حسب البيئة والعنصر.
  • واجهات النشر: تتطلب Python والحاويات والخدمات ومسارات الدُفعات تهيئةً وتحققًا.
  • مصدر SDK: منشور بموجب Apache-2.0 License؛ وتختلف شروط النماذج ومجموعات البيانات.

على الجهاز، على Apple: Swift وMLX وiOS

على عتاد 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
Loading

البدء السريع

# 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

GET /health POST /analyze POST /pii/extract POST /pii/deidentify

دفعي

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

الخصوصية: كشف PII وإزالة الهوية

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 وحده الامتثال.

دفتر PII الكامل · الدمج الذكي · إخفاء الهوية

عائلة 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 وتوجيه الخلفية.


PII متعدد اللغات (34 مسارًا مدعومًا؛ 33 مدعومًا بالنماذج)

الاستخراج وإزالة الهوية في 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])

REST API

خدمة 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:local
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"}'

التوثيق

الأدلة الكاملة على openmed.life/docs.

البدء تحليل النص سجل النماذج
دليل كشف PII إخفاء الهوية المعالجة الدفعية
ملفات الإعداد خدمة REST خلفية MLX

تعرّف على التميمة

تميمة OpenMed

حارس 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},
}

سجل النجوم

إذا كان OpenMed مفيدًا لك، فإن نجمة تساعد الآخرين على اكتشافه.

4,700+ GitHub stars · 29 Jul 2026 snapshot


صُنع بواسطة فريق OpenMed

الموقع · التوثيق · X / تويتر · LinkedIn