我正在为生物医学文本(来自 Pubmed 的癌症论文)构建一个命名实体识别模型。我使用 spacy 为 3 种实体(疾病、基因和药物)类型训练了一个自定义 NER 模型。此外,我将模型与 rule based components to improve the accuracy of my model 结合在一起.
这是我当前的代码 -
# Loaded the trained NER Model
nlp = spacy.load("my_spacy_model")
# Define entity patterns for EntityRuler (just showing 2 relevant patterns here, it contains more patterns)
patterns = [{"label": "GENE", "pattern": "BRCA1"},
{"label": "GENE", "pattern": "BRCA2"}]
ruler = EntityRuler(nlp)
ruler.add_patterns(patterns)
nlp.add_pipe(ruler)
当我在下面的一段文字上测试上面的代码时 -
text = "Exceptional response to olaparib in BRCA2-altered breast cancer after PD-L1 inhibitor and chemotherapy failure"
我得到以下结果 -
DISEASE BRCA2-altered breast cancer
DRUG olaparib
GENE PD-L1
然而,正确答案是——
GENE BRCA2
^^^^^^^^^^^
DISEASE breast cancer
^^^^^^^^^^^^^^^^^^^^^
DRUG olaparib
GENE PD-L1
该模型未将 BRCA2
识别为基因,我已将其添加到 EntitytRuler
的模式中。
有没有一种方法可以优先考虑基于规则的匹配预测而不是经过训练的模型?或者,我还可以做些什么来通过组合基于规则的匹配来获得正确的结果吗?
最佳答案
您可以在管道中的 NER 组件之前添加 EntityRuler:
nlp.add_pipe(ruler, before="ner")
或者告诉 EntityRuler 覆盖现有实体:
ruler = EntityRuler(nlp, overwrite_ents=True)
NER 预测在每种情况下都可能略有不同,因为在第一个选项中,模型的预测可能会根据现有实体跨度的存在而改变。
关于python-3.x - 在 Spacy 中,我如何优先考虑基于规则的匹配而不是训练有素的 NER 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703630/