🚀 OpenBioNER:轻量级生物医学命名实体识别模型
OpenBioNER 是一款轻量级的基于 BERT 的模型,专为 开放领域 的生物医学命名实体识别(NER)量身定制。该模型仅依据实体的 自然语言描述 就能识别未见的目标实体类型,无需重新训练。它在通过大语言模型(LLM)自监督生成的合成银标注上进行了预训练。大量实验表明,在各种生物医学基准测试的零样本设置中,OpenBioNER 优于专业的大语言模型,如 UniNER 和 GPT - 4o,F1 分数提升高达 10%。与 GLiNER 等较小的基线模型相比,我们的模型在使用参数最多减少 4 倍的情况下,仍能取得更好的性能。
🚀 快速开始
OpenBioNER 是一个专门为开放领域生物医学命名实体识别设计的轻量级 BERT 模型。它能够仅根据自然语言描述识别未见的目标实体类型,无需重新训练。
✨ 主要特性
- 开放领域适用性:能够基于自然语言描述识别未见的目标实体类型,无需重新训练。
- 预训练优势:在通过 LLM 自监督生成的合成银标注上进行预训练。
- 性能卓越:在零样本设置的各种生物医学基准测试中,优于专业的大语言模型,如 UniNER 和 GPT - 4o,F1 分数提升高达 10%。
- 参数高效:与较小的基线模型相比,使用参数最多减少 4 倍的情况下,仍能取得更好的性能。
📦 安装指南
要使用此模型,您必须安装 IBM Zshot 库(在下一版本发布前从主分支安装):
!pip install git+https://github.com/IBM/zshot.git@main gliner --quiet
!python -m spacy download en_core_web_sm
💻 使用示例
基础用法
import spacy
from zshot import PipelineConfig, displacy
from zshot.linker import LinkerSMXM
from zshot.evaluation.metrics._seqeval._seqeval import Seqeval
from zshot.utils.data_models import Entity
from zshot.evaluation.zshot_evaluate import evaluate, prettify_evaluate_report
entities = [
Entity(name='BACTERIUM', description='A bacterium refers to a type of microorganism that can exist as a single cell and may cause infections or play a role in various biological processes. Examples include species like Streptococcus pneumoniae and Streptomyces ahygroscopicus.', vocabulary=None),
]
nlp = spacy.blank("en")
nlp_config = PipelineConfig(
linker=LinkerSMXM(model_name="disi-unibo-nlp/openbioner-base"),
entities=entities,
device='cuda'
)
nlp.add_pipe("zshot", config=nlp_config, last=True)
sentence = "Impact of cofactor - binding loop mutations on thermotolerance and activity of E. coli transketolase"
doc = nlp(sentence)
displacy.render(doc, style="ent")
📚 详细文档
链接
性能
OpenBioNER 在所有数据集上均优于所有竞争模型,实现了 最高的平均性能。
模型 |
大小 |
AnatEM |
NCBI |
JNLPBA |
BC2GM |
BC4CHEMD |
BC5CDR |
JNLPBA - R |
MedMentions - R |
平均 |
GPT - 4o |
- |
38.7 |
50.0 |
41.9 |
37.3 |
36.4 |
66.4 |
26.6 |
49.1 |
43.3 |
UniNER |
7B |
25.1 |
60.4 |
48.1 |
46.2 |
47.9 |
68.0 |
50.2 |
53.4 |
49.9 |
GLiNER_large - v1 |
459M |
33.3 |
61.9 |
57.1 |
47.9 |
43.1 |
66.4 |
51.9 |
53.4 |
51.9 |
OpenBioNER (我们的模型) |
110M |
35.2 |
58.5 |
57.1 |
49.1 |
48.0 |
60.4 |
63.9 |
50.9 |
52.9 |
⚠️ 重要提示
请注意,使用 zshot
库运行评估时,在某些基准测试中可能会导致与论文中报告的结果略有不同。这种差异是由于标记对齐的不同:zshot
使用 spaCy 的基于字符的跨度匹配,而我们的实验使用基于 BERT 的 NER 管道处理的标记级对齐。这些差异可能会影响实体跨度的匹配和评估,特别是在有子词标记化或标点符号的情况下。
🧬 如何编写有效的实体类型描述
实体类型描述对于提高 OpenBioNER 的泛化能力至关重要。编写良好的描述有助于模型消除类型歧义、处理稀有类别,并与不同数据集的实际使用情况保持一致。
✅ 最佳实践
- 清晰定义开头:简要解释实体类型是什么。
- 包含功能或上下文:添加其功能、用途或出现位置。
- 列出 3 - 5 个具体示例:使用与领域相关的示例(例如,实际的疾病、蛋白质或食物项目)。
- 提及子类型或同义词(可选):有助于捕捉词汇变化和稀有提及。
- 保持简洁:1 - 3 个结构良好的句子是理想的。
⚠️ 避免的常见错误
- 模糊或过于通用的描述
- 没有示例
- 只是一个术语列表
- 冗余或循环的措辞
🧪 模板(推荐格式)
A [TYPE] refers to [concise definition]. It includes examples such as [example1], [example2], and [example3].
作者
📬 联系方式
如有问题、合作或反馈,请随时联系:
📄 许可证
本项目采用 MIT 许可证。
信息表格
属性 |
详情 |
模型类型 |
基于 BERT 的轻量级开放领域生物医学命名实体识别模型 |
训练数据 |
disi - unibo - nlp/Pile - NER - biomed - IOB、disi - unibo - nlp/Pile - NER - biomed - descriptions |
基础模型 |
dmis - lab/biobert - v1.1 |
任务类型 |
标记分类 |
标签 |
医学 |