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

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

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

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

例子:

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

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

【问题讨论】:

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


    【解决方案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 系统。
          猜你喜欢
          • 2014-03-17
          • 2011-07-31
          • 2018-03-08
          • 2020-07-02
          • 1970-01-01
          • 2021-05-06
          • 2012-09-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多