自然语言处理 (NLP) 技术为所有聊天机器人、语音助手、预测文本以及渗透到我们生活中的其他语音/文本应用程序提供支持,在过去几年中取得了显著发展。市面上有各种各样的开源 NLP 工具,所以我决定调查一下,以帮助您规划下一个基于语音或文本的应用程序。
在本次评测中,我重点关注了使用我熟悉的语言的工具,即使我对所有工具都不熟悉。(无论如何,我没有找到很多我不熟悉的语言的工具。) 也就是说,由于各种原因,我排除了三种我熟悉的语言的工具。
我没有包含的最明显的语言可能是 R,但我发现的大多数库一年多都没有更新了。这并不总是意味着它们的维护不好,但我认为它们应该更频繁地更新,以便与同一领域的其他工具竞争。我还选择了最有可能在生产场景(而不是学术界和研究领域)中使用的语言和工具,我主要将 R 用作研究和发现工具。
我还惊讶地发现 Scala 库相当停滞不前。自从我上次使用 Scala 以来已经好几年了,当时它非常流行。大多数库自那时以来都没有更新,或者只进行了一些更新。
最后,我排除了 C++。这主要是因为自从我上次用 C++ 编写代码以来已经很多年了,而且我工作过的组织也没有将 C++ 用于 NLP 或任何数据科学工作。
Python 工具
自然语言工具包 (NLTK)
很容易论证,自然语言工具包 (NLTK) 是我调查的工具中最全功能的工具。它实现了您可能需要的 NLP 的几乎任何组件,例如分类、标记化、词干提取、标记、解析和语义推理。而且,每种组件通常都有不止一种实现方式,因此您可以选择您想要使用的确切算法或方法。它还支持多种语言。但是,它以字符串的形式表示所有数据,这对于简单的构造来说很好,但使得使用一些高级功能变得困难。文档也很密集,但有很多文档,以及一本很棒的书。与其他工具相比,该库也比较慢。总的来说,这是一个用于实验、探索和需要特定算法组合的应用程序的绝佳工具包。
SpaCy
SpaCy 可能是 NLTK 的主要竞争对手。在大多数情况下,它速度更快,但每个 NLP 组件只有一个实现。此外,它将所有内容表示为对象而不是字符串,这简化了构建应用程序的界面。这也帮助它与许多其他框架和数据科学工具集成,因此一旦您更好地了解您的文本数据,您就可以做更多的事情。但是,SpaCy 不支持像 NLTK 那样多的语言。它确实有一个简单的界面,具有简化的选择集和出色的文档,以及用于语言处理和分析的各个组件的多个神经模型。总的来说,对于需要生产环境中性能良好且不需要特定算法的新应用程序来说,这是一个很棒的工具。
TextBlob
TextBlob 有点像是 NLTK 的扩展。您可以通过 TextBlob 以简化的方式访问 NLTK 的许多功能,并且 TextBlob 还包括来自 Pattern 库的功能。如果您刚刚入门,这可能是在学习时使用的好工具,它可以在不需要过度高性能的应用程序中用于生产。总的来说,TextBlob 无处不在,非常适合小型项目。
Textacy
这个工具可能是我用过的任何库中最好听的名字。念几遍“Textacy”,同时强调“ex”并拉长“cy”。它不仅念起来很棒,而且也是一个很棒的工具。它使用 SpaCy 作为其核心 NLP 功能,但它处理处理前后的大量工作。如果您计划使用 SpaCy,您不妨使用 Textacy,这样您就可以轻松引入多种类型的数据,而无需编写额外的辅助代码。
PyTorch-NLP
PyTorch-NLP 问世才一年多一点,但已经获得了庞大的社区。它是快速原型设计的绝佳工具。它也会经常使用最新的研究进行更新,顶级公司和研究人员发布了许多其他工具来完成各种惊人的处理,例如图像转换。总的来说,PyTorch 的目标是研究人员,但它也可以用于原型设计和初始生产工作负载,并使用最先进的算法。在其之上创建的库也可能值得研究。
Node 工具
Retext
Retext 是 unified collective 的一部分。Unified 是一个接口,允许多个工具和插件有效地集成和协同工作。Retext 是 unified 工具使用的三种语法之一;其他两种是用于 markdown 的 Remark 和用于 HTML 的 Rehype。这是一个非常有趣的想法,我很高兴看到这个社区发展壮大。Retext 没有公开其许多底层技术,而是使用插件来实现您可能旨在通过 NLP 实现的结果。使用简单的插件可以轻松完成拼写检查、排版修复、情感检测或确保文本可读等操作。总的来说,如果您只需要完成某件事,而无需了解底层过程中的所有内容,那么这是一个出色的工具和社区。
Compromise
Compromise 当然不是最复杂的工具。如果您正在寻找最先进的算法或最完整的系统,那么这可能不是适合您的工具。但是,如果您想要一个具有广泛功能并且可以在客户端运行的高性能工具,则应查看 Compromise。总的来说,它的名称是准确的,因为创建者通过专注于具有更具体功能的小型软件包来在功能和准确性方面做出妥协,从而受益于用户更多地了解周围环境。
Natural
Natural 包含您可能在通用 NLP 库中期望的大多数功能。它主要侧重于英语,但也贡献了一些其他语言,并且社区对其他贡献持开放态度。它支持标记化、词干提取、分类、语音学、词频-逆文档频率、WordNet、字符串相似性和一些屈折变化。它可能最类似于 NLTK,因为它试图将所有内容都包含在一个软件包中,但它更易于使用,并且不一定以研究为中心。总的来说,这是一个相当完整的库,但它仍在积极开发中,可能需要额外的底层实现知识才能完全有效。
Nlp.js
Nlp.js 构建于包括 Franc 和 Brain.js 在内的多个其他 NLP 库之上。它为 NLP 的许多组件(如分类、情感分析、词干提取、命名实体识别和自然语言生成)提供了一个很好的接口。它还支持相当多的语言,如果您计划使用英语以外的其他语言,这将很有帮助。总的来说,这是一个很棒的通用工具,它为其他几个很棒的工具提供了一个简化的接口。在您需要更强大或更灵活的工具之前,这很可能在您的应用程序中走得很远。
Java 工具
OpenNLP
OpenNLP 由 Apache 基金会托管,因此很容易将其集成到其他 Apache 项目中,例如 Apache Flink、Apache NiFi 和 Apache Spark。它是一个通用的 NLP 工具,涵盖了 NLP 的所有常见处理组件,并且可以从命令行或在应用程序中作为库使用。它还广泛支持多种语言。总的来说,如果您使用 Java,OpenNLP 是一个功能强大的工具,具有许多功能,并且可以用于生产工作负载。
StanfordNLP
Stanford CoreNLP 是一组工具,提供统计 NLP、深度学习 NLP 和基于规则的 NLP 功能。已经创建了许多其他编程语言绑定,因此该工具可以在 Java 之外使用。它是由精英研究机构创建的非常强大的工具,但它可能不是生产工作负载的最佳选择。该工具已获得双重许可,商业用途需要特殊许可。总的来说,这是一个用于研究和实验的绝佳工具,但在生产系统中可能会产生额外的成本。Python 实现也可能比 Java 版本更能引起许多读者的兴趣。此外,斯坦福大学的一位教授在 Coursera 上教授了最好的机器学习课程之一。查看一下以及其他很棒的资源。
CogCompNLP
CogCompNLP 由伊利诺伊大学开发,也有一个具有类似功能的 Python 库。它可以用于本地或远程系统处理文本,这可以大大减轻本地设备的负担。它提供诸如标记化、词性标记、分块、命名实体标记、词形还原、依存关系和成分句法分析以及语义角色标记等处理功能。总的来说,这是一个用于研究的绝佳工具,它有很多您可以探索的组件。我不确定它是否非常适合生产工作负载,但如果您计划使用 Java,则值得一试。
您最喜欢的开源 NLP 工具和库是什么?请在评论中分享 - 特别是如果有一个我没有包含在内。
3 条评论