【问题标题】:spaCy misaligned entitiesspaCy错位实体
【发布时间】:2021-07-08 16:04:38
【问题描述】:

我正在尝试使用 spaCy 从这样的字符串中提取信息:GENERAL SYSTEM INFORMATION: 194V MAX DC VOLTAGE MODULES: (19) phonosolar PS310M-24/T 10.36A MAX POWER CURRENT,但并非完全像这样。其中的重要实体是19: EQUIP_QUANTITYphonosolar: EQUIP_MANFPS310M-24/T: EQUIP_MODELNO。然而,在像这样的大型数据集(10k)样本上训练它的结果不是很好,它对许多实体进行了错误分类。它说未对齐的实体将被视为“-”但是,当查看 offset_to_biluo_tags 输出时没有这样的条目,只有 O 实体和其他标记的实体(B_EQUIP_QUANTITY、I_EQUIP_QUANTITY 等)。当我初始化训练样本并使用以下代码将它们转换为示例对象时,会出现此警告。

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(不包括)、类型)

编辑:我之所以不采用基于规则的方法,而是采用分类/实体识别,是因为在这种情况下,基于规则的方法是不可维护的,有很多制造商有多种格式,有很多型号许多格式,我希望 spacy 能够了解这些细微差别。

【问题讨论】:

  • 我对你的问题有点困惑。您是否真的收到有关未对齐实体的警告,或者“它说”是指文档吗?当你说它犯了很多错误时,有多少?您的准确度/精度/fscore 是多少?

标签: python spacy


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-21
    • 2023-04-02
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多