44

我目前正在研究从文本(网络上的很多文章)中提取人名、位置、技术词汇和类别的选项,然后将其输入到 Lucene/ElasticSearch 索引中。然后将附加信息添加为元数据,并应提高搜索的精度。

例如,当有人查询“wicket”时,他应该能够确定他是指板球运动还是 Apache 项目。到目前为止,我试图自己实现这一点,但取得了轻微的成功。现在我找到了很多工具,但我不确定它们是否适合这项任务,哪些与 Lucene 集成得很好,或者实体提取的精度是否足够高。

我的问题:

  • 有人对上面列出的一些工具及其精度/召回有经验吗?或者,如果需要 + 可用的训练数据。
  • 是否有文章或教程可以让我开始使用每个工具的实体提取 (NER)?
  • 它们如何与 Lucene 集成?

以下是与该主题相关的一些问题:

4

4 回答 4

17

您在“检票口”示例中面临的问题称为实体消歧,而不是实体提取/识别 (NER)。NER 可能很有用,但前提是类别足够具体。大多数 NER 系统没有足够的粒度来区分运动和软件项目(这两种类型都超出了通常公认的类型:人、组织、位置)。

为了消除歧义,您需要一个知识库来消除实体的歧义。DBpedia 是一个典型的选择,因为它覆盖面广。请参阅我对如何使用 DBPedia 从内容中提取标签/关键字的回答?我提供了更多解释,并提到了几种消除歧义的工具,包括:

这些工具通常使用 REST 等与语言无关的 API,我不知道它们是否直接提供 Lucene 支持,但我希望我的回答对您尝试解决的问题有所帮助。

于 2011-09-19T15:26:17.483 回答
2

您无需培训即可使用 OpenNLP 提取人名、地点、组织的名称。您只需使用可以从这里下载的现有模型:http: //opennlp.sourceforge.net/models-1.5/

有关如何使用这些模型之一的示例,请参见: http: //opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind

于 2014-07-08T13:16:01.733 回答
0

Rosoka是一种商业产品,可提供“显着性”计算,用于衡量术语或实体对文档的重要性。显着性是基于语言使用而不是频率。使用显着性值,您可以确定整个文档的主要主题。输出是您选择的 XML 或 JSON,这使得它非常容易与 Lucene 一起使用。它是用java编写的。https://aws.amazon.com/marketplace/pp/B00E6FGJZ0上提供了 Amazon Cloud 版本。试用费用为 0.99 美元/小时。Rosoka Cloud 版本没有完整的 Rosoka 提供的所有 Java API 功能。是的,两个版本都根据语言用法执行实体和术语消歧。

消歧,无论是人为还是软件,都需要有足够的上下文信息来确定差异。上下文可以包含在文档内、语料库约束内或用户的上下文内。前者更具体,后者具有更大的潜在歧义。即在谷歌搜索中输入关键字“wicket”,可以指板球、Apache 软件或星球大战 Ewok 角色(即实体)。一般句子“三柱门由击球手守卫”在句子中具有上下文线索,可以将其解释为对象。“Wicket Wystri Warrick 是一名男性 Ewok 侦察兵”应输入“Wicket”作为个人实体“Wicket Wystri Warrick”的名字。“欢迎来到阿帕奇检票口”

于 2013-10-28T13:42:58.200 回答
0

最近我一直在摆弄 stanford crf ner。他们已经发布了很多版本http://nlp.stanford.edu/software/CRF-NER.shtml

好消息是您可以训练自己的分类器。您应该点击链接,其中包含有关如何训练自己的 NER 的指南。 http://nlp.stanford.edu/software/crf-faq.shtml#a 不幸的是,在我的例子中,命名实体没有从文档中有效地提取出来。大多数实体未被发现。

以防万一你觉得它有用。

于 2015-09-26T06:25:22.057 回答