是否有任何 NER 模型可以识别名字和姓氏,而不仅仅是 PERSON?
nlp 453
原文标题 :Is there any NER model that recognizes first and last names instead of just 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"}
回复
我来回复-
ewz93 评论
好吧,我认为几乎所有用于训练这些模型的重要 NER 数据集都不会区分名字和姓氏。我猜想在正常的完整句子语言中,模式
last name
first name
是非常罕见的。我的猜测甚至是,在大多数情况下,主要是上下文决定哪个先出现。在正常的书面和口头句子中,名字几乎总是排在第一位。在某些列表格式和特定数据库中,它可能是相反的方式,尽管通常由 a,
分隔。此外,这种分离在语言中通常是困难和模糊的(甚至比 NER 还要多),因为有明显的情况,例如
David Paul
/Paul David
,即使是人类注释者也无法分辨。所以你可以做的是:
- 基于规则处理这个问题,例如以下方式之一:
- 如果实体中有 , 则假定为 lastname firstname ,否则为 firstname lastname
- 如果名称所在的句子完整且语法正确,则假设其 firstname lastname ,否则 lastname firstname :为此,您可以使用 SpaCy 的句子分割来拆分成句子,然后将句子提供给在 CoLA 上训练的任何模型(语料库语言学可接受性)任务,例如看这个演示:样本1(正确),样本2(不正确)
- 从您的或任何大型语料库中创建一个可能的名字和姓氏的数据集,例如通过提取实体并将 Mr. 、 Dr. 等之后的所有内容视为可能的姓氏,并将由单个单词组成的实体视为可能的名字。也许还有一些数据库包含流行的名字和姓氏。使用收集的数据集来检查名称实体的一部分是否与名字一样频繁地出现或与姓氏一样频繁地出现。如果未知,则假设较长的部分是姓氏。
- Train/Fine-tune a model as a token classification task, either by annotating data yourself or first collecting probable first and last names as described and then automatically annotating data (and optionally post-correcting it). The best way to go about this would probably be to fine-tune a transformer model like BERT or RoBERTa. They perform pretty strong on NER and would likely also perform quite well on a modified/more fine-granular version of it. Check out this course on how to fine-tune such a model.
2年前