Python文本挖掘-PDF和脚本见附件

浏览: 4463

课程要点

     •分词以及词权重

     •文本分类算法

     •文本检索和LDA

 

常国珍《Python数据科学:全栈技术详解》

3

课程大纲

     1)文本挖掘介绍

     2)中文分词

     3)文本特征提取与相关性的度量

     4)文本分类

     5)主题模型

 

常国珍《Python数据科学:全栈技术详解》

4

      1)文本挖掘介绍

     2)中文分词

     3)文本特征提取与相关性的度量

     4)文本分类

     5)主题模型

 

常国珍《Python数据科学:全栈技术详解》

5

文本挖掘介绍

     •定义

     –从大量文本数据中抽取隐含的、未知的、可能有用的信息。

     •数据

     –随着互联网的发展,可以用的文本数据越来越多。

 

常国珍《Python数据科学:全栈技术详解》

6

文本挖掘介绍

     •文本挖掘的流程

 

常国珍《Python数据科学:全栈技术详解》

7

     1)文本挖掘介绍

      2)中文分词

     3)文本特征提取与相关性的度量

     4)文本分类

     5)主题模型

 

常国珍《Python数据科学:全栈技术详解》8

中文分词

英文中用空格分开的每个词都有意义。在中文中很多情况下,多个汉字才能表达一个意义。例如: “苹果很好吃” 这句话中,“苹果” 这两个汉字联合起来才表达了“苹果”这个可以吃的东西。中文分词就是把句子按照词进行切分。

分词是很多中文自然语言处理的基础,很多文本挖掘都是基于词的基础上进行的。例如:文本分类、聚类、规则系统。

     •分词的意义

 

常国珍《Python数据科学:全栈技术详解》

9

中文分词

结巴分词是一款优秀的Python 开源分词工具,结巴分词具有以下特点:

​1) 支持自定义词典

2) 多种模式切分

3) 关键词抽取算法

4) 支持词性标注

     •结巴分词

 

常国珍《Python数据科学:全栈技术详解》10

中文分词

     •分词效果

 

常国珍《Python数据科学:全栈技术详解》11

中文分词

词性标注是给出每个词的词性,给出它是名词、代词还是形容词等。词性有很多应用,例如:在关键词抽取中,我们可能需要只提取名词短语,认为名词短语是重要的。词性标注的代码如下:

     •词性标注

 

常国珍《Python数据科学:全栈技术详解》

12

中文分词

地址:https://github.com/fxsjy/jieba

     •分词帮助文档

 

常国珍《Python数据科学:全栈技术详解》13

     1)文本挖掘介绍

     2)中文分词

      3)文本特征提取与相关性的度量

     4)文本分类

     5)主题模型

 

常国珍《Python数据科学:全栈技术详解》14

特征词提取

这里讲一个很经典的计算词权重的方法TF-IDF。这个方法在很多地方都会用到。

例如:关键词抽取、计算文本相似性、文本分类和文本聚类。TF-IDF说词的重要性,主要通过TF*IDF 得到。

     •词权重:TF-IDF

 

常国珍《Python数据科学:全栈技术详解》15

特征词提取

一个词w 在文档d 中词频TF = (词w在文档d中出现的次数)/(文档d中所有词的总数)

一个词在文档中出现的词频越大,它的重要性基本就会越大。如果一篇文章是谈论“国企改革”这个主题的,那很有可能“国企改革”在这篇文章中会多次出现,它的词频也就会比较大。

TF(Term Frequency, 词频)

常国珍《Python数据科学:全栈技术详解》16

特征词提取

IDF 是在一个文档集合中计算的,要计算idf你要有一个文档集,idf的计算方式如下:

一个词w 在文档集合D 中的IDF = log(文档集文档的总个数/包含词w 的文档的个数)

考虑"的" 和"中国"这两个词的重要性,"的"几乎会在所有的文章当中出现,"中国"只会在部分文章中出现。这个意义上"的"相对"中国"包含的信息少,它的权重就应该低。IDF就是利用这个原则计算重要性的,如果词越经常出现,它的权重越小,分值越低。IDF(inverse document frequency, 逆向文件频率)

