Python自然语言处理实战核心技术与算法

Published on Aug. 22, 2023, 12:05 p.m.

Python自然语言处理实战:核心技术与算法

涂铭 刘祥 刘树春

57个笔记

1.1 什么是NLP

所谓“自然”乃是寓意自然进化形成,是为了区分一些人造语言,类似C++、Java等人为设计的语言

NLP可以被应用于很多领域,这里大概总结出以下几种通用的应用:▼ 机器翻译:计算机具备将一种语言翻译成另一种语言的能力。▼ 情感分析:计算机能够判断用户评论是否积极。▼ 智能问答:计算机能够正确回答输入的问题。▼ 文摘生成:计算机能够准确归纳、总结并产生文本摘要。▼ 文本分类:计算机能够采集各种文章,进行主题分析,从而进行自动分类。▼ 舆论分析:计算机能够判断目前舆论的导向。▼ 知识图谱:知识点相互连接而成的语义网络。

知识图谱(Knowledge Graph/Vault)又称科学知识图谱,在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的一系列各种不同的图形,用可视化技术描述知识资源及其载体,挖掘、分析、构建、绘制和显示知识及它们之间的相互联系

1.2 NLP的发展历程

深度学习作为人工智能皇冠上的明珠,将会在自然语言处理领域发挥着越来越重要的作用

1.3 NLP相关知识的构成

可以基于N-Gram进行纠错,也可以通过字典树、有限状态机等方法进行纠错

文本挖掘:主要包含了对文本的聚类、分类、信息抽取、摘要、情感分析以及对挖掘的信息和知识的可视化、交互式的呈现界面

1.6 NLP与人工智能

word2vec的出现,使得我们可以将词表示为更加低维的向量空间,相对于one-hot方式,这既缓解了语义鸿沟问题,又降低了输入特征的维度,从而降低了输入层的维度,另一方面,深度学习模型非常灵活,使得之前的很多任务,可以使用端到端的方式进行训练。

2.3 Numpy使用详解

一维数组通常称为向量(vector),二维数组通常称为矩阵(matrix)

Numpy中genfromtxt()方法来读取本地的数据集

dtype关键字要设定为‘U75’.表示每个值都是75byte的unicode。

skip_header关键字可以设置为整数,这个参数可以跳过文件开头的对应的行数,然后再执行任何其他操作。

5.2 关键词提取算法TF/IDF算法

TF-IDF算法(Term Frequency-Inverse Document Frequency,词频-逆文档频次算法)是一种基于统计的计算方法,常用于评估在一个文档集中一个词对某份文档的重要程度。这种作用显然很符合关键词抽取的需求,一个词对文档越重要,那就越可能是文档的关键词,人们常将TF-IDF算法应用于关键词提取中。

TF-IDF算法由两部分组成:TF算法以及IDF算法。TF算法是统计一个词在一篇文档中出现的频次,其基本思想是,一个词在文档中出现的次数越多,则其对文档的表达能力也就越强。而IDF算法则是统计一个词在文档集的多少个文档中出现,其基本的思想是,如果一个词在越少的文档中出现,则其对文档的区分能力也就越强。

5.3 TextRank算法

PageRank算法是一种网页排名算法,其基本思想有两条:1)链接数量。一个网页被越多的其他网页链接,说明这个网页越重要。2)链接质量。一个网页被一个越高权值的网页链接,也能表明这个网页越重要。

5.4 LSA/LSI/LDA算法

LDA则是通过贝叶斯学派的方法对分布信息进行拟合。

LSA(Latent Semantic Analysis,潜在语义分析)和LSI(Latent Semantic Index,潜在语义索引),二者通常被认为是同一种算法,只是应用的场景略有不同,LSA是在需要构建的相关任务中的叫法。可以说,LSA和LSI都是对文档的潜在语义进行分析,但是潜在语义索引在分析后,还会利用分析的结果建立相关的索引。

LSA是通过SVD这一暴力的方法,简单直接地求解出近似的word-topic-document分布信息。但是其作为一个初级的主题模型,仍然存在着许多的不足。其中主要的缺点是:SVD的计算复杂度非常高,特征空间维度较大的,计算效率十分低下。

另外,LSA得到的分布信息是基于已有数据集的,当一个新的文档进入到已有的特征空间时,需要对整个空间重新训练,以得到加入新文档后对应的分布信息。

