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

🚀 快速开始
📦 安装指南
pip install transformers torch
💻 使用示例
基础用法
from transformers import pipeline
model_name = "OpenMed/OpenMed-NER-PathologyDetect-BigMed-560M"
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"Text {i+1} entities:")
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"Processed {len(results)} texts with batching")
性能优化
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利用率,以找到适合您硬件的最佳批量大小。
✨ 主要特性
📋 模型概述
此模型是一款经过微调的最先进的Transformer模型,专为疾病实体识别而设计,能够从NCBI数据集中精准识别疾病实体。该专业模型擅长从临床文本、研究论文和医疗保健文档中识别和提取生物医学实体,可用于 药物相互作用检测、从患者记录中提取药物信息、不良事件监测、药物发现文献挖掘 和 生物医学知识图谱构建 等应用,为临床和研究应用提供了具备生产级可靠性的解决方案。
🎯 关键特性
- 高精度:针对生物医学实体识别进行了优化。
- 特定领域:在精心策划的NCBI_DISEASE数据集上进行训练。
- 生产就绪:在临床基准上进行了验证。
- 易于集成:与Hugging Face Transformers生态系统兼容。
🏷️ 支持的实体类型
该模型可以识别和分类以下生物医学实体:
📊 数据集
NCBI疾病语料库是疾病名称识别和概念归一化的综合资源。
NCBI疾病语料库是一个黄金标准数据集,包含793篇PubMed摘要,其中有6,892个疾病提及,映射到来自医学主题词表(MeSH)和在线人类孟德尔遗传(OMIM)的790个独特疾病概念。该语料库由美国国家生物技术信息中心开发,为疾病实体识别和归一化提供了提及级和概念级的注释。该数据集广泛用于开发临床NLP系统、医学诊断支持工具和生物医学文本挖掘应用。它是评估医疗信息学和医学文献分析中疾病名称识别系统的关键基准。
📊 性能指标
当前模型性能
- F1分数:
0.87
- 精确率:
0.86
- 召回率:
0.89
- 准确率:
0.97
🏆 在NCBI_DISEASE数据集上的对比性能
排名基于在该数据集上训练的所有模型的F1分数性能。

图:OpenMed(开源)与最新的SOTA(闭源)在生物医学NER数据集上的性能比较。
📚 详细文档
数据集信息
- 数据集:NCBI_DISEASE
- 描述:疾病实体识别 - 来自NCBI数据集的疾病实体
训练详情
- 基础模型:xlm-roberta-large
- 训练框架:Hugging Face Transformers
- 优化方法:使用学习率调度的AdamW优化器
- 验证方法:在保留的测试集上进行交叉验证
🔧 技术细节
模型架构
- 基础架构:xlm-roberta-large
- 任务:标记分类(命名实体识别)
- 标签:特定于数据集的实体类型
- 输入:经过标记化的生物医学文本
- 输出:BIO标签的实体预测
💡 使用案例
该模型特别适用于以下场景:
- 临床文本挖掘:从医疗记录中提取实体。
- 生物医学研究:处理科学文献。
- 药物发现:识别化合物和药物。
- 医疗保健分析:分析患者数据和结果。
- 学术研究:支持生物医学NLP研究。
📄 许可证
本模型采用Apache 2.0许可证。有关详细信息,请参阅 LICENSE。
🤝 贡献
我们欢迎各种形式的贡献!无论您有想法、功能请求,还是想加入我们推动开源医疗AI发展的使命,我们都很乐意听取您的意见。
在Hugging Face 🤗 上关注 OpenMed Org,并点击“Watch”以获取我们最新版本和开发动态的更新。