自然语言处理 (简称NLP )最好描述为“语音和文本的AI”。 语音命令,语音和文本翻译,情感分析,文本摘要以及许多其他语言应用程序和分析背后的魔力,通过深度学习极大地改善了自然语言处理。
Python语言为包括NLP在内的各种机器学习提供了便捷的前端。 实际上,在Python生态系统中有很多NLP财富可供选择。 在本文中,我们将探讨可用于Python的每个NLP库-它们的用例,优缺点,以及普遍的流行程度。
[ 同样在InfoWorld上:6个您不想错过的Python新功能 ]
请注意,这些库中的某些库提供了其他库所公开的相同功能的更高版本,从而使该功能更易于使用,但会牺牲一些精度或性能。 您将要选择一个既适合您的专业水平又适合项目性质的库。
核心自然语言处理
斯坦福大学的产品CoreNLP库被构建为可用于生产的自然语言处理解决方案,能够大规模提供NLP预测和分析。 CoreNLP用Java编写,但是可以使用多个Python软件包和API,包括一个称为StanfordNLP的本地Python NLP库。
CoreNLP包括各种语言工具-语法标记,命名实体识别,解析,情感分析等。 它被设计为与人类语言无关,目前除英语外还支持阿拉伯语,中文,法语,德语和西班牙语( 可从第三方获得俄语,瑞典语和丹麦语的支持)。 CoreNLP还包括一个Web API服务器 ,这是一种无需太多额外工作即可提供预测的便捷方法。
从StanfordNLP开始的最简单的地方就是CoreNLP的Python包装器,这是Stanford NLP Group创建的参考实现。 除了有据可查之外,StanfordNLP还定期维护; 许多其他CoreNLP的Python库在一段时间内未更新。
CoreNLP还支持NLTK的使用,NLTK是下面讨论的主要Python NLP库。 从3.2.3版开始,NLTK在其解析器中包含与CoreNLP的接口。 只要确保使用正确的API即可 。
CoreNLP的明显缺点是您需要对Java有一定的了解才能启动并运行它,但是仔细阅读文档并不能做到。 另一个障碍可能是CoreNLP的许可。 整个工具包均根据GPLv3进行了许可,这意味着您在分发给他人的专有软件中使用任何软件都需要获得商业许可 。
Gensim
Gensim仅做两件事,但做得非常好。 它的重点是统计语义-分析文档的结构,然后根据它们的相似性对其他文档评分。
Gensim可以通过将文档流式传输到其分析引擎并逐步对其进行无监督学习来处理非常大的文本。 它可以创建多种类型的模型,每种模型都适合不同的场景:Word2Vec,Doc2Vec,FastText和Latent Dirichlet分配。
Gensim的详细文档包括教程和操作指南,它们解释了关键概念并通过动手示例进行了说明。 通用食谱也可以在Gensim GitHub存储库中找到 。
[ 不要错过InfoWorld的2020年度技术奖获奖者:年度最佳软件开发,云计算,数据分析和机器学习产品 ]
NLTK
Natural Language Toolkit (简称NLTK)是Python自然语言处理库中最著名,功能最强大的工具。 开箱即用,可以使用许多语料库(数据集)和训练有素的模型 ,因此您可以立即开始尝试NLTK。
如文档所述,NLTK提供了多种用于处理文本的工具:“分类,标记化,词干,标记,解析和语义推理。” 它还可以与某些第三方工具一起使用以增强其功能。
请记住,NLTK是由学术研究受众创建的,并且是为学术研究受众创建的。 它并非设计用于在生产环境中服务于NLP模型。 文档也很少。 甚至操作方法也很薄。 另外,没有64位二进制文件。 您需要安装32位版本的Python才能使用它。 最后,NLTK也不是最快的库,但是可以通过并行处理来加快速度。
如果您决定利用NLTK的内部功能,则可以改用TextBlob(如下所述)开始。
图案
如果您需要做的就是刮一个受欢迎的网站并分析发现的内容,请访问Pattern 。 这个自然语言处理库比这里介绍的其他库小得多,而且狭窄,但这也意味着它专注于真正做好一项常见的工作。
Pattern带有内置的内置功能,可用于抓取许多流行的Web服务和来源(Google,Wikipedia,Twitter,Facebook,通用RSS等),所有这些都可以作为Python模块使用(例如, from pattern.web import Twitter
)。 。 您不必为从这些站点获取数据而重新发明轮子,而无需担心它们的所有怪癖。 然后,您可以对数据执行各种常见的NLP操作,例如情感分析。
Pattern公开了其一些底层功能,允许您根据需要直接使用NLP函数,n-gram搜索,向量和图形。 它还具有一个内置的帮助程序库,可用于处理常见的数据库(以后将使用MySQL,SQLite和MongoDB),从而使处理以前会话中存储或从第三方获得的表格数据变得更加容易。
[ 也在InfoWorld上:2020年的人工智能预测 ]
多种语言
顾名思义, Polyglot使自然语言处理应用程序能够一次处理多种语言。
Polyglot中的NLP功能呼应了其他NLP库中的功能:标记化,命名实体识别,词性标记,情感分析,词嵌入等。对于每种操作,Polyglot提供了可与所需语言一起使用的模型。
请注意,Polyglot的语言支持因功能而异。 例如,令牌化系统支持近200种语言(主要是因为它使用Unicode文本分段算法),情感分析支持136种语言,但是词性标记仅支持16种语言。
NL
PyNLPI (发音为“菠萝”)仅具有自然语言处理功能的基本花名册,但它具有针对NLP数据格式的某些真正有用的数据转换和数据处理功能。
PyNLPI中的大多数NLP函数都用于基本任务,例如标记化或n-gram提取,以及一些在NLP中有用的统计函数,例如字符串或马尔可夫链之间的Levenshtein距离。 为了方便起见,这些功能都是在纯Python中实现的,因此它们不太可能具有生产级的性能。
但是PyNLPI很适合处理NLP领域中涌现的一些更奇特的数据类型和格式。 PyNLPI可以读取和处理GIZA,Moses ++,SoNaR,Taggerdata和TiMBL数据格式,并致力于将整个模块与FoLiA配合使用, FoLiA是XML文档格式,用于注释诸如语料库(用于翻译或其他分析的文本体)之类的语言资源。 。
每当您处理这些数据类型时,您都希望获得PyNLPI。
[ 也在InfoWorld上:深度学习与机器学习:了解差异 ]
空间
SpaCy利用Python的便利性和Cython的速度,被称为“工业强度的自然语言处理”。 它的创造者声称,它在速度,模型大小和准确性方面都比NLTK,CoreNLP和其他竞争对手好。 SpaCy的主要缺点是它相对较新,因此仅涵盖英语和其他几种(主要是欧洲)语言。 也就是说,在撰写本文时,SpaCy已达到2.2版。
SpaCy包括在那些竞争性框架中发现的大多数功能:语音标记,依赖项解析,命名实体识别,标记化,句子分割,基于规则的匹配操作,单词向量等等。 SpaCy还包括针对GPU操作的优化-既用于加速计算,又用于在GPU上存储数据以避免复制。
Spacy的文档非常出色。 安装向导会为Windows,Linux和macOS以及不同的Python环境(pip,conda等)生成命令行安装操作。 语言模型作为Python软件包安装,因此可以作为应用程序依赖项列表的一部分进行跟踪。
TextBlob
TextBlob是Pattern和NLTK库的友好前端,将这两个库都包装在易于使用的高级界面中。 使用TextBlob,您可以减少花在复杂的Pattern和NLTK上的时间,而将更多的时间用于获得结果。
TextBlob通过利用本机Python对象和语法来简化方法。 快速入门示例显示了如何将要处理的文本简单地视为字符串,而常见的NLP方法(如词性标记)可用作这些字符串对象上的方法。
[ 通过InfoWorld的App Dev Report新闻通讯了解软件开发中的热门话题 ]
TextBlob的另一个优点是,您可以“放下引擎盖”并随着自己的信心增强而更改其功能。 可以根据需要交换许多默认组件,例如情感分析系统或令牌生成器。 您还可以创建将组件(情感分析器,分类器等)组合在一起的高级对象,并以最小的努力重复使用它们。 这样,您可以使用TextBlob快速创建原型,然后稍后对其进行优化。