5.5 实战提取文本关键词

前面提到,TF-IDF算法和主题模型都需要通过一个已有的先对模型的参数进行训练。

训练一个关键词提取算法需要以下几个步骤:1)加载已有的文档数据集。2)加载停用词表。3)对数据集中的文档进行分词。4)根据停用词表,过滤干扰词。5)根据数据集训练算法。

根据训练好的关键词提取算法对新文档进行关键词提取要经过以下环节:1)对新文档进行分词。2)根据停用词表,过滤干扰词。3)根据训练好的算法提取关键词。根据以上的情况,开始实现一个完整

TF-IDF的训练主要是根据数据集生成对应的IDF值字典,后续计算每个词的TF-IDF时,直接从字典中读取。

6.2 句法分析的数据集与评测方法

。TCT是清华大学计算机系智能技术与系统国家重点实验室人员从汉语平衡语料库中提取出100万规模的汉字语料文本,经过自动句法分析和人工校对,形成的高质量的标注有完整句法结构的中文句法树语料库。

7.4 案例:将网页文本向量化

simlarityCalu函数表示通过余弦距离计算两个向量的相似度。

2.doc2vec计算网页相似度跟word2vec计算网页相似度类似,doc2vec计算网页相似度也主要包括如下三个步骤:①预处理;②文档向量化;③计算文本相似。

8.3 实战电影评论情感分析

在实际应用中,我们会使用多个卷积核来处理数据,窗口大小相同的卷积核堆叠起来形成一个矩阵,这样可以更高效完成运算。

循环神经网络是一种能够对时序数据进行精准建模的网络

循环神经网络是一种能够对时序数据进行精准建模的网络。

近年来,RNN及其变种长短时记忆网络(Long Short Term Memory, LSTM)在NLP领域得到了广泛应用,例如在语言模型、句法分析、语意角色标注,图说模型、对话、机器翻译等领域均有优异的表现。

LSTM保存了文本中的长期依赖信息。LSTM通过对循环层的刻意设计来避免长期依赖问题和梯度消失的问题。

