模型概述
模型特點
模型能力
使用案例
🚀 EDS-Pseudo
本項目旨在檢測文檔中的識別實體,主要在巴黎公共醫院集團(AP - HP)臨床數據倉庫(EDS)的臨床報告上進行了測試。該項目構建了一個混合模型(基於規則 + 深度學習),可用於檢測文檔中的特定實體。
🚀 快速開始
下載公開預訓練模型
公開的預訓練模型可在HuggingFace模型中心獲取,地址為 [AP - HP/eds - pseudo - public](https://hf.co/AP - HP/eds - pseudo - public),它是在合成數據上進行訓練的(詳見[generate_dataset.py
](https://github.com/aphp/eds - pseudo/blob/main/scripts/generate_dataset.py))。你也可以直接在 [演示](https://eds - pseudo - public.streamlit.app/) 中進行測試。
- 安裝最新版本的edsnlp
pip install "edsnlp[ml]" -U
- 訪問 [AP - HP/eds - pseudo - public](https://hf.co/AP - HP/eds - pseudo - public) 獲取模型。
- 在 https://huggingface.co/settings/tokens?new_token=true 創建並複製一個具有 "READ" 權限的HuggingFace令牌。
- 在你的機器上註冊該令牌(僅需執行一次)
import huggingface_hub huggingface_hub.login(token=YOUR_TOKEN, new_session=False, add_to_git_credential=True)
- 加載模型
import edsnlp nlp = edsnlp.load("AP - HP/eds - pseudo - public", auto_update=True) doc = nlp( "En 2015, M. Charles - François - Bienvenu " "Myriel était évêque de Digne. C’était un vieillard " "d’environ soixante - quinze ans ; il occupait le " "siège de Digne depuis 2006." ) for ent in doc.ents: print(ent, ent.label_, str(ent._.date))
若要使用一個或多個GPU在多個文檔上應用該模型,請參考 [edsnlp](https://aphp.github.io/edsnlp/latest/tutorials/multiple - texts/) 的文檔。
✨ 主要特性
- 基於edsnlp構建混合模型(基於規則 + 深度學習),提供規則和訓練配方。
- 可檢測多種實體,包括地址、日期、患者標識符等。
- 提供虛構模板和生成合成數據集的腳本。
📦 安裝指南
復現安裝
如果你想復現eds - pseudo的訓練過程或為其開發做出貢獻,應先克隆該項目:
git clone https://github.com/aphp/eds - pseudo.git
cd eds - pseudo
然後安裝依賴項。我們建議在項目中固定庫的版本,或使用像 [Poetry](https://python - poetry.org/) 這樣嚴格的包管理器。
poetry install
💻 使用示例
基礎用法
import edsnlp
nlp = edsnlp.blank("eds")
# 一些文本清理
nlp.add_pipe("eds.normalizer")
# 各種簡單規則
nlp.add_pipe(
"eds_pseudo.simple_rules",
config={"pattern_keys": ["TEL", "MAIL", "SECU", "PERSON"]},
)
# 地址檢測
nlp.add_pipe("eds_pseudo.addresses")
# 日期檢測
nlp.add_pipe("eds_pseudo.dates")
# 上下文規則(需要一個關於患者信息的字典)
nlp.add_pipe("eds_pseudo.context")
# 將其應用於文本
doc = nlp(
"En 2015, M. Charles - François - Bienvenu "
"Myriel était évêque de Digne. C’était un vieillard "
"d’environ soixante - quinze ans ; il occupait le "
"siège de Digne depuis 2006."
)
for ent in doc.ents:
print(ent, ent.label_)
# 2015 DATE
# Charles - François - Bienvenu NOM
# Myriel PRENOM
# 2006 DATE
高級用法
import edsnlp
# 直接從模型路徑加載
nlp = edsnlp.load("artifacts/model - last")
# 或者從whl文件加載
import eds_pseudo_aphp
nlp = eds_pseudo_aphp.load()
📚 詳細文檔
訪問 [文檔](https://aphp.github.io/eds - pseudo/) 獲取更多信息!
🔧 技術細節
該模型是基於edsnlp構建的混合模型,結合了基於規則和深度學習的方法。提供了規則文件([eds - pseudo/pipes
](https://github.com/aphp/eds - pseudo/tree/main/eds_pseudo/pipes))和訓練腳本([train.py
](https://github.com/aphp/eds - pseudo/blob/main/scripts/train.py))。同時,還提供了虛構模板([templates.txt
](https://github.com/aphp/eds - pseudo/blob/main/data/templates.txt))和生成合成數據集的腳本([generate_dataset.py
](https://github.com/aphp/eds - pseudo/blob/main/scripts/generate_dataset.py))。
📄 許可證
本項目採用BSD 3條款許可證。
📊 模型指標
AP - HP Pseudo測試令牌得分 | 精確率 | 召回率 | F1值 | 編輯召回率 | 完整編輯準確率 |
---|---|---|---|---|---|
ADRESSE | 98.2 | 96.9 | 97.6 | 97.6 | 96.7 |
DATE | 99 | 98.4 | 98.7 | 98.8 | 85.9 |
DATE_NAISSANCE | 97.5 | 96.9 | 97.2 | 99.3 | 99.4 |
IPP | 91.9 | 90.8 | 91.3 | 98.5 | 99.3 |
96.1 | 99.8 | 97.9 | 99.8 | 99.7 | |
NDA | 92.1 | 83.5 | 87.6 | 87.4 | 97.2 |
NOM | 94.4 | 95.3 | 94.8 | 98.2 | 89.5 |
PRENOM | 93.5 | 96.6 | 95 | 99 | 93.2 |
SECU | 88.3 | 100 | 93.8 | 100 | 100 |
TEL | 97.5 | 99.9 | 98.7 | 99.9 | 99.6 |
VILLE | 96.7 | 93.8 | 95.2 | 95.1 | 91.1 |
ZIP | 96.8 | 100 | 98.3 | 100 | 100 |
micro | 97 | 97.8 | 97.4 | 98.8 | 63.1 |
📖 檢測實體列表
標籤 | 描述 |
---|---|
ADRESSE |
街道地址,例如 33 boulevard de Picpus |
DATE |
除出生日期外的任何絕對日期 |
DATE_NAISSANCE |
出生日期 |
HOPITAL |
醫院名稱,例如 Hôpital Rothschild |
IPP |
AP - HP內部患者標識符,以數字形式顯示 |
MAIL |
電子郵件地址 |
NDA |
AP - HP內部就診標識符,以數字形式顯示 |
NOM |
任何姓氏(患者、醫生、第三方) |
PRENOM |
任何名字(患者、醫生等) |
SECU |
社會保險號碼 |
TEL |
任何電話號碼 |
VILLE |
任何城市 |
ZIP |
任何郵政編碼 |
📝 訓練說明
在訓練模型之前,你應該更新 [configs/config.cfg](https://github.com/aphp/eds - pseudo/blob/main/configs/config.cfg) 和 [pyproject.toml](https://github.com/aphp/eds - pseudo/blob/main/pyproject.toml) 文件以滿足你的需求。
將你的數據放在 data/dataset
文件夾中(或者編輯 configs/config.cfg
文件中的路徑,使其指向 data/gen_dataset/train.jsonl
)。
然後,運行訓練腳本
python scripts/train.py --config configs/config.cfg --seed 43
這將訓練一個模型並將其保存到 artifacts/model - last
中。你可以使用以下命令在測試集(默認為 data/dataset/test.jsonl
)上評估它:
python scripts/evaluate.py --config configs/config.cfg
若要打包模型,運行:
python scripts/package.py
這將創建一個 dist/eds - pseudo - aphp - ***.whl
文件,你可以使用 pip install dist/eds - pseudo - aphp - ***
進行安裝。
📄 引用說明
請在以下鏈接找到我們的出版物:https://doi.org/mkfv。 如果你使用EDS - Pseudo,請按以下方式引用我們:
@article{eds_pseudo,
title={Development and validation of a natural language processing algorithm to pseudonymize documents in the context of a clinical data warehouse},
author={Tannier, Xavier and Wajsb{\"u}rt, Perceval and Calliger, Alice and Dura, Basile and Mouchet, Alexandre and Hilka, Martin and Bey, Romain},
journal={Methods of Information in Medicine},
year={2024},
publisher={Georg Thieme Verlag KG}
}
🙏 致謝
我們要感謝 巴黎公共醫院集團 和 AP - HP基金會 對本項目的資助。








