让我们一起了解一下适用于你自己的自然语言处理(NLP)应用的一些工具吧。
在过去几年中,自然语言处理(NLP)技术在聊天机器人、语音助手、文本预测等领域取得了显著进展。目前有许多开源的NLP工具,因此我决定对现有的开源NLP工具进行一番调研,以帮助你规划开发下一个基于语音或文本的应用程序。
虽然我对所有工具都不熟悉,但我将从我熟悉的编程语言入手来介绍这些工具(对于我不熟悉的语言,我未能找到大量可用的工具)。同时,出于各种原因,我排除了一些我熟悉的语言中的工具。
R语言可能是未被包含在内的最重要的语言,因为大多数我发现的库已经有超过一年没有更新了。虽然这并不一定意味着它们缺乏维护,但我认为这些工具需要更多的更新,以便与其他领域的工具竞争。此外,我倾向于选择那些在生产环境中更可能被使用的语言和工具,而不是那些主要用于学术研究的工具。而我主要使用R语言作为研究和发现工具。
我还注意到Scala的许多库也很久没有更新了。我上一次使用Scala是在两年前,那时它非常流行。但大多数库自那时起就再没有更新过,或者只有少数几个库得到了更新。
最后,我排除了C++。这主要是因为我上一次使用C++编程已经是很多年前的事了,而且我所在的组织尚未将C++用于NLP或任何数据科学领域的工作。
自然语言工具包(NLTK)
毫无疑问,自然语言工具包(NLTK)是我研究过的所有工具中最全面的一个。它几乎涵盖了自然语言处理的所有主要功能,如分类、分词、词干化、标注、断句和语义推理。每个功能都有多种实现方式,因此你可以选择最适合你的算法和方法。同时,它支持多种语言。不过,它以字符串形式表示所有数据,对于简单的数据结构来说可能很方便,但对于高级功能则可能不太合适。其文档相对复杂,但也有许多其他人编写的使用指南,例如那本非常实用的书籍。相比其他工具,NLTK的运行速度较慢。但总的来说,这个工具包非常适合需要具体算法组合的实验、探索和实际应用。
SpaCy
SpaCy可能是NLTK的主要竞争对手。在大多数情况下,SpaCy的速度比NLTK快。SpaCy将所有内容表示为对象而非字符串,这简化了应用程序构建接口,也便于与多种框架和数据科学工具集成,使你更容易理解文本数据。然而,SpaCy不像NLTK那样支持多种语言。SpaCy的界面简洁,功能齐全,文档完备,还有多种神经网络模型用于处理和分析各种组件。总的来说,对于需要在生产环境中表现良好的新应用程序,SpaCy是一个不错的选择。
TextBlob
TextBlob是NLTK的一个扩展库。你可以用TextBlob更简便地使用NLTK的功能,TextBlob还包含了Pattern库中的功能。如果你刚开始学习,TextBlob是一个不错的工具,适用于对性能要求不高的生产环境应用。总体来说,TextBlob适用于各种场景,特别是小型项目。
Textacy
这个工具的名字很好听。它不仅名字读起来悦耳,本身也是一个不错的工具。Textacy使用SpaCy作为其自然语言处理的核心功能,但在处理过程中做了很多额外的工作。如果你打算使用SpaCy,Textacy是一个更好的选择,因为它无需编写额外的附加代码即可处理不同种类的数据。
PyTorch-NLP
PyTorch-NLP是一个新出现的工具,但已拥有庞大的社区。它适用于快速原型开发。当出现最新研究成果或大公司推出完成新奇处理任务的工具时,它会被及时更新。总的来说,PyTorch的目标用户是研究人员,但它也可以用于原型开发或使用最先进算法的初步生产负载。基于PyTorch-NLP创建的库也值得关注。
Retext
Retext是Unified集合的一部分。Unified是一个接口,可以集成不同的工具和插件,使其高效工作。Retext是Unified工具中使用的三种语法之一,另外两种分别是用于Markdown的Remark和用于HTML的Rehype。这是一个有趣的想法,我很高兴看到这个社区的发展。Retext不涉及很多底层技术,更多的是通过插件来完成NLP任务。拼写检查、字形修复、情绪检测和增强可读性都可以通过简单的插件实现。总的来说,如果你不想深入了解底层处理技术,Retext和这个社区是一个不错的选择。
Compromise
Compromise显然不是最复杂的工具,如果你寻找的是拥有最先进算法和最完整系统的工具,它可能不适合你。然而,如果你希望使用一个性能良好、功能广泛且能在客户端运行的工具,Compromise值得一试。总体来说,其名称“折中”是准确的,因为作者更关注于小而精的软件包,这些软件包在功能性和准确性上有所折中,得益于用户对使用环境的理解。
Natural
Natural包含了一般自然语言处理库的大部分功能。它主要处理英文文本,但也包括一些其他语言,其社区也欢迎支持更多语言。它能进行分词、词干化、分类、语音处理、TF-IDF计算、WordNet、字符相似度计算和一些变换。它与NLTK有的一比,因为它试图将所有功能整合在一个包中,但它更易于使用,且不一定专注于研究。总的来说,这是一个非常完整的库,目前仍在积极开发中,但可能需要对底层实现有更多了解才能充分发挥其作用。
Nlp.js
Nlp.js建立在其他几个NLP库之上,包括Franc和Brain.js。它为许多NLP组件提供了一个很好的接口,如分类、情感分析、词干化、命名实体识别和自然语言生成。它还支持一些其他语言,在处理英语以外的语言时能提供帮助。总之,它是一个不错的通用工具,并提供了调用其他工具的简化接口。在你需要更强大或更灵活的工具之前,这个工具可能在你的应用程序中使用很长时间。
OpenNLP
OpenNLP由Apache基金会管理,因此很容易集成到其他Apache项目中,如Apache Flink、Apache NiFi和Apache Spark。这是一个通用的NLP工具,包含所有NLP组件中的通用功能,可以通过命令行或以包的形式导入到应用中使用。它还支持多种语言。OpenNLP是一个高效的工具,包含了许多特性,如果你使用Java开发生产环境产品,它是一个不错的选择。
Stanford CoreNLP
Stanford CoreNLP是一个工具集,提供了统计NLP、深度学习NLP和基于规则的NLP功能。该工具也有其他编程语言的版本,因此可以脱离Java使用。它是由高水平的研究机构创建的一个高效工具,但在生产环境中可能不是最佳选择。此工具采用双许可证,具有可用于商业目的的特定许可证。总的来说,在研究和实验中它是一个很棒的工具,但在生产系统中可能会带来一些额外成本。比起Java版本,读者可能对它的Python版本更感兴趣。同样,在Coursera上的最佳机器学习课程之一是由斯坦福教授提供的,点击此处访问其他优秀的资源。
CogCompNLP
CogCompNLP由伊利诺伊大学开发的一个工具,也有一个相似功能的Python版本。它可以用于处理文本,包括本地处理和远程处理,大大减轻了本地设备的压力。它提供了许多处理功能,如分词、词性标注、断句、命名实体标注、词形还原、依存分析和语义角色标注。它是一个很好的研究工具,你可以自己探索其不同功能。我不确定它是否适合生产环境,但如果你使用Java,它值得一试。
你最喜欢的开源NLP工具和库是什么?请在评论区分享文中没有提到的工具。