模型简介
模型特点
模型能力
使用案例
🚀 🧬 OpenMed-NER-PharmaDetect-SuperClinical-434M
本项目是一款专门用于化学实体识别的模型,能从生物医学文本中精准识别和提取相关实体,在药物发现、医疗数据分析等领域具有重要价值。
🚀 快速开始
安装
pip install transformers torch
使用
from transformers import pipeline
# 加载模型和分词器
# 模型地址: https://huggingface.co/OpenMed/OpenMed-NER-PharmaDetect-SuperClinical-434M
model_name = "OpenMed/OpenMed-NER-PharmaDetect-SuperClinical-434M"
# 创建pipeline
medical_ner_pipeline = pipeline(
model=model_name,
aggregation_strategy="simple"
)
# 示例用法
text = "Administration of metformin reduced glucose levels significantly."
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
:对于基于单词的模型,将一个单词内得分最高的标记的实体标签分配给整个单词。
批量处理
为了高效处理大型数据集,请使用 batch_size
参数进行适当的批处理:
texts = [
"Administration of metformin reduced glucose levels significantly.",
"The study evaluated the efficacy of cisplatin in cancer treatment.",
"Patients received ibuprofen for inflammation management.",
"The patient's medication was switched to tamoxifen to prevent breast cancer recurrence.",
"Lithium carbonate is often prescribed for the management of bipolar disorder.",
]
# 使用优化的批量大小进行高效批量处理
# 根据你的GPU内存调整batch_size(通常为8、16、32或64)
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
# 加载数据
# 从Hugging Face加载医疗数据集
from datasets import load_dataset
# 加载公共医疗数据集(使用子集进行测试)
medical_dataset = load_dataset("BI55/MedText", split="train[:100]") # 加载前100个示例
data = pd.DataFrame({"text": medical_dataset["Completion"]})
dataset = Dataset.from_pandas(data)
# 使用适合你硬件的最佳批量处理
batch_size = 16 # 根据你的GPU内存调整此值
results = []
for out in medical_ner_pipeline(KeyDataset(dataset, "text"), batch_size=batch_size):
results.extend(out)
print(f"使用批处理处理了 {len(results)} 个文本")
性能优化
批量大小指南:
- CPU:从
batch_size=1-4
开始 - 单GPU:根据GPU内存尝试
batch_size=8-32
- 高端GPU:可以处理
batch_size=64
或更高 - 监控GPU利用率,以找到适合你硬件的最佳批量大小
内存考虑:
# 对于有限的GPU内存,使用较小的批次
medical_ner_pipeline = pipeline(
model=model_name,
aggregation_strategy="simple",
device=0 # 指定GPU设备
)
# 使用内存高效的批处理进行处理
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)
✨ 主要特性
- 高精度:针对生物医学实体识别进行了优化。
- 特定领域:在精心策划的 BC5CDR_CHEM 数据集上进行训练。
- 可用于生产:在临床基准上进行了验证。
- 易于集成:与 Hugging Face Transformers 生态系统兼容。
📦 安装指南
pip install transformers torch
💻 使用示例
基础用法
from transformers import pipeline
# 加载模型和分词器
# 模型地址: https://huggingface.co/OpenMed/OpenMed-NER-PharmaDetect-SuperClinical-434M
model_name = "OpenMed/OpenMed-NER-PharmaDetect-SuperClinical-434M"
# 创建pipeline
medical_ner_pipeline = pipeline(
model=model_name,
aggregation_strategy="simple"
)
# 示例用法
text = "Administration of metformin reduced glucose levels significantly."
entities = medical_ner_pipeline(text)
print(entities)
token = entities[0]
print(text[token["start"] : token["end"]])
高级用法
# 批量处理示例
texts = [
"Administration of metformin reduced glucose levels significantly.",
"The study evaluated the efficacy of cisplatin in cancer treatment.",
"Patients received ibuprofen for inflammation management.",
"The patient's medication was switched to tamoxifen to prevent breast cancer recurrence.",
"Lithium carbonate is often prescribed for the management of bipolar disorder.",
]
# 使用优化的批量大小进行高效批量处理
# 根据你的GPU内存调整batch_size(通常为8、16、32或64)
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}")
📚 详细文档
模型概述
该模型是一款经过微调的最先进的变压器模型,旨在为化学实体识别提供企业级的准确性,识别来自 bc5cdr 数据集的化学实体。这款专业模型擅长从临床文本、研究论文和医疗保健文档中识别和提取生物医学实体,能够实现诸如 药物相互作用检测、从患者记录中提取药物信息、不良事件监测、药物发现的文献挖掘 以及 生物医学知识图谱构建 等应用,为临床和研究应用提供了具备生产就绪可靠性的解决方案。
支持的实体类型
该模型可以识别和分类以下生物医学实体:
B-CHEM
I-CHEM
数据集
BC5CDR-Chem 专注于从 BioCreative V 化学 - 疾病关系提取任务中进行化学实体识别。
BC5CDR-Chem 语料库是 BioCreative V 化学 - 疾病关系(CDR)提取挑战的一部分,专门针对生物医学文本中的化学实体识别。该数据集包含 1500 篇 PubMed 摘要,其中有 4409 个带注释的化学实体,旨在支持自动化药物发现和药物警戒应用。该语料库强调与理解化学 - 疾病关系相关的化合物、药物和治疗物质。它是开发能够识别化学实体以用于下游任务(如药物不良反应检测和药物再利用研究)的命名实体识别系统的重要资源。
性能指标
当前模型性能
- F1分数:
0.96
- 精确率:
0.95
- 召回率:
0.97
- 准确率:
0.99
在 BC5CDR_CHEM 数据集上的比较性能
排名 | 模型 | F1分数 | 精确率 | 召回率 | 准确率 |
---|---|---|---|---|---|
🥇 1 | OpenMed-NER-PharmaDetect-SuperClinical-434M | 0.9614 | 0.9520 | 0.9710 | 0.9892 |
🥈 2 | OpenMed-NER-PharmaDetect-MultiMed-335M | 0.9610 | 0.9585 | 0.9634 | 0.9871 |
🥉 3 | OpenMed-NER-PharmaDetect-ElectraMed-335M | 0.9594 | 0.9539 | 0.9649 | 0.9863 |
4 | OpenMed-NER-PharmaDetect-PubMed-335M | 0.9587 | 0.9521 | 0.9654 | 0.9902 |
5 | OpenMed-NER-PharmaDetect-SuperMedical-355M | 0.9585 | 0.9520 | 0.9651 | 0.9881 |
6 | OpenMed-NER-PharmaDetect-BioPatient-108M | 0.9583 | 0.9511 | 0.9656 | 0.9857 |
7 | OpenMed-NER-PharmaDetect-ElectraMed-560M | 0.9562 | 0.9483 | 0.9642 | 0.9888 |
8 | OpenMed-NER-PharmaDetect-BioClinical-108M | 0.9560 | 0.9504 | 0.9617 | 0.9849 |
9 | OpenMed-NER-PharmaDetect-PubMed-109M | 0.9555 | 0.9417 | 0.9697 | 0.9889 |
10 | OpenMed-NER-PharmaDetect-SuperMedical-125M | 0.9550 | 0.9442 | 0.9662 | 0.9871 |
排名基于在该数据集上训练的所有模型的 F1 分数性能。
图:OpenMed(开源)与最新的 SOTA(闭源)在生物医学命名实体识别数据集上的性能比较。
数据集信息
属性 | 详情 |
---|---|
数据集 | BC5CDR_CHEM |
描述 | 化学实体识别 - 来自 BC5CDR 数据集的化学实体 |
训练详情
- 基础模型:deberta-v3-large
- 训练框架:Hugging Face Transformers
- 优化器:使用学习率调度的 AdamW 优化器
- 验证:在保留的测试集上进行交叉验证
模型架构
- 基础架构:deberta-v3-large
- 任务:标记分类(命名实体识别)
- 标签:特定于数据集的实体类型
- 输入:分词后的生物医学文本
- 输出:BIO 标记的实体预测
使用场景
该模型在以下方面特别有用:
- 临床文本挖掘:从医疗记录中提取实体
- 生物医学研究:处理科学文献
- 药物发现:识别化合物和药物
- 医疗保健分析:分析患者数据和结果
- 学术研究:支持生物医学自然语言处理研究
🔧 技术细节
该模型是基于变压器架构进行微调的,针对生物医学领域的化学实体识别任务进行了优化。在训练过程中,使用了 BC5CDR_CHEM 数据集,该数据集包含了大量的生物医学文本和标注的化学实体。通过在这个特定领域的数据集上进行训练,模型能够更好地理解和识别生物医学文本中的化学实体。同时,模型在训练过程中使用了 AdamW 优化器和学习率调度,以提高模型的性能和泛化能力。在验证过程中,使用了交叉验证的方法,在保留的测试集上进行验证,确保模型的准确性和可靠性。
📄 许可证
本项目采用 Apache License 2.0 许可证。详情请见 LICENSE。
🤝 贡献
我们欢迎各种形式的贡献!无论你有想法、功能请求,还是想加入我们推动开源医疗人工智能发展的使命,我们都很乐意听取你的意见。
在 Hugging Face 🤗 上关注 OpenMed Org,并点击“Watch”以获取我们最新版本和开发动态的更新。








