【问题标题】:Longest match only with Spacy Phrasematcher最长匹配仅与 Spacy Phrasematcher
【发布时间】:2019-11-29 13:01:21
【问题描述】:

我在tutorial 之后创建了一个Spacy Phrasematcher 来匹配文档中的名称。我想使用结果匹配作为额外的训练数据来训练 Spacy NER 模型。 但是,我的模式分别包含全名(例如“Barack Obama”)和姓氏(“Obama”)。

因此,在包含“Barack Obama”的句子中,两种模式都匹配,导致匹配重叠。但是,当我尝试使用数据进行训练时,这种重叠会触发异常,例如:

ValueError: [E103] Trying to set conflicting doc.ents: '(19, 33, 'PERSON')' and '(29, 33, 'PERSON')'. A token can only be part of one entity, so make sure the entities you're setting don't overlap.

我一直在考虑在使用数据进行训练之前过滤掉重叠匹配,但这似乎是一种非常低效的方法,导致大数据的处理时间显着增加。

有没有办法设置PhraseMatcher,使其只匹配重叠匹配的最长匹配?

【问题讨论】:

    标签: python nlp spacy named-entity-recognition


    【解决方案1】:

    PhraseMatcher 没有在匹配时过滤掉重叠匹配的内置方法,但有一个实用功能可以在之后过滤重叠匹配:spacy.util.filter_spans()。它更喜欢最长的跨度,如果两个重叠的跨度长度相同,则文本中较早的跨度。

    【讨论】:

    • 快速提问:'文本中最早的跨度'是什么意思?
    • 文本中较早开始的跨度,因此如果标记 3-6 和 5-8 的跨度重叠,则更喜欢 3-6 中的跨度。
    • 谢谢@aab。现在很清楚了。因此,如果两个跨度具有相同的长度并在相同位置重叠,则 filter_spans 将附加已首先包含在 PhraseMatcher 中的实体
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多