有没有一个NER模型可以识别名字和姓氏,而不仅仅是PERSON



给定一组字符串,如:

"John Doe"
"Doe John"
"Albert Green"
"Greenshpan David"
...

我想运行一个能识别名字和姓氏的NER模型。我使用的所有英语模型(Spacy、NLTK等(都给了我PERSON实体。

请告知是否有已经培训过的模特?

期望输出:

{"John": "First Name", "Doe": "Last Name"}
{"Doe": "Last Name", "John": "First Name"}
{"Albert": "First Name", "Green": "Last Name"}
{"Greenshpan": "Last Name", "David": "First Name"}

我认为,几乎所有训练这些模型的重要NER数据集都不会区分名字和姓氏。我想,在正常的全句语言中,last namefirst name模式是非常罕见的。我的猜测是,在大多数情况下,主要是上下文决定了哪一个优先。在正常的书面和口头句子中,名字几乎总是排在第一位。在某些列表格式和特定的数据库中,它可能是相反的,尽管通常用,分隔。

此外,这种分离在语言中通常是困难和模糊的(甚至比NER更难(,因为有一些明显的情况,比如David Paul/Paul David,即使对于人类注释者来说,也无法分辨。

所以你可以做的是:

  1. 基于规则处理此问题,例如以下方法之一:
    • 如果实体中有,,则假定它是lastname firstname,否则为firstname lastname
    • 如果名称所在的句子完整且语法正确,则假设其为firstname lastname,否则为lastname firstname:为此,您可以使用SpaCy的句子分割将其拆分为多个句子,然后将这些句子提供给在CoLA(语言可接受性语料库(任务中训练的任何模型,例如,请参见此演示:示例1(正确(,示例2(不正确(
    • 从您或任何大型语料库中创建一个可能的名字和姓氏数据集,例如,通过提取实体并将Mr.Dr.等之后的所有内容视为可能的姓氏,并将由单个单词组成的实体视为可能名字。也许还有一些数据库也包含流行的名字和姓氏。使用收集的数据集来检查名称实体的一部分是作为名字出现的频率更高,还是作为姓氏出现的频率更低。如果它是未知的,假设较长的部分是姓氏
  1. 将模型作为标记分类任务进行训练/微调,方法是自己注释数据,或者按照说明先收集可能的名字和姓氏,然后自动注释数据(并可选地进行后期更正(。最好的方法可能是微调像BERT或RoBERTa这样的变压器模型。它们在NER上表现得很好,在经过修改/更精细的版本上也可能表现得很不错。查看本课程,了解如何微调这样的模型

相关内容

最新更新