有什么方法可以将空白标签列入白名单?

时间:2020-07-21 07:24:55

标签: nlp spacy

我是spaCy的新手,目前正尝试使用spaCy的英语大型模型从句子中识别PERSON
在从句子中识别出PERSON之前一切都很好,直到我发现所识别出的名字不是PERSON为止。
例如。如果我把“亚历克斯正在吃苹果”。它将成功返回Alex是一个人
但是一旦发生这种情况,它将不再起作用
例如。 Sun Saw Bee在吃苹果 Alexandro Soon在吃苹果

我想知道是否有像白名单这样的人可以在不重新训练spaCy英语模型的情况下,将“ Sun Saw Bee”或“ Alexandro Soon”添加为PERSON?
或以任何方式将“ Sun Saw Bee”识别为人?

如果与此相关的任何链接也可以共享,因为我的关键字搜索可能未按正确的键

2 个答案:

答案 0 :(得分:1)

如果您有已知实体的列表,则可以将EntityRuler与NER模型结合使用。根据您的任务/优先级,您可能希望在管道中的NER模型之前或之后添加它。

这是一个简单的示例(改编自上面的文档),显示了如何使用短语模式(字符串)或基于令牌的匹配器模式来定义要匹配的实体:

import spacy
from spacy.pipeline import EntityRuler

nlp = spacy.load("en_core_web_sm")
ruler = EntityRuler(nlp)
patterns = [{"label": "ORG", "pattern": "Apple"},
            {"label": "GPE", "pattern": [{"LOWER": "san"}, {"LOWER": "francisco"}]}]
ruler.add_patterns(patterns)
nlp.add_pipe(ruler, before="ner")

doc = nlp("Apple is opening its first big office in San Francisco after opening an office in New York City.")
print([(ent.text, ent.label_) for ent in doc.ents])

带有spacy v2.3.2的输出:

[('Apple', 'ORG'), ('first', 'ORDINAL'), ('San Francisco', 'GPE'), ('New York City', 'GPE')]

答案 1 :(得分:0)

一个人不想在Spacy管道中将名称列入白名单。 Spacy是根据模型而非最终用户创建的决策创建的,用于NER检测。正如其网站上指出的那样,当前可用模型的局限性之一是,其中许多模型都接受了维基百科和其他来源的培训,可能无法反映您的目标数据。

将实体列入白名单与搜索相同;

if "Sun Saw Bee" in text:
    print('person')

What you can do is add data to a model, which basically is retraining the model.