常国珍《Python数据科学:全栈技术详解》

17

特征词提取

计算一个词在一篇文章中的重要性:

TF-IDF= TF * IDF

我们可以把TF-IDF用到很多地方,例如:文档关键字抽取的时候,我们只用TF-IDF 值最大的哪些词来作为文档的关键字。在文本分类和聚类的时候,我们用TF-IDF的值代替这个词在文档当中出现的次数等。TF-IDF 应用

常国珍《Python数据科学:全栈技术详解》

18

向量空间模型

向量空间模型是用向量来表示文档的一种方法。这种表示是计算文本的相似性、对文本聚类和分类的基础。假设我们有两个文档,分别包含以下内容:

(1) 机器人越来越智能

(2) 工业现代化需要普及智能机器人

首先我们可以对上面文本进行分词处理:

(1) 机器人越来越智能

(2) 工业现代化需要普及智能机器人寻找相似的文本

常国珍《Python数据科学:全栈技术详解》

19

向量空间模型

现在我们对两个文档中所有出现的词用一个编号来映射,总共有7个词。例如:[(机器人,0), (越来越,1), (智能,2), (工业,3), (现代化,4),(需要,5), (普及,6)]。

进一步我们可以把上面两个文档分别用7维的向量表示出来。如果某个词出现在文档中,词对应的那一列的值则为1。

(1) (1, 1, 1, 0, 0, 0, 0)

(2) (1, 0, 1, 1, 1, 1, 1)

常国珍《Python数据科学:全栈技术详解》

20

向量空间模型

"机器人"这个词都出现在文档(1)和(2)中,所以文档(1)和(2)开头(第0列,计算机中习惯以0开始编码)的值都为1。文档(2)第3列的值为1,表示"工业"这个词在文档中出现过,第1列的值为0,表示"越来越"这个词没有在文档中出现。

使用这种方法,我们可以把一篇文档用一个向量来表示,一个文档集合就可以形成一个矩阵。在上面的表示中,如果词出现了,向量中对应的值就为1,这叫布尔表示法。我们也可以把1替换成前面将的TF*IDF值,相当于对文档中的每个词加权表示。

常国珍《Python数据科学:全栈技术详解》21

向量空间模型

每个文档都可以表示成一个向量的形式,我们就可以利用余弦相似性(cosinedistance)来计算,两个文档的相似性。

cos(v1, v2) = v1 . v2 /(||v1|| * ||v2||)

余弦距离大小介于[0,1],两个文档完全一样时余弦距离为1,两个文档没有共同的词时,余弦距离为0. 余弦距离越大,相似性越强。这两个文档的相似性为:

v1 . v2 = 1*1 + 1*0 + 1*1+ 0*1 + 0*1 + 0*1 + 0*1

||v1||= sqrt(1*1 + 1*1 +1*1 + 0*0 + 0*0 + 0*0 + 0*0)

||v2|| = sqrt(1*1 + 0*0 +1*1 +1*1 +1*1 +1*1 +1*1)

cos(v1, v2) = 2/(sqrt(3)*sqrt(6)) = 0.47

其中sqrt为开平方函数。

常国珍《Python数据科学:全栈技术详解》

22

TF-IDF与向量空间模型结合

步骤

1. 使用TF-IDF算法,找出两篇文章的关键词;

2. 每篇文章各取出若干个关键词,合并成一个集合,计算每篇文章对于这个集合中的词的词频;

3. 生成两篇文章各自的词频向量;

4. 计算两个向量的余弦相似度,值越大就表示越相似。

寻找相似的文档

常国珍《Python数据科学:全栈技术详解》

23

向量空间模型-词的相似性

我们可以利用一个基本原理来计算词与词的相似性:如果两个词经常在相同的文档中共同出现,那么这两个词可能是很相似的

