命名实体识别:使用正则表达式的 NLTK

数据挖掘 nlp 命名实体识别
2021-10-05 00:01:55

很多时候,命名实体识别(NER) 不会将连续的 NNP 标记为一个 NE。我认为编辑 NER 以使用 RegexpTagger 也可以改进 NER。

例如,考虑以下输入:

“巴拉克奥巴马是一个伟大的人。”

和输出:

Tree('S', [Tree('PERSON', [('Barack', 'NNP')]), Tree('ORGANIZATION', [('Obama', 'NNP')]),
    ('is', 'VBZ'), ('a', 'DT'), ('great', 'JJ'), ('person', 'NN'), ('.', '.')])

至于输入:

“前副总统迪克切尼告诉保守派电台主持人劳拉英格拉汉姆,他“很荣幸”在任期间与达斯维德相提并论。

输出是:

Tree('S', [('Former', 'JJ'), ('Vice', 'NNP'), ('President', 'NNP'),
    Tree('NE', [('Dick', 'NNP'), ('Cheney', 'NNP')]), ('told', 'VBD'), ('conservative', 'JJ'),
    ('radio', 'NN'), ('host', 'NN'), Tree('NE', [('Laura', 'NNP'), ('Ingraham', 'NNP')]),
    ('that', 'IN'), ('he', 'PRP'), ('``', '``'), ('was', 'VBD'), ('honored', 'VBN'),
    ("''", "''"), ('to', 'TO'), ('be', 'VB'), ('compared', 'VBN'), ('to', 'TO'),
    Tree('NE', [('Darth', 'NNP'), ('Vader', 'NNP')]), ('while', 'IN'), ('in', 'IN'),
    ('office', 'NN'), ('.', '.')])

这里Vice/NNP, President/NNP, (Dick/NNP, Cheney/NNP)是正确提取的。所以,我认为如果nltk.ne_chunk首先使用,然后如果两个连续的树是 NNP,那么两者都引用一个实体的可能性更高。

我一直在玩 NLTK 工具包,我经常遇到这个问题,但找不到令人满意的答案。任何建议将不胜感激。我正在寻找我的方法中的缺陷。

1个回答

您有一个好主意,它可能适用于您的特定项目。但是,您应该考虑一些注意事项:

  1. 在你的第一句话中,奥巴马错误地归类为一个组织,而不是一个人。这是因为使用我的 NLTK 的训练模型可能没有足够的数据将奥巴马识别为 PERSON。因此,一种方法是通过使用大量标记的训练数据训练一个新模型来更新这个模型。生成标记的训练数据是 NLP 中最昂贵的任务之一——因为用正确的词性和语义角色标记句子需要花费大量的工时。

  2. 在第 2 句中,有 2 个概念——“前副总统”和“迪克切尼”。您可以使用共同引用来识别 2 个 NNP 之间的关系。两个 NNP 都指的是同一个实体,同一个实体可以被称为 - “前副总统”以及“迪克切尼”。共同指称通常用于识别代词所指的命名实体。例如“迪克切尼是美国前副总统。他是共和党人”。这里的代词“he”指的是“Dick Cheney”,应该通过共指识别工具来识别。