比较来自 Stanford coreNLP、SpaCy 和 Google cloud 的 NER 库

compare NER library from Stanford coreNLP, SpaCy And Google cloud

我想从文本中识别的名字。但是我很困惑我必须为 NER 使用哪个 NLP 库。我找到了以下针对 NER 的最佳 NLP 库 1.斯坦福核心NLP 2.宽敞 3.Google云。

我找不到哪个库会提供更准确的结果和更好的性能。请帮帮我。

spaCy 在 NLP 方面具有工业实力,在 NER 方面显然更快更准确。它还与多语言模型捆绑在一起。检查 spaCy

AllenNLP 还带有最先进的 NER 模型,但使用起来稍微复杂一些。检查 AllenNLP demo

如果付费墙不是问题,那么我建议使用 Google 的 Cloud Natural Language(当然它更快更准确)。

我个人用过spaCy和AllenNLP。如果您只是想开始,我会说选择 spaCy。

希望对您有所帮助。

TL;DR: 简单地选择一个现有的系统,它对你来说似乎很容易实现并且似乎具有合理的准确性。这可以是云产品(例如,IBM Watson Conversation、Google DialogFlow)或库或可执行文件(例如,RASA NLU 或自然语言工具包)。仅根据准确性选择系统并非易事,如果您总是想要最好的,那么您应该经常在系统之间切换。

您的问题是哪个系统将提供最准确的结果,同时不需要太多的计算能力。在您从文本中识别人名的情况下。自然语言处理 (NLP) 领域瞬息万变。为了证明这一点,我们可以看看命名实体识别 (NER) 的当前技术水平 (SOTA)。 This Github 页面对 CONLL03 NER 数据集有一个很好的总结,我将把它复制到这里并使用公司名称,因为它们更容易记住:

  1. Zalando。 F1 分数:0.931。日期:2018 年 6 月 24 日
  2. Google。 F1 分数:0.928。日期:2018 年 10 月 31 日
  3. Stanford / Google Brain。 F1 分数:0.926。日期:2018 年 9 月 22 日

根据此列表,我们观察到,在 2019 年初,每隔几个月就会获得一个新的 SOTA。有关复杂 NLP 任务的更新基准列表,请参阅 https://rajpurkar.github.io/SQuAD-explorer/。所以,由于 SOTA 算法每个月都在变化,“最准确的系统(库)”也不得不经常变化。此外,您数据的准确性不仅取决于系统,还取决于以下因素:

  • 使用的算法。可能是Google发表了SOTA研究但没有实现。可以肯定的是,解决这个问题的唯一方法是不断测试所有系统。
  • 训练数据大小。虽然越大越好,但有些算法可以更好地处理少量示例(few-shot learning)。
  • 域。 一种算法可能更适合处理正式的政府文本而不是不太正式的维基百科文本。
  • 数据语言。 由于大多数研究都集中在 public 数据集上显示 SOTA,因此它们通常针对英语进行了优化。它们在其他语言上的表现可能有所不同。

考虑到所有这些因素,我建议选择一个现有系统,并根据定价和易用性等许多要求进行选择。