
3.8 自然语言处理
自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向,是以一种智能与高效的方式,对文本数据进行系统化分析、理解与信息提取的过程,主要研究人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理融语言学、数学及计算机科学于一体,是人工智能中重要的应用领域,对自然语言处理的研究不仅充满吸引力而且具有挑战性。
自然语言处理的主要研究如下这些方面:(1)文本朗读/语音合成;(2)中文自动分词;(3)语音识别;(4)句法分析;(5)词性标注;(6)文本分类;(7)自然语言生成;(8)信息抽取;(9)信息检索;(10)文字校对;(11)问答系统;(12)机器翻译;(13)自动摘要等。
3.8.1 NLTK
NLTK(Natural Language Toolkit)是一个处理自然语言数据的高效平台,也是知名的Python自然语言处理工具。它提供了方便使用的接口,通过这些接口可以访问超过50个语料库和词汇资源(如WordNet)。它提供一套文本处理库用于分类、标记化、词干标记、解析和语义推理以及工业级NLP库的封装器。
NLTK提供全面的API文档,使得NLTK非常适合于语言学家、工程师、学生、教育家、研究人员以及行业用户等人群。NLTK的运行平台包括Windows、Mac OS X及Linux系统。另外,NLTK是一个免费、开源的社区驱动的项目。
综上所述,NLTK被称为使用Python开发的用于统计语言学的教学和研究的有力工具和自然语言处理的高效库。NLTK主页:http://www.nltk.org,如图3-44所示。

图3-44 NLTK主页
NLTK的安装命令为pip install nltk,如图3-45所示。

图3-45 NLTK的pip安装
NLTK内部支持数十种的语料库和训练好的模型,在Python的解释器中执行如下代码。

运行代码可以下载语料、预训练的模型等,如图3-46所示。

图3-46 NLTK下载
在下载目录中的子目录corpora为语料库,下载完成后的语料库如图3-47所示。

图3-47 下载的语料库
典型的语料库说明如下。
(1)Gutenberg:腾堡语料库,项目大约有36000本免费的电子图书。
(2)Webtex:网络和聊天文本,网络聊天中的文本包括Firefox论坛。
(3)Brown:朗语料库,一个百万词级的英语电子语料库,包含500个不同来源的文本,并且按照文体分类,例如新闻、社论等。
(4)Reuters:路透社语料库,包含10788个新闻文档,共计130万字,这些文档分成90个主题,按照“训练”和“测试”分为两组。
(5)Inaugural:就职演说语料库。
下面是使用Brown语料库的代码示例。


运行结果如图3-48所示。

图3-48 Brown语料库示例运行结果
3.8.2 SpaCy
SpaCy是深度学习的有效工具,可以与TensorFlow、PyTorch、Scikit-Learn、Gensim无缝交互。它可以构建出语言学复杂的统计模型,并且提供了简洁的接口用来访问其方法和属性,因此可以提取语言特征,例如词性标签、语义依赖标签、命名实体等。SpaCy主页:https://spacy.io,如图3-49所示。

图3-49 SpaCy主页
SpaCy的pip安装命令为pip install sapcy,如图3-50所示。

图3-50 SpaCy的pip安装
SpaCy下载完成后,可以下载数据和模型,命令为“python-m spacy download en”,如图3-51所示。

图3-51 下载数据和模型
从上图可以看到,下载了模型“en_core_web_sm”,另外SpaCy还有模型“en_core_web_lg”,安装命令为“python -m spacy download en_core_web_lg”,如图3-52所示。可以看到模型压缩包大小为852.3MB。也可以在“https://github.com/explosion/spacy-models/releases/download/en_core_web_lg-2.0.0/en_core_web_lg-2.0.0.tar.gz”下载压缩包,然后使用命令“pip install en_core_web_lg-1.2.0.tar.gz”进行安装。

图3-52 安装模型“en_core_web_lg”
下面是SpaCy的“en_core_web_sm”和“en_core_web_lg”模型使用实例。

输出结果为0.80168545。
3.8.3 Gensim
Gensim是一款开源的第三方自然语言处理Python工具包,用于从原始的非结构化的文本中,无监督地学习到主题向量表达,是一个用于从文档中自动提取语义主题的Python库,主要有以下特征。
(1)能方便地处理自定义的语料库。
(2)具有常用主题模型算法。常用算法包括Latent Semantic Analysis (LSA/LSI/SVD)、Latent Dirichlet Allocation (LDA)、Random Projections (RP)、Hierarchical Dirichlet Process (HDP)和word2vec deep learning等。
(3)分布式计算。能够在分布式计算机上运行算法Latent Semantic Analysis和Latent Dirichlet Allocation。
(4)方便扩展向量空间算法。
Gensim主页:https://pypi.org/project/gensim/,如图3-53所示。

图3-53 Gensim主页
Gensim的pip安装命令为pip install genism,如图3-54所示。

图3-54 Gensim的pip安装
Gensim包括许多文档处理模型,Word2Vec就是其中一个词转向量的模型,相关的API都在包“gensim.models.word2vec”中,其构造格式如下。

其中主要的参数说明如下。
(1)sentences:要分析的语料(即语言材料),可以是一个列表,或者从文件中遍历读出。
(2)size:词向量的维度,默认值是100。取值一般与语料的大小相关,如果是不大(小于100M)的语料,使用默认值即可,如果是超大的语料,建议增大维度。
(3)window:词向量上下文最大距离,window越大,则和某一词较远的词也会产生上下文关系。默认值为5。在实际使用中,可以根据实际的需求来动态调整window大小。如果是小语料,则这个值可以设得更小。对于一般的语料,这个值推荐设置在[5,10]区间。
(4)min_count:需要计算词向量的最小词频。利用这个值可以去掉一些很生僻的低频词,默认值是5。如果是小语料,可以调低这个值。
(5)iter:随机梯度下降法中迭代的最大次数,默认值是5。对于大语料,可以增大这个值。
(6)alpha: 在随机梯度下降法中迭代的初始步长,默认值是0.025。
(7)min_alpha: 由于算法支持在迭代的过程中逐渐减小步长,min_alpha给出了最小的迭代步长值。随机梯度下降中每轮的迭代步长可以由iter、alpha、min_alpha一起得出。
(8)workers:同时工作的线程,默认值为3。
下面是模型Word2Vec的实例。

运行结果如图3-55所示。

图3-55 模型Word2Vec的实例结果