我们可以把文档的词矩阵转置,就变成了词-文档矩阵。每个词一个向量表示,表示这个词在那些文档当中出现过。可以用继续用余弦距离来计算2个词之间的相似性。对上面的例子,我们有:

机器人(1,1)  智能(1,1)  现代化(0,1)

"机器人"和"智能"的余弦距离为1,"机器人"和"现代化"的距离为0.7。当文档集合越大时,这种基于统计的方法算出来的相关性就会越准确。

常国珍《Python数据科学:全栈技术详解》

24

向量空间模型用于文本聚类

步骤

1. 使用TF-IDF算法,找出多篇文章的关键词;

2. 每篇文章各取出若干个关键词,合并成一个集合,计算每篇文章对于这个集合中的词的词频;

3. 构造词/文档矩阵

4. 计算多篇文章的余弦相似度,形成相似度矩阵

5. 使用聚类算法对相似度矩阵进行聚类

常国珍《Python数据科学:全栈技术详解》

25

     1)文本挖掘介绍

     2)中文分词

     3)文本特征提取与相关性的度量

      4)文本分类

     5)主题模型

 

常国珍《Python数据科学:全栈技术详解》

26

文本分类

文本分类是将文本分成预先定义的类别。很多地方都需要用到文本分类技术,例如:垃圾电子邮件检测、文本归类、评论的情感分析和广告投放等领域。

文本分类通常有两种方法:

一是采用规则的方法,利用词频、正则等实现规则分类系统;

二是采用机器学习的方法,通过在已经标注好的语料上训练好分类器,对以后的测试集文本进行分类。本节讲用一个例子来演示如何实现这两种技术进行分类。

常国珍《Python数据科学:全栈技术详解》

27

基于规则分类

基于规则的方法通常是通过观察数据,自己定义一些规则,来对文本进行分类。这些规则可以是词频的统计,例如:出现汽车的次数大于2次,也可以使用正则表达式进行精确的匹配然后进行分类。例如:对这个分类问题中,我们定义了下面几条规则进行分类。

规则1:title中包含:“汽车”或者“轿车",则整个文章分为汽车

规则2:正文中同时包含:”轿车“、”变速箱“、”保险“这三个词,则整个文章是讲汽车的。

常国珍《Python数据科学:全栈技术详解》

28

基于分类器进行分类

基于分类器的方法,通过在已经标注好的语料上训练好分类器,对以后的测试集文本进行分类。常用的分类器有朴素贝叶斯、logistic regression、svm等。下面的例子中,我们将使用svm对这个问题进行分类。

常国珍《Python数据科学:全栈技术详解》

29

基于分类器进行分类

一、分类器实现:

1. 产生训练集

     •已标注好的分类(新闻等文本)

     •人工标注分类(情感分析等文本)

     •不标注(无监督方法-文本聚类)

 

2. 构造词/文档矩阵

     •词频/文档矩阵

     •TI-IDF/文档矩阵(信息增益、卡方检验等)

 

3. 使用分类器

     •有监督:SVM/决策树(随机森林)/逻辑回归/KNN/朴素贝叶斯等

     •无监督:聚类

 

常国珍《Python数据科学:全栈技术详解》

30

基于分类器进行分类

一个例子:

步骤:

1.人工标注文本情感倾向作为训练测试数据

(1000条)

2.提取文本特征词,构造特征词权重矩阵

     •逆文档频率

     •形成每条评论的特征词权重向量di=(w1,w2,w3„)

     •形成特征词权重矩阵(训练集)

 

3.进行机器学习算法训练

常国珍《Python数据科学:全栈技术详解》

31

基于分类器进行分类

一个例子-特征词权重矩阵

常国珍《Python数据科学:全栈技术详解》

32

基于分类器进行分类

一个例子-效果

常国珍《Python数据科学:全栈技术详解》

33

特殊的分类:情感分类

文本情感分类是一种特殊的文本分类,其可根据文本的情感倾向将文本分为正面或负面情感。情感分类可以使用机器学习方法进行分类,也可以使用情感词典的方法分类。

常国珍《Python数据科学:全栈技术详解》

