课程要点
•分词以及词权重
•文本分类算法
•文本检索和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的概率图