本项目是一个专门用于疾病实体识别的模型,能够从NCBI数据集中精准识别疾病实体,为生物医学领域的研究和临床应用提供有力支持。

📋 模型概述
该模型是一款经过微调的先进Transformer模型,专为疾病实体识别而设计,能够从NCBI数据集中精准识别疾病实体,达到企业级的识别准确率。此专业模型擅长从临床文本、研究论文和医疗保健文档中识别和提取生物医学实体,可应用于药物相互作用检测、从患者记录中提取药物信息、不良事件监测、药物发现的文献挖掘以及生物医学知识图谱构建等领域,为临床和研究应用提供可靠的支持。
✨ 主要特性
- 高精度:针对生物医学实体识别进行了优化。
- 特定领域:在精心策划的NCBI_DISEASE数据集上进行训练。
- 可用于生产:在临床基准测试中得到验证。
- 易于集成:与Hugging Face Transformers生态系统兼容。
🏷️ 支持的实体类型
该模型可以识别和分类以下生物医学实体:
📦 安装指南
pip install transformers torch
💻 使用示例
基础用法
from transformers import pipeline
model_name = "OpenMed/OpenMed-NER-PathologyDetect-PubMed-109M"
medical_ner_pipeline = pipeline(
model=model_name,
aggregation_strategy="simple"
)
text = "Early detection of breast cancer improves survival rates."
entities = medical_ner_pipeline(text)
print(entities)
token = entities[0]
print(text[token["start"] : token["end"]])
⚠️ 重要提示
aggregation_strategy
参数定义了如何将标记预测分组为实体。详细解释请参考 Hugging Face文档。
💡 使用建议
以下是可用策略的总结:
none
:返回原始标记预测,不进行任何聚合。
simple
:将具有相同实体类型的相邻标记分组(例如,B-LOC
后跟 I-LOC
)。
first
:对于基于单词的模型,如果一个单词内的标记具有不同的实体标签,则将第一个标记的标签分配给整个单词。
average
:对于基于单词的模型,此策略对一个单词内的标记分数进行平均,并应用得分最高的标签。
max
:对于基于单词的模型,将一个单词内得分最高的标记的实体标签分配给整个单词。
高级用法 - 批量处理
texts = [
"Early detection of breast cancer improves survival rates.",
"The patient exhibited symptoms consistent with Parkinson's disease.",
"Genetic testing revealed predisposition to Huntington's disease.",
"Malaria is a life-threatening disease caused by parasites transmitted through mosquito bites.",
"Multiple sclerosis affects the central nervous system, leading to a range of symptoms.",
]
results = medical_ner_pipeline(texts, batch_size=8)
for i, entities in enumerate(results):
print(f"文本 {i+1} 的实体:")
for entity in entities:
print(f" - {entity['word']} ({entity['entity_group']}): {entity['score']:.4f}")
高级用法 - 大型数据集处理
from transformers.pipelines.pt_utils import KeyDataset
from datasets import Dataset
import pandas as pd
from datasets import load_dataset
medical_dataset = load_dataset("BI55/MedText", split="train[:100]")
data = pd.DataFrame({"text": medical_dataset["Completion"]})
dataset = Dataset.from_pandas(data)
batch_size = 16
results = []
for out in medical_ner_pipeline(KeyDataset(dataset, "text"), batch_size=batch_size):
results.extend(out)
print(f"使用批量处理处理了 {len(results)} 个文本")
高级用法 - 性能优化
medical_ner_pipeline = pipeline(
model=model_name,
aggregation_strategy="simple",
device=0
)
for batch_start in range(0, len(texts), batch_size):
batch = texts[batch_start:batch_start + batch_size]
batch_results = medical_ner_pipeline(batch, batch_size=len(batch))
results.extend(batch_results)
💡 使用建议
批量大小指南:
- CPU:从batch_size=1 - 4开始。
- 单GPU:根据GPU内存尝试batch_size=8 - 32。
- 高端GPU:可以处理batch_size=64或更高。
- 监控GPU利用率,以找到适合你硬件的最佳批量大小。
📚 详细文档
数据集信息
属性 |
详情 |
数据集 |
NCBI_DISEASE |
描述 |
疾病实体识别 - 来自NCBI数据集的疾病实体 |
训练详情
- 基础模型:BiomedNLP-BiomedBERT-base-uncased-abstract
- 训练框架:Hugging Face Transformers
- 优化方法:使用学习率调度的AdamW优化器
- 验证方式:在保留的测试集上进行交叉验证
模型架构
- 基础架构:BiomedNLP-BiomedBERT-base-uncased-abstract
- 任务:标记分类(命名实体识别)
- 标签:特定于数据集的实体类型
- 输入:分词后的生物医学文本
- 输出:BIO标签的实体预测
用例
该模型特别适用于以下场景:
- 临床文本挖掘:从医疗记录中提取实体。
- 生物医学研究:处理科学文献。
- 药物发现:识别化合物和药物。
- 医疗保健分析:分析患者数据和结果。
- 学术研究:支持生物医学NLP研究。
📊 性能指标
当前模型性能
- F1分数:
0.91
- 精确率:
0.89
- 召回率:
0.93
- 准确率:
0.98
🏆 在NCBI_DISEASE数据集上的对比性能
排名基于在该数据集上训练的所有模型的F1分数性能。

图:OpenMed(开源)与最新SOTA(闭源)在生物医学NER数据集上的性能比较。
📄 许可证
本项目采用Apache License 2.0许可协议。详情请见 LICENSE。
🤝 贡献
我们欢迎各种形式的贡献!无论你有想法、功能请求,还是想加入我们推动开源医疗AI发展的使命,我们都很乐意听取你的意见。
在Hugging Face 🤗 上关注 OpenMed Org,并点击“Watch”以获取我们的最新版本和开发动态。