我是spaCy的新手,目前正尝试使用spaCy的英语大型模型从句子中识别PERSON
在从句子中识别出PERSON之前一切都很好,直到我发现所识别出的名字不是PERSON为止。
例如。如果我把“亚历克斯正在吃苹果”。它将成功返回Alex是一个人
但是一旦发生这种情况,它将不再起作用
例如。 Sun Saw Bee在吃苹果或 Alexandro Soon在吃苹果
我想知道是否有像白名单这样的人可以在不重新训练spaCy英语模型的情况下,将“ Sun Saw Bee”或“ Alexandro Soon”添加为PERSON?
或以任何方式将“ Sun Saw Bee”识别为人?
如果与此相关的任何链接也可以共享,因为我的关键字搜索可能未按正确的键
答案 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.