我试图将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')]
,它似乎是将AGE
或NUMBER
任意分配了0到149之间的值。
这提出了两个问题,我希望有人可以帮助回答: