命名实体识别的算法

时间:2009-06-22 12:26:34

标签: php python extract analysis named-entity-recognition

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

我知道维基百科有一篇关于此内容的文章以及许多描述NER的其他页面,我最好从你那里听到关于这个主题的文章:

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

示例:

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

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

6 个答案:

答案 0 :(得分:13)

如果您打算使用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美元。

干杯,

答案 1 :(得分:3)

这取决于你是否想要:

要了解NER :一个很好的起点是NLTK和关联的book

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

实现最简单的解决方案:在这种情况下,您基本上只想做简单的标记,并拉出标记为名词的单词。您可以使用nltk中的标记器,甚至只需查找PyWordnet中的每个单词,并使用最常用的单词标记它。


大多数算法都需要进行某种培训,并且在对内容进行培训时表现最佳,这些内容代表了您要求标记的内容。

答案 2 :(得分:1)

那里有一些工具和API。

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

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

我认为大多数技术都依赖于一些NLP来查找实体,然后使用像维基百科,DBPedia,Freebase等基础数据库来消除歧义和相关性(例如,试图决定提到Apple的文章是否是关于水果或公司...我们会选择公司,如果该文章包括与苹果公司相关的其他实体)。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

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

ANN架构:

enter image description here

在TensorBoard中查看:

enter image description here

答案 5 :(得分:-10)

我真的不知道NER,但从这个例子来看,你可以制作一个搜索大写字母的算法或类似的东西。为此,如果你想的话,我会推荐正则表达式作为最容易实现的解决方案。

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

我的5美分。