words_list = [word.decode(‘UTF-8’) for word in words_list]
word_vectors = np.load(‘wordVectors.npy’)
print(’载入文本向量’)
检查一下数据:
print(len(words_list))
print(word_vectors.shape)
结果:
Loaded the word list!
Loaded the word vectors!
400000
(400000,50)
我们还可以搜索一下:
Home_ndex=words_list.index(“home”)
wordVectors[home_index]
输出结果:
array([ 2.33019993e-01, 4.58849996e-01, 2.66020000e-01,
3.82039994e-02, 5.66940010e-01, -5.

选择合适的参数训练网络非常重要,最终模型的好坏很大程度上取决于你选择的优化器(Momentum、Nesterov、AdaGrad、RMSProp、AdaDelta、Adam)、学习率以及网络架构。特别是RNN和LSTM,单元数量和词向量大小都是重要的因素。▼ Learning Rate:RNN网络最困难的部分就是它的训练速度慢,耗时非常久。所以学习率至关重要。如果学习率设置过大,则学习曲线会有很大的波动性,如果设置过小,则收敛得非常慢。根据经验设置为0.001比较好。如果训练得非常慢,可以适当增大这个值。▼ 优化器:之所以优化器选择Adam,是因为其广泛被使用。▼ LSTM细胞数量:这个值取决于输入文本的平均长度。单元数量过多会导致速度非常慢。▼ 词向量维度:词向量一般设置在50~300之间,维度越多可以存放越多的单词信息,但是也意味着更高的计算成本。

▼ Learning Rate:RNN网络最困难的部分就是它的训练速度慢,耗时非常久。所以学习率至关重要。如果学习率设置过大,则学习曲线会有很大的波动性,如果设置过小,则收敛得非常慢。根据经验设置为0.001比较好。如果训练得非常慢,可以适当增大这个值。

9.1 简介

损失函数可以帮助我们平衡先验和后验的期望,以便我们做出决策。损失函数的选取,取决于我们想短线还是长线。

机器学习里最重要的四类问题(按学习结果分类):▼ 预测(Prediction):一般用回归(Regression, Arima)等模型。▼ 聚类(Clustering):如K-means方法。▼ 分类(Classification):如支持向量机法(Support Vector Machine, SVM),逻辑回归(Logistic Regression)。▼ 降维(Dimensional reduction):如主成分分析法(Principal Component Analysis, PCA,即纯矩阵运算)。前三个从字面就很好理解,那么为什么要降维呢?因为通常情况下,一个自变量x就是一个维度,在机器学习中,特别是文本,动不动就几百万维,运算复杂度非常高。而且这几百万维度里,可能其中大部分都是冗余信息或者贡献度不大的信息。因此,为了运算效率,要舍弃其中一部分信息,我们需要从几百万维中找出包含95%信息的几百维信息。这就是降维问题。

ImageNet,把图片分成了2万多类

9.2 几种常用的机器学习方法

给定一个输入,输出不定量的类别,这个就叫作标注任务。

推荐算法用到的信息种类非常多,例如用户的自我描述、过往的购物习惯,以及对过往推荐的反馈等。

当输入和输出都是不定长的序列时,我们把这类模型称为seq2seq,例如QA问答系统、语言翻译模型和语音转录文本模型。

9.3 分类器方法

朴素贝叶斯方法是基于贝叶斯定理与特征条件独立假设的分类方法,对于给定的训练集合,首先基于特征条件独立(所以叫朴素版的贝叶斯)学习输入、输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯方法简单,学习与预测的效率都很高,是常用的方法。

SVM算法优点:可用于线性/非线性分类,也可以用于回归;低泛化误差;推导过程优美,容易解释;计算复杂度较低。

9.4 无监督学习的文本聚类

▼聚类问题通常研究如何把一堆数据点分成若干类,从而使得同类数据点相似而非同类数据点不似。

聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster)。通过这样的划分,每个簇可能对应于一些潜在的类别。这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的含义需要由使用者来把握和命名。聚类常用于寻找数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。

K-means算法是一种非监督学习的算法,它解决的是聚类问题。将一些数据通过无监督的方式,自动化聚集出一些簇。文本聚类存在大量的使用场景,比如数据挖掘、信息检索、主题检测、文本概括等。

9.5 文本分类实战:中文垃圾邮件分类

▼ 准确率(P, Precision):A/(A+B),在所有被判断为正确的文档中,有多大比例是正确的。

▼ 召回率(R, Recall):A/(A+C),在所有正确的文档中,有多大比例被我们判为正确。

▼ F1测度(F-measure):2PR/(P+R),既衡量准确率,又衡量召回率。

▼ 漏报率(miss rate)=1-recall。▼ 准确度(accurarcy)=(A+D)/(A+B+C+D)。▼ 错误率(error)=(B+C)/(A+B+C+D)=1-accurarcy。▼ 虚报率(fallout)=B/(B+D)= false alarm rate。▼ F=(β2+1)PR/(β2+R)。▼ BEP, Break Event Point, where P=R。▼ AUC。

10.4 反向传播算法

反向传播算法(Back Propagation, BP)是其中的经典方法,它是现今最成功的神经网络算法,现实当中使用到神经网络时,大多是使用BP算法训练的。BP算法不仅可以用于多层前馈神经网络,还可以用于其他类型神经网络,例如LSTM,当然,通常所说的BP网络,一般是用BP算法训练的多层前馈网络。

10.5 最优化算法

机器学习完成一个训练任务有三个要素:算法模型、目标函数、优化算法。

10.7 激活函数

ReLU(Rectified Linear Unit,规划线性单元)是近年来被大量使用的激活函数。

10.9 词嵌入算法

word2vec是一款将词表征为实数值向量的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,连续的词袋模型)和Skip-Gram两种。

10.16 深度学习平台

PyTorch相对于Tensorflow的一大优点是,它的图是动态的,而Tensorflow等一般是静态图,不利于扩展。同时PyTorch非常简洁,方便使用。

第11章 Solr搜索引擎

Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。

11.2 Solr简介与部署

Solr是一种开放源码的、基于Lucene Java的搜索服务器,易于加入Web应用程序中。

Solr提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP的管理界面。可以使用Solr的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr的特性包括:▼ 高级的全文搜索功能。▼ 专为高通量的网络流量进行的优化。▼ 基于开放接口(XML和HTTP)的标准。▼ 综合的HTML管理界面。

▼可伸缩性——能够有效地复制到另外一个Solr搜索服务器。▼ 使用XML配置达到灵活性和适配性。▼ 可扩展的插件体系。

微信读书