spacy未对齐实体

6ioyuze2  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(331)

我尝试使用spacy从字符串中提取信息,如下所示: GENERAL SYSTEM INFORMATION: 194V MAX DC VOLTAGE MODULES: (19) phonosolar PS310M-24/T 10.36A MAX POWER CURRENT 然而,并不仅仅是这样。这方面的重要实体包括: 19: EQUIP_QUANTITY , phonosolar: EQUIP_MANF ,及 PS310M-24/T: EQUIP_MODELNO . 然而,在这样的大型数据集(10k)样本上对其进行训练的结果不是很好,它错误地分类了许多实体。它说,未对齐的实体将被视为“-”,但是,当查看偏移量到比洛标签输出时,没有这样的条目,只有o个实体和其他标记的实体(b_设备数量、i_设备数量等)。当我初始化训练样本并使用以下代码将它们转换为示例对象时,会出现此警告。

for thing in tqdm(data):
    try:
        words = thing['text'].split(" ")
        spaces = None
        doc = Doc(nlp.vocab, words=words, spaces=spaces)
        ex = Example.from_dict(doc, {"words":words,"entities":thing['entities']})
        TRAIN_DATA.append(ex)
    except:
        print("failure")

其中,thing['text']类似于上述字符串,thing['entities']是元组形式的实体列表(startindex、endindex(exclusive)、type)
编辑:我之所以不采用基于规则的方法,而是采用分类/实体识别方法,是因为基于规则的方法不可维护。在这种情况下,有很多制造商采用多种格式,有很多型号采用多种格式,我希望spacy能够了解这些细微差别。

mlmc2os5

mlmc2os51#

如果没有完整的示例很难知道,但是如果您的实体跨度都基于字符偏移量,那么我会创建这样的示例,这样您就不会在参考文档中引入不必要的替代性基于空间的标记化:

ex = Example.from_dict(nlp.make_doc(text), {"entities":thing['entities']})

在这里,它将使用来自的默认标记化 nlp 而不是空格分隔的标记,这可能有助于解决对齐错误。如果您的角色偏移与 nlp.make_doc 标记边界,您仍然可以以未对齐结束,但是您只需要担心一个标记化,而不是两个。

相关问题