使用 Spacy 库的 NER 在简历解析器上没有给出正确的结果

NER using Spacy library not giving correct result on resume parser

我正在使用 SpaCY 的命名实体识别从简历中提取姓名、组织等。 这是我的 python 代码。

import spacy
import PyPDF2
mypdf = open('C:\Users\akjain\Downloads\Resume\Al Mal Capital_Nader El Boustany_BD Manager.pdf', mode='rb')
pdf_document = PyPDF2.PdfFileReader(mypdf)
first_page = pdf_document.getPage(0)
nlp = spacy.load('en_core_web_sm') 
text = first_page.extractText()
doc = nlp(text)   
for ent in doc.ents: 
    print(ent.text, ent.label_) 

如果我看到输出,它看起来不太好。 名称未正确识别。姓被视为组织名称,迪拜被视为人等。

这是我从 public 数据集得到的简历快照。

我想从一组简历中提取候选人姓名、组织、位置等。当我阅读文档时,它说使用 spaCy 的准确度超过 95%。但是在我的情况下它不是。 有什么办法可以提高特征提取的准确率吗?

spaCy NER model 是在 OntoNotes 语料库上训练的,它是电话对话、新闻专线、新闻组、广播新闻、广播对话和网络日志的集合。这些类型的文本都主要包含完整的句子,这与您正在训练的简历有很大不同。例如,实体 "Dubai" 周围没有语法上下文,这使得该特定模型很难将其识别为位置。它习惯于看到类似“...... while he was traveling in Dubai, ...”这样的句子。一般而言,机器学习性能始终与您训练和评估模型的特定问题领域有关。

您可以尝试 运行 使用 en_core_web_mden_core_web_lg 这在 OntoNotes 上表现稍好,但在您的特定域文本上仍然表现不佳。

为了尝试提高准确性,我建议您通过自己对一组简历进行注释并将训练数据反馈回模型来进一步完善现有模型。请参阅文档 here。然而,我不确定这会有多好,因为就像我说的那样,简历更难,因为它们的句子上下文较少。

试试 trf 模型,在 NER 的所有 spacy 基础模型中,它的准确率是最高的。您可以进一步训练它以使其最适合您的用例。

另一种方法是尝试使用神经网络进行训练,您可以按照下面给出的 spacy 文档进行操作 link: https://course.spacy.io/en/chapter4