Java命名实体识别

Posted

技术标签:

【中文标题】Java命名实体识别【英文标题】:Named entity recognition with Java 【发布时间】:2011-07-31 02:25:55 【问题描述】:

我想使用命名实体识别 (NER) 来为数据库中的文本找到足够的标签。我想构建自己的工具,而不是使用 NLTK 或 Lingpipe 之类的工具。

所以我的问题是:

我应该使用哪种算法?

构建这个工具有多难?

【问题讨论】:

既然有很多方法可以实现,如果您分享了您的目标以及您尝试 DIY 的原因,我们可以更好地通知您。您是否愿意使用任何库,例如机器学习? 【参考方案1】:

对于您的问题,这可能不是一个令人满意的答案:您可能希望评估现有服务提供商的任务,并包括他们的产品或通过网络服务集成一个。

我的经验是,对于某些定义明确且非常特定于领域的任务(例如:识别 Wikipedia 网页中的药物名称),您可以手动构建 NER 解决方案。 LingPipe、OpenNLP 等都是很好的工具。

但对于一般任务(例如:在互联网上的任何网页中查找人名),您需要大量的经验、工具和人力才能获得满意的结果。因此,使用外部提供商可能更有效。例如,OpenCalais 是免费服务;存在许多商业的。

【讨论】:

【参考方案2】:

寻找这篇论文的副本:

使用词簇进行名称标记和 判别训练

斯科特·米勒, Jethran Guinness, Alex Zamanian

【讨论】:

【参考方案3】:
    有大量的信息提取算法,仅举几例:正则表达式、静态方法、基于机器学习、字典等。您可以在 this survey 中找到有关方法的完整概述。 是的,很难构建一个工具来找到高精度的标签,因为它需要大量的测试和调整。

最容易实现的——查找标签的算法包括两个步骤:

提取候选标签 找到最重要的标签 - 最重要的。

在第一步中,您可以采用以下两种方法之一:

使用实体名称作为候选标签(这里需要使用信息提取框架) 使用名词或名词组作为候选标签(这里你需要使用词性标注器)

在第二步中,您应该使用 tf-idf 对文档语料库中的标签进行加权,并丢弃所有 tf​​-idf 权重低于给定垃圾保留的标签

如果您需要更强大的算法,请寻找主题检测框架或research papers on this topic。在***之后查看LSA:

潜在语义分析 (LSA) 是自然语言处理(尤其是矢量语义)中的一种技术,通过生成与文档和术语相关的一组概念来分析一组文档与其包含的术语之间的关系。

【讨论】:

请检查他的问题 - ***.com/questions/5544475/…。 !另请查看这篇文章 - nlpers.blogspot.com/2011/04/…,它描述了研究人员在创建标记器方面的实践经验。【参考方案4】:

前段时间我研究马尔可夫链时做过这个。

不管怎样,答案是:

我应该使用哪种算法?

例如,斯坦福 NLP 使用条件随机场 (CRF)。如果您没有尝试有效地做到这一点,那么您就像来自 Jackass 3d 的家伙,他是 pissing in the wind。解析人类语言没有简单的方法,因为它的结构很复杂,而且有很多例外。

构建这个工具有多难?

好吧,如果您知道自己在做什么,那一点也不难。输入规则和逻辑的过程可能既烦人又耗时,修复错误可能很重要。但在 20 年内,你可以做出一些几乎有用的东西(对你自己)。

【讨论】:

【参考方案5】:

NLTK 是一个开源项目。您可能想稍微探索一下 - 看看它是如何完成的,也许参与社区,而不是尝试从头开始完全解决问题......

【讨论】:

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

基于深度学习做命名实体识别

如何改进hanlp命名实体识别

命名实体识别研究综述

命名实体识别---入门

自然语言处理信息抽取:命名实体识别与关系抽取

机器学习如何进行中文命名实体识别?(面试回答)