Skip to content

Latest commit

 

History

History
488 lines (329 loc) · 19.7 KB

File metadata and controls

488 lines (329 loc) · 19.7 KB
بنر README اپن‌مد با نماد گربه، نوشتار نشان با حروف کوچک، Open Cross و متن هوش مصنوعی متن‌باز سلامت، بیش از ۳۴۰ میلیون دانلود و بیش از ۱۰ میلیون نصب

دادهٔ شما. مدلِ شما. سخت‌افزارِ شما.

متن بالینی را روی سخت‌افزار تحت کنترل خود به بینش ساختارمند و حذف‌هویت‌شده تبدیل کنید.
زمان اجرای محلی اصلی 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 · فارسی


نمایشِ زنده

حذف بلادرنگِ PII از یک برگهٔ ترخیص بالینی توسط OpenMed
حذف بلادرنگِ اطلاعات شناسایی‌کننده: فیلترِ حریمِ خصوصیِ Nemotron در حال پنهان‌سازیِ نام‌ها، نشانی‌ها، شناسه‌ها و اطلاعات صورتحساب از یک برگهٔ ترخیص بالینی، کاملاً روی دستگاه. (همهٔ مقادیر نمایش‌داده‌شده ساختگی‌اند.)

مثالِ 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.
  • یک نامِ مدل، همهٔ پلتفرم‌ها: نام‌های مدلِ MLX روی سخت‌افزارِ غیر‌Apple به‌طور خودکار به نقطه‌بازرسیِ متناظرِ PyTorch بازمی‌گردند.
  • پایتون روی 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]"

API پایتون

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)، فقط دادهٔ آموزشی متفاوت است. همه از طریقِ همان APIِ extract_pii() / deidentify() کار می‌کنند. تنها آرگومانِ model_name= تغییر می‌کند.

گونه PyTorch (CPU + CUDA) MLX (Apple Silicon) MLX ۸-بیتی
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"}'

راهنمای کاملِ سرویس REST را ببینید.


مستندات

راهنماهای کامل در openmed.life/docs.

شروع به کار تحلیلِ متن رجیستریِ مدل
راهنمای تشخیصِ PII ناشناس‌سازی پردازشِ دسته‌ای
پروفایل‌های پیکربندی سرویس REST بک‌اندِ MLX

با نمادِ ما آشنا شوید

نمادِ OpenMed

نگهبانِ OpenMed یک گربهٔ ایرانیِ پشمالوست که به‌شکلِ بوعلی سینا (ابن‌سینا) درآمده، پزشکِ بزرگِ ایرانی که کتابِ «قانون در طب» او نزدیک به 600 سال متنِ پزشکیِ مرجعِ جهان بود. او نگهبانِ کتابِ گشودهٔ دانشِ پزشکی است، با پالتی برگرفته از فیروزهٔ ایرانی: نگهبانی محلی‌محور برای خصوصی‌ترین داده‌های شما.



مشارکت

از مشارکت‌ها استقبال می‌کنیم: گزارشِ اشکال، درخواستِ ویژگی و Pull Requestها.

  • ثبتِ یک issue
  • ترجمه‌ها پذیرفته می‌شوند: به تکمیلِ README‌های زبان‌های دیگر (در سوییچرِ بالای صفحه) کمک کنید.

سپاس‌گزاری

OpenMed بر پایهٔ کارهای عالیِ متن‌باز ساخته شده، با سپاسِ ویژه از OpenAI (معماریِ Privacy FilterNVIDIA (مجموعه‌دادهٔ Nemotron PIIHugging 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 / توییتر · لینکدین