python-3.x - 如何在 spaCy 3.x 中的自定义实体标尺中删除/添加实体

标签 python-3.x spacy-3

我在 spacy “en_core_web_sm” 模型中添加了一个自定义实体标尺。我想在需要时添加或删除其中的实体。这个问题已经回答过here ,但是我认为这是不正确的,因为该人正在谈论ner组件而不是实体统治者。
该答案的简短版本是,当您添加新模式时,Spacy 往往会忘记以前的模式。
但是,只有当您使用示例训练模型的ner能力时,才会发生这种情况。 实体标尺没有经过示例训练,它只是给出了匹配的模式和标签,它对我来说非常有效(我在解析器组件之后添加了它)。< br/> 如果我错了,请纠正我,如果我是对的,那么我如何在实体标尺添加/删除实体(模式和标签两者或单独,无论什么可能)。

def custom_ruler(file_path):
    ruler = nlp.add_pipe('entity_ruler', after='parser')
    ruler.from_disk(file_path)

该函数被赋予一个包含实体的 jsonl 文件。

最佳答案

正如 Polm 所说,您可以添加自己的基于规则的模式来覆盖模型。为此,只需创建一个包含两对字典的列表:

  • pattern 定义了它应该覆盖的内容;
  • label定义给实体赋予什么标签。 当您使用 add_patterns() 方法将这些模式添加到标尺时,nlp Doc 对象会自动更新,您可以枚举其命名实体并查看正在执行的更正.

    #Patterns is a list of dictionaries of the token text and the expected label.
    patterns = [{"label": "NATION", "pattern": "Maya"}, 
        {"label": "NATION", "pattern": "Aztecs"},
        {"label": "DATE", "pattern": "BCE"}]
    #Ruler is the English entity recogniser.
    ruler = english.add_pipe("entity_ruler", before="ner")
    ruler.add_patterns(patterns)
    #We can now see the new entities in the text.
    chocolate = english(source)
    for entity in chocolate.ents:
        print(entity.text, entity.label_)

您可以从 my showcasing notebook 了解有关 spaCy NLP 库的更多信息或者看看this Youtube tutorialWhat I got

关于python-3.x - 如何在 spaCy 3.x 中的自定义实体标尺中删除/添加实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73017915/

相关文章:

def 函数 ((x,y)) 的 Python 3 语法错误

python-3.x - Azure Put Blob API 返回规范化 header 中的文件大小不匹配

python - spacy 3 NER Scorer() 抛出 TypeError : score() takes 2 positional arguments but 3 were given

nlp - Spacy 手动下载 en_core_web_lg

python - 如何查看 spacy NER softmax 值?

python - SpaCy 3 变压器矢量标记对齐

python - line.strip() 方法说明

python - tkinter 中的 SQL 查询结果

python-3.x - 为什么 import cntk as C 在谷歌 colab 中不起作用

named-entity-recognition - 值错误 : [E143] Labels for component 'tagger' not initialized