Skip to content

Latest commit

 

History

History
409 lines (290 loc) · 17.7 KB

File metadata and controls

409 lines (290 loc) · 17.7 KB
猫のマスコット、小文字のワードマーク、Open Cross、オープンソースのヘルスケア AI・3億4,000万回以上のダウンロード・1,000万回以上のインストールという文字を配した OpenMed README バナー

あなたのデータ。あなたのモデル。あなたのハードウェア。

管理下のハードウェアで、臨床テキストを構造化・非識別化されたインサイトに変換します。
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

ローカルファーストのランタイム  ·  モデル対応 PII 言語 33 種  ·  Apache-2.0 SDK

English · 简体中文 · Español · Français · Deutsch · Italiano · Português · Nederlands · العربية · हिन्दी · తెలుగు · 日本語 · Türkçe · فارسی


実際の動作

OpenMed が臨床退院サマリーの PII をリアルタイムで非識別化
リアルタイムの PII 非識別化:Nemotron Privacy Filter が臨床退院サマリーの氏名・住所・ID・請求データをオンデバイスでマスキングします。(表示されている値はすべて合成データです。)

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 に沿った設定:18 の識別子カテゴリを対象にできますが、専門家による導入レビューが必要です。SDK の利用だけで HIPAA 準拠を示すものではありません。
  • 対応する実行経路:CPU、CUDA、MLX、モバイル、サービス、ブラウザのアダプターは環境と成果物によって異なります。
  • 導入インターフェース:Python、コンテナ、サービス、バッチ処理には設定と検証が必要です。
  • SDK ソース:Apache-2.0 License で公開。モデルとデータセットの条件は異なります。

オンデバイス、Apple 上で:Swift、MLX、iOS

対応する Apple ハードウェアでは、必要な成果物が利用可能になった後、OpenMed は MLXOpenMedKit を使ってローカル処理できます。モデル取得とユーザー設定のリモート統合は別のネットワーク境界です。

// Add OpenMedKit to your app
dependencies: [
    .package(url: "https://github.com/maziyarpanahi/openmed.git", from: "2.0.0"),
]
  • MLX ランタイム:PII トークン分類、Privacy Filter ファミリー、実験的な GLiNER ファミリーの zero-shot タスクに対応(CoreML フォールバック経路あり)。
  • 1 つのモデル名であらゆるプラットフォーム:Apple 以外のハードウェアでは、MLX のモデル名は対応する PyTorch チェックポイントに自動的にフォールバックします。
  • Apple Silicon 上の Python も対応: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 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 ベースの難読化:臨床 ID 用のカスタムプロバイダー(CPF、CNPJ、BSN、NIR、Codice Fiscale、NIE、Aadhaar、Steuer-ID、NPI)を内蔵。
  • HIPAA の境界:Safe Harbor に沿ったカテゴリと設定可能なしきい値は実装支援です。専門家による導入レビューが必要であり、SDK の利用だけで準拠を示すものではありません。

完全な PII ノートブック · スマート統合 · 匿名化

Privacy Filter ファミリー:OpenAI Privacy Filter アーキテクチャ上の 3 つのモデルファミリー

モデルのコードは同一です(局所注意・sink トークン・RoPE+YaRN・tiktoken o200k_base トークナイザを備えた gpt-oss 風スパース MoE Transformer)。異なるのは学習データのみです。すべて同一の extract_pii() / deidentify() API を経由します。変更するのは 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 チェックポイントに自動的に置き換えられます(一度だけ警告が表示されます)。モデル名を 1 つ書けば、どこでも動作します。Privacy Filter アーキテクチャとバックエンドのルーティングを参照してください。


多言語 PII(対応ルート 34、モデル対応 33)

enfrdeitesnlhiteptarjatr での抽出と非識別化:合計 登録済み 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

リクエスト検証、共有パイプラインのプリロード、統一されたエラーエンベロープを備えた、Docker フレンドリーな FastAPI サービス。

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 の守護者は、小さな**アヴィセンナ(イブン・スィーナー、Avicenna / Ibn Sina)に扮したふわふわのペルシャ 猫です。その『医学典範』(Canon of Medicine)は約 600 年にわたり世界の標準的な医学教科書でした。開かれた 医学知識の書を見守り、配色はペルシャ・ターコイズ(fīrūza)**にちなんでいます。あなたの最もプライベートな データを守る、ローカルファーストの守護者です。



コントリビュート

コントリビューション歓迎:バグ報告、機能リクエスト、PR いずれも歓迎します。

  • Issue を開く
  • 翻訳歓迎:上部の言語スイッチャーにリンクされた他言語の README の完成にご協力ください。

クレジット

OpenMed は優れたオープンソースの成果の上に成り立っています。特に OpenAIPrivacy Filter アーキテクチャ)、NVIDIANemotron PII データセット)、Hugging Facetransformers とモデルエコシステム)、AppleMLX)、そして 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 / Twitter · LinkedIn