命名实体识别算法

Posted

技术标签:

【中文标题】命名实体识别算法【英文标题】:Algorithms for named entity recognition 【发布时间】:2010-11-04 20:15:25 【问题描述】:

我想使用命名实体识别 (NER) 来为数据库中的文本找到足够的标签。

我知道有一篇关于此的 Wikipedia 文章以及许多其他描述 NER 的页面,我希望从您那里听到有关此主题的一些信息:

您对各种算法有什么体验? 您会推荐哪种算法? 哪种算法最容易实现(php/Python)? 算法如何工作?是否需要手动培训?

例子:

“去年,我在伦敦见到了巴拉克奥巴马。” => 标签:伦敦,巴拉克奥巴马

我希望你能帮助我。非常感谢您!

【问题讨论】:

【参考方案1】:

如果您打算使用 python,请先查看http://www.nltk.org/,尽管据我所知代码不是“工业实力”,但它会让您入门。

查看http://nltk.googlecode.com/svn/trunk/doc/book/ch07.html 的第 7.5 节,但要了解算法,您可能需要阅读大量书籍。

还可以查看http://nlp.stanford.edu/software/CRF-NER.shtml。它是用java完成的,

NER 不是一个简单的主题,可能没有人会告诉你“这是最好的算法”,他们中的大多数都有自己的优缺点。

我的 0.05 美元。

干杯,

【讨论】:

NLTK 听起来不错,但它需要通过 shell 安装,不是吗?我无法通过 shell 安装任何东西。 通过shell安装是什么意思?查看nltk.org/download,只要将 nltk 添加到 PYTHONPATH 就足够了。 我与 Standord 的 NER 作斗争(如果我找不到其他东西,可能不得不返回它)。这有点乱。如果可能的话,我会避免它。 我会说斯坦福比 nltk 有更好的结果,至少在我的情况下。【参考方案2】:

这取决于你是否想要:

了解 NER:从NLTK 和关联的book 开始是一个很好的起点。

实施最佳解决方案: 在这里,您将需要寻找最先进的技术。查看TREC 中的出版物。更专业的会议是Biocreative(NER 应用于狭窄领域的一个很好的例子)。

实现最简单的解决方案:在这种情况下,您基本上只是想做简单的标记,然后取出标记为名词的单词。你可以使用来自 nltk 的标注器,或者甚至只是在 PyWordnet 中查找每个单词并使用最常见的词义对其进行标注。


大多数算法都需要某种形式的训练,并且在针对代表您将要求它标记的内容的内容进行训练时表现最佳。

【讨论】:

我认为即使是最简单的解决方案也需要进行一些 n-gram 分析来尝试查找多词实体。 osteele.com/projects/pywordnet 说“这是 PyWordNet 的旧版本。PyWordNet 在 2006 年被贡献给 NLTK 项目。” @Triptych:你会发现很多“我爱”和“其中”的 n-gram【参考方案3】:

有一些工具和 API。

有一个构建在 DBPedia 之上的工具,称为 DBPedia Spotlight (https://github.com/dbpedia-spotlight/dbpedia-spotlight/wiki)。您可以使用他们的 REST 接口或下载并安装您自己的服务器。最棒的是它将实体映射到它们的 DBPedia 存在,这意味着您可以提取有趣的链接数据。

AlchemyAPI (www.alchemyapi.com) 有一个 API 也可以通过 REST 执行此操作,并且他们使用免费增值模式。

我认为大多数技术都依赖于一点 NLP 来查找实体,然后使用 Wikipedia、DBPedia、Freebase 等基础数据库来进行消歧和相关性(例如,尝试确定提及 Apple 的文章是否是关于水果或公司...如果文章包括与苹果公司相关的其他实体,我们会选择公司。

【讨论】:

【参考方案4】:

您可能想尝试 Yahoo Research 最新的快速实体链接系统 - 该论文还更新了对使用基于神经网络的嵌入的 NER 新方法的参考:

https://research.yahoo.com/publications/8810/lightweight-multilingual-entity-extraction-and-linking

【讨论】:

【参考方案5】:

可以使用人工神经网络来执行命名实体识别。

这是在 TensorFlow (python) 中执行命名实体识别的双向 LSTM + CRF 网络的实现:https://github.com/Franck-Dernoncourt/NeuroNER(适用于 Linux/Mac/Windows)。

它在几个命名实体识别数据集上提供了最先进的结果(或接近它)。正如 Ale 所提到的,每个命名实体识别算法都有自己的缺点和优点。

ANN 架构:

在 TensorBoard 中查看:

【讨论】:

【参考方案6】:

我不太了解 NER,但从那个例子来看,你可以创建一个算法来搜索单词中的大写字母或类似的东西。为此,如果您的想法很小,我会推荐正则表达式作为最容易实施的解决方案。

另一种选择是将文本与数据库进行比较,您将匹配预先识别为感兴趣标签的字符串。

我的 5 美分。

【讨论】:

这不起作用。首先,它只适用于正确英文文本。除此之外,如果不区分大小写,它也不起作用。 是的...我 wuz n lunden n i sore barrack ohbama 这是更糟糕的建议。 NER是一个非常广泛的领域,并且已经有很多相同的研究。我建议使用 Stanford-NER 系统。

以上是关于命名实体识别算法的主要内容,如果未能解决你的问题,请参考以下文章

如何改进hanlp命名实体识别

命名实体识别常用算法及工程实现

命名实体识别(NER)算法

Java命名实体识别

命名实体识别(NER)详解及小样本下的NER问题解法汇总

机器学习 - 命名实体识别之Hidden Markov Modelling