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