python-3.x - 在 Spacy 中,我如何优先考虑基于规则的匹配而不是训练有素的 NER 模型?

标签 python-3.x nlp spacy

我正在为生物医学文本(来自 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/

相关文章:

python - Fabric Group - 字符串的主机列表

python - 谷歌colab中的for循环列表索引超出范围

python - 如何提取文本中每个可能的日期?

node.js - 新闻文章分类(通过 NLP 进行主题/实体分析?);最好在 Node.js 中

python - 树遍历并在Python中获取相邻的子节点

python - spacy.lang.en 和 load ('en' ) 有什么区别?

python - 分词器在 torchtext 中无法正常工作

python - 如何使用 Selenium 查找仅在滚动后才可用的元素?

machine-learning - 单行上的字符串索引器、CountVectorizer Pyspark

python - 找到一个被新行打断的长单词