🚀 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_)
高級用法
import edsnlp
nlp = edsnlp.load("artifacts/model - last")
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 |
MAIL |
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基金會 對本項目的資助。