34

特殊的分类:情感分类

文本情感词典分类实现

工具:情感词典(知网情感词典+台湾大学情感词典),程度副词词典(知网)否定词词典。

步骤:

     1.找到每条评论的情感词,按照情感次正负,进行正负面评分的打分

     2.定位情感词位置,搜索附近的程度副词

     •不同类型的程度副词为权重乘以情感词基础得分得到进一步的得分

     •遇到否定词、反转词,计算个数,奇数分数*-1,偶数不变

     3.对每条评论计算正负情感得分

     •正得分–负得分> 0 则为好评

     •正得分–负得分= 0 则为中评

     •正得分–负得分<0 则为差评

 

常国珍《Python数据科学:全栈技术详解》

35

     1)文本挖掘介绍

     2)中文分词

     3)文本特征提取与相关性的度量

     4)文本分类

      5)主题模型

 

常国珍《Python数据科学:全栈技术详解》

36

LDA主题模型简介

     •pLSA模型

 

pLSA的EM算法求解

     •LDA的设定

 

LDA文档生成和参数估计

     •使用Gibbs采样求解LDA的近似解

 

统计推断

Gibbs采样

使用Gibbs采样求解LDA的近似解

常国珍《Python数据科学:全栈技术详解》

37

LDA简介

LDA通常指的是概率主题模型:隐含狄里克雷分布(Latent DirichletAllocation,简称LDA)。根据给定的一个文档集,推断每篇文档的主题分布。

输入一个文档集,即若干个文档,输出每篇文档中的主题,这些主题以概率分布的形式给出。得到每篇文档的主题以后,就可以根据这些主题分布进行主题聚类或者文本分类。

文档生成的过程: 可以理解为先学习训练给定主题的词语,然后以一定的概率选取某个给定的主题,然后再以一定的概率选取那个主题下的某个单词。不断的重复这两个通过概率选取的步骤,就可以生成一篇文章。

常国珍《Python数据科学:全栈技术详解》

38

LDA简介

常国珍《Python数据科学:全栈技术详解》

39

pLSA模型简介模型假设每一个词都关联着一个隐含的主题类别

先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。

常国珍《Python数据科学:全栈技术详解》

40

pLSA模型简介

模型假设每一个词都关联着一个隐含的主题类别

常国珍《Python数据科学:全栈技术详解》

41

pLSA模型的EM算法求解

主题建模的目的就在于:自动的发现文档集中的主题分布。

pLSA属于频率派思想,即样本随机,参数虽未知但固定

LDA属于贝叶斯派思想,即样本固定,参数未知但是不固定,服从一定的分布

常国珍《Python数据科学:全栈技术详解》42

pLSA模型的EM算法求解

在EM算法中,E-Step假定参数已知,计算此时隐变量的后验概率,从而给出期望;M-Step带入隐变量的后验概率,最大化样本分布的对数似然函数,求解相应的参数。

常国珍《Python数据科学:全栈技术详解》

43

LDA的文档生成

主题分布和词分布不再唯一确定不变,即无法确切给出。例如主题分布可能是{教育:0.5,经济:0.3,交通:0.2},也可能是{教育:0.6,经济:0.2,交通:0.2},到底是哪个我们不再确定(即不知道),因为它是随机的可变化的。但再怎么变化,也依然服从一定的分布,即主题分布跟词分布由Dirichlet先验随机确定

常国珍《Python数据科学:全栈技术详解》

44

Dirichlet如何抽取主题分布

常国珍《Python数据科学:全栈技术详解》

45

Dirichlet如何抽取主题分布

共轭先验分布:

在贝叶斯概率理论中,如果后验概率P(θ|x)和先验概率p(θ)满足同样的分布律,那么,先验分布和后验分布被叫做共轭分布,同时,先验分布叫做似然函数的共轭先验分布。

这里Dirichlet分布就是多项分布的共轭先验分布

常国珍《Python数据科学:全栈技术详解》

46

LDA的概率图

推荐 2
本文由 ben chang 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册