🚀 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 |
任務類型 |
標記分類 |
標籤 |
醫學 |