【问题标题】:How to remove/add entities in a custom entity ruler in spaCy 3.x如何在 spaCy 3.x 的自定义实体标尺中删除/添加实体
【发布时间】:2022-09-29 23:41:22
【问题描述】:

我有一个习惯实体统治者添加到空间\"en_core_web_sm\"模型。我想在需要时添加或删除其中的实体。这个问题已经回答了here,但是我认为这是不正确的,因为这个人正在谈论尼尔组件不是实体标尺。
该答案的简短版本是,当您添加新模式时,Spacy 往往会忘记以前的模式。
然而,这只发生在你训练模型的时候尼尔带有示例的组件。实体标尺没有接受过示例训练,它只是给出了要匹配的模式和标签,它对我来说非常有效(我在解析器零件)。
如果我错了请纠正我如果我是对的那我该怎么办添加/删除中的实体实体统治者(模式和标签两者或单独,尽可能)。

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

给这个函数一个包含实体的 jsonl 文件。

    标签: python-3.x spacy-3


    【解决方案1】:

    您可以像往常一样将项目添加到实体标尺。

    ruler = nlp.get_pipe("entity_ruler")
    patterns = ... whatever your patterns are ...
    ruler.add_patterns(patterns)
    

    请参阅Entity Ruler docs。有关删除示例,请参阅API docs

    【讨论】:

      【解决方案2】:

      正如 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 tutorial

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 2021-09-30
        • 1970-01-01
        相关资源
        最近更新 更多