使用Java命名实体识别
我想使用命名实体识别(NER)来为数据库中的文本找到足够的标签。 我没有使用像NLTK或Lingpipe这样的工具,而是想构建自己的工具。
所以我的问题是:
-
我应该使用哪种算法?
-
构建这个工具有多难?
前一段时间我研究马尔可夫链时做过这个。
无论如何,答案是:
我应该使用哪种算法?
例如,斯坦福NLP使用条件随机场(CRF)。 如果你不是想有效地做到这一点,你就像Jackass 3d的家伙一样pissing in the wind
中pissing in the wind
。 解析人类语言没有简单的方法,因为它的构造很复杂,并且有很多例外。
构建这个工具有多难?
好吧,如果你知道自己在做什么,那就不那么难了。 输入规则和逻辑的过程可能是烦人且耗时的,并且修复错误可能是非常重要的。 但是在20年后,你可以做出一些对自己有用的东西。
- 有很多信息提取算法,仅举几例:正则表达式,静态方法,基于机器学习,字典等。您可以在本调查中找到有关方法的完整概述。
- 是的,很难建立一个工具,它可以找到高精度的标签,因为它需要大量的测试和调整。
最简单的实现 – 查找标签的算法将包含两个步骤:
- 提取标签的候选者
- 找到最重要的标签 – 大多数迪斯提。
在第一步中,您可以采用以下两种方法之一:
- 使用实体名称作为候选标记(这里需要使用信息提取框架)
- 使用名词或名词组作为候选标签(这里需要使用词性标注器)
在第二步中,您应该使用tf-idf对文档语料库中的标签进行加权,并丢弃tf-idf权重低于给定垃圾箱的所有标签
如果您需要更强大的算法,请查找有关此主题的主题检测框架或研究论文 。 在维基百科之后还检查LSA :
潜在语义分析(LSA)是自然语言处理中的一种技术,特别是在矢量语义中,通过产生与文档和术语相关的一组概念来分析一组文档与它们包含的术语之间的关系。
NLTK是一个开源项目。 你可能想稍微探讨一下 – 看看它是如何完成的,也许是参与社区,而不是试图从头开始自己完全解决问题……
寻找本文的副本:
使用Word群集和判别式培训进行名称标记
Scott Miller,Jethran Guinness,Alex Zamanian
对于您的问题,这可能不是一个令人满意的答案,您仍然可以:您可能希望评估该任务的现有服务提供商,并包括他们的产品或通过Web服务集成一个。
我的经验是,对于某些定义明确且特定于域的任务(例如:识别维基百科网页中的药物名称),您可以手动构建NER解决方案。 LingPipe , OpenNLP等都是很好的工具。
但对于通用任务(例如:在互联网上的任何网页中查找人名),您需要大量的经验,工具和人力才能获得满意的结果。 因此,使用外部提供商可能更有效。 例如, OpenCalais是一项免费服务; 许多商业存在。