当前位置: 首页 > 科技观察

12个用于自然语言处理的开源工具_0

时间:2023-03-14 00:39:51 科技观察

让我们来看看您可以在自己的NLP应用程序中使用的十几个工具。--DanBarker(作者)在过去的几年里,自然语言处理(NLP)推动了聊天机器人、语音助手、文本预测以及许多其他已渗透到我们日常生活中的语音或文本应用程序的发展。市面上有各种开源NLP工具,因此我决定研究当前的开源NLP工具,以帮助您规划下一个基于语音或文本的应用程序。虽然我不熟悉所有的工具,但我会用我熟悉的编程语言来介绍它们(我找不到大量我不熟悉的语言的工具)。也就是说,出于各种原因,我排除了我熟悉的三种语言之外的工具。R可能是未包括在内的最重要的语言,因为我发现的大多数库都已经一年多没有更新了。这并不一定意味着它们没有得到很好的维护,但我认为它们应该获得更多更新以与同一领域的其他工具竞争。我还选择了最有可能在生产场景中使用的语言和工具(而不是学术界和研究),我主要将R用作研究和发现工具。我还对许多Scala的库没有更新感到惊讶。自从我上次使用Scala已经两年了,当时它非常流行。但是大多数图书馆从那时起就没有更新过,或者只有少数图书馆更新过。最后,我排除了C++。这主要是因为我上次使用C++编程已经很多年了,而我工作的组织还没有将C++用于NLP或数据科学中的任何东西。Python工具NaturalLanguageToolkit(NLTK)毫无疑问,NaturalLanguageToolkit(NLTK)是我研究过的所有工具中功能最齐全的。它几乎实现了自然语言处理中的大部分功能组件,例如分类、标记化、词干提取、标记、分词和语义推理。每个都有许多不同的实现,因此您可以选择特定的算法和方法。同时,它还支持不同的语言。但是,它以字符串的形式表示所有的数据,对于一些简单的数据结构来说可能比较方便,但是如果要使用一些高级的功能可能就有点困难了。它的文档有点复杂,但是有很多其他人编写的文档,例如这本好书。与其他工具相比,这个工具库运行起来有点慢。但总的来说,这个工具包非常适合需要特定算法组合的实验、探索和实际应用。SpaCySpaCy可能是NLTK的主要竞争对手。在大多数情况下比NLTK更快,但SpaCy对于每个NLP功能组件只有一个实现。SpaCy通过将所有内容表示为对象而不是字符串来简化应用程序的构建界面。这也有助于它与各种框架和数据科学工具的集成,使您更容易理解您的文本数据。但是,SpaCy不像NLTK那样支持那么多语言。它确实有一个简单的界面,一组简化的选项和全面的文档,以及用于语言处理和分析的各种组件的各种神经网络模型。总的来说,对于需要在生产中表现良好且不需要特定算法的新应用程序来说,它是一个很好的工具。TextBlobTextBlob是NLTK的扩展库。您可以通过TextBlob以更简单的方式使用NLTK功能,它还包括Pattern库中的功能。如果您刚刚起步,那么对于不需要太多性能的生产应用程序来说,这是一个很好的工具。一般来说,TextBlob适用于任何情况,但它特别适合小型项目。Textacy这个工具的名字是我用过的最好听的。先重读“ex”再带出“cy”,多读几遍“Textacy”。它不仅有一个好名字,而且它本身也是一个很棒的工具。它使用SpaCy作为其自然语言处理的核心功能,但它在处理前后做了很多工作。如果要使用SpaCy,最好使用Textacy,它可以处理不同种类的数据,而无需编写额外的额外代码。PyTorch-NLPPyTorch-NLP只出现了短短一年,但它已经拥有一个庞大的社区。它适用于快速原型制作。当新的研究出现时,或者当主要公司或研究人员引入其他工具来完成新的处理任务(例如图像转换)时,它就会更新。一般来说,PyTorch是针对研究人员的,但它也可以用于原型设计,或使用最先进的算法进行初始生产负载。在此基础上创建的库也值得研究。Node.js工具RetextRetext是统一集合的一部分。统一是一个接口,可以集成不同的工具和插件,使它们能够高效地工作。Retext是统一工具中使用的三种语法之一,其他两种是Markdown的Remark和HTML的Rehype。这是一个非常有趣的想法,我很高兴看到这个社区如何发展。Retext并没有涉及很多底层技术,更多的是在NLP任务中使用插件来完成你想做的事情。拼写检查、字形修复、情绪检测和增强的可读性都可以通过简单的插件来完成。总的来说,如果您想在不了解底层处理技术的情况下完成任务,这个工具和社区是一个不错的选择。CompromiseCompromise显然不是最复杂的工具,如果你正在寻找最先进的算法和最完整的系统,它可能不适合你。不过,如果你想要一款性能好、功能丰富,而且还运行在客户端的工具,Compromise是值得一试的。总的来说,它的名字(“妥协”)是准确的,因为作者更侧重于功能更具体的小包,在功能和准确性上有所妥协,这有利于用户对使用环境的理解。NaturalNatural包含常规自然语言处理库中的大部分功能。它主要处理英文文本,但也包括一些其他语言,其社区欢迎对其他语言的支持。它能够进行标记化、词干提取、分类、语音处理、词频-逆文档频率计算(TF-IDF)、WordNet、字符相似度计算和一些转换。它与NLTK有一些比较,因为它希望将所有内容都放在一个包中,但它更易于使用并且不一定以研究为重点。总的来说,这是一个非常完整的库,仍在积极开发中,但可能需要更多的底层实现知识才能完全有效。Nlp.jsNlp.js建立在其他几个NLP库之上,包括Franc和Brain.js。它为许多NLP组件提供了一个很好的接口,例如分类、情感分析、词干提取、命名实体识别和自然语言生成。它还支持其他一些语言,这可以在您处理英语以外的语言时提供帮助。总而言之,它是一个很好的通用工具,它提供了一个简化的接口来调用其他工具。在您需要更强大或更灵活的东西之前,此工具可能会在您的应用程序中使用很长时间。Java工具OpenNLPOpenNLP由ApacheFoundation管理,因此可以很容易地集成到其他Apache项目中,例如ApacheFlink、ApacheNiFi和ApacheSpark。这是一个通用的NLP工具,包括所有NLP组件中的通用功能,可以通过命令行使用或作为包导入到应用程序中。它还支持多种语言。OpenNLP是一个非常高效的工具,功能非常多,如果你使用Java开发生产环境产品,它是一个不错的选择。StanfordCoreNLPStanfordCoreNLP是一个提供统计NLP、深度学习NLP和基于规则的NLP功能的工具集。该工具也可用于许多其他编程语言,因此无需Java即可使用。它是由高级研究机构创建的高效工具,但在生产环境中可能不是最好的。该工具具有双重许可,具有可用于商业目的的特定许可。总而言之,它是研究和实验中的一个很好的工具,但在生产系统中可能会产生一些额外的成本。读者可能对Python版本比Java版本更感兴趣。此外,Coursera上最好的机器学习课程之一是由斯坦福教授提供的,请访问此处的其他重要资源。CogCompNLPCogCompNLP是伊利诺伊大学开发的工具,也有一个具有类似功能的Python版本。可以用来处理文本,包括本地处理和远程处理,可以大大减轻您本地设备的压力。它提供了许多处理功能,例如分词、词性标注、句子分割、命名实体标注、词形还原、依存分析和语义角色标注。这是一个很棒的研究工具,您可以自行探索它的不同功能。我不确定它是否适合生产,但如果您使用的是Java,则值得一试。