模型简介
模型特点
模型能力
使用案例
🚀 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基金会 对本项目的资助。








