在spaCy的EntityRuler中,具有不同标签的相似模式的匹配顺序是什么?

时间:2019-08-27 08:49:41

标签: spacy ner

我试图将EntityRuler管道添加到现有的统计NER模型中,以更好地处理数字,年龄和金钱等结构化实体类型。

但是,其中一些数字模式可能非常相似,或者彼此之间有明显的重叠,特别是如果我们混合了常规模式和更具体的模式。我面临的一个问题示例如下:

    {"label": "NUMBER", "pattern": [{"LIKE_NUM": true}]}
    {"label": "AGE", "pattern": {"TEXT": {"REGEX": "^(1[0-4]|[1-9])?[0-9]$"}}]}

我有一个相当普通的模式,该模式仅使用LIKE_NUM标记属性来标记通用NUMBER实体;另一个更具体的模式是使用正则表达式将0到149之间的数字匹配为实体类型AGE。当我传递句子I am 20时,我希望EntityRuler首先检查更具体的模式,然后再进入更通用的模式,以便在这种情况下它返回AGE作为标签,而不是将其标记为通用NUMBER

我尝试重新排列patterns.jsonl文件中模式的顺序,以测试将模式添加到管道中的顺序是否会以某种方式影响分配给模式的优先级。但是,这两种情况都返回了更通用的NUMBER标签。

我只是想看看会发生什么,所以输入了I am 20 1 2 01 123 1410 999 001 10 51 001 010 149 150 151一句话,并且得到了一致的结果- Ents: [('20', 'NUMBER'), ('1', 'AGE'), ('2', 'NUMBER'), ('01', 'NUMBER'), ('123', 'NUMBER'), ('1410', 'NUMBER'), ('999', 'NUMBER'), ('001', 'NUMBER'), ('10', 'AGE'), ('51', 'AGE'), ('001', 'NUMBER'), ('010', 'NUMBER'), ('149', 'NUMBER'), ('150', 'NUMBER'), ('151.', 'NUMBER')],它似乎是将AGENUMBER任意分配了0到149之间的值。

这提出了两个问题,我希望有人可以帮助回答:

  1. EntityRuler如何/按什么顺序准确地完成每种添加的模式?
  2. 在这样的NER任务中更好的做法是避免完全具有这样的一般伞型/标签吗?还是这个问题更多是重叠/相似的模式?

0 个答案:

没有答案