文本话题聚类(KmeansLDA)

更新时间:2023-08-03 03:54:10 阅读: 评论:0

⽂本话题聚类(KmeansLDA)
K-means
1 聚类是⼀种⽆监督的学习⽅法。聚类区别于分类,即事先不知道要寻找的内容,没有预先设定好的⽬标变量。
2 聚类将数据点归到多个簇中,其中相似的数据点归为同⼀簇,⽽不相似的点归为不同的簇。相似度的计算⽅法有很多,具体的应⽤选择合适的相似度计算⽅法。
3 K-means聚类算法,是⼀种⼴泛使⽤的聚类算法,其中k是需要指定的参数,即需要创建的簇的数⽬,K-means算法中的k个簇的质⼼可以通过随机的⽅式获得,但是这些点需要位于数据范围内。在算法中,计算每个点到质⼼得距离,选择距离最⼩的质⼼对应的簇作为该数据点的划分,然后再基于该分配过程后更新簇的质⼼。重复上述过程,直⾄各个簇的质⼼不再变化为⽌。
4 K-means算法虽然有效,但是容易受到初始簇质⼼的情况⽽影响,有可能陷⼊局部最优解。为了解决这个问题,可以使⽤另外⼀种称为⼆分K-means的聚类算法。⼆分K-means算法⾸先将所有数据点分为⼀个簇;然后使⽤K-means(k=2)对其进⾏划分;下⼀次迭代时,选择使得SSE下降程度最⼤的簇进⾏划分;重复该过程,直⾄簇的个数达到指定的数⽬为⽌。实验表明,⼆分K-means算法的聚类效果要好于普通的K-means聚类算法。
_____________________________________________________________
LDA
概率论中两⼤学派:
频率学派和贝叶斯学派。先验概率,后验概率,共轭分布和共轭先验是贝叶斯学派中的⼏个概念。原因是贝叶斯学派认为分布存在先验分布和后验分布的不同,⽽频率学派则认为⼀个事件的概率只有⼀个。
基本概率分布:
猫卡通图片
先验分布(prior probability),后验分布(posterior probability),似然函数(likelyhood function),共轭分布(conjugacy)
共轭分布(conjugacy):后验概率分布函数与先验概率分布函数具有相同形式
采⽤共轭先验的原因:
可以使得先验分布和后验分布的形式相同,这样⼀⽅⾯合符⼈的直观(它们应该是相同形式的)另外
球的英语怎么说⼀⽅⾯是可以形成⼀个先验链,即现在的后验分布可以作为下⼀次计算的先验分布,如果形式相同,就可以形成⼀个链条。
为了使得先验分布和后验分布的形式相同,我们定义:
如果先验分布和似然函数可以使得先验分布和后验分布(posterior distributions)有相同的形式,那么就称先验分布与似然函数是共轭的。所以,共轭是指的先验分布(prior probability distribution)和似然函数(likelihood function)。如果某个随机变量Θ的后验概率
p(θ|x)和⽓先验概率p(θ)属于同⼀个分布簇的,那么称p(θ|x)和p(θ)为共轭分布,同时,也称p(θ)为似然函数p(x|θ)的共轭先验。
参数估计:
离散型随机变量分布:⼆项式分布,多项式分布;
连续型随机变量分布:正态分布。
他们都可以看作是参数分布,因为他们的函数形式都被⼀⼩部分的参数控制,⽐如正态分布的均值和⽅差,⼆项式分布事件发⽣的概率等。因此,给定⼀堆观测数据集(假定数据满⾜独⽴同分布),我
们需要有⼀个解决⽅案来确定这些参数值的⼤⼩,以便能够利⽤分布模型来做密度估计。这就是参数估计。
从两个学派⾓度考虑参数估计:
频率学派:通过某些优化准则(⽐如似然函数)来选择特定参数值;
贝叶斯学派:假定参数服从⼀个先验分布,通过观测到的数据,使⽤贝叶斯理论计算对应的后验分布。夏热
先验和后验的选择满⾜共轭,这些分布都是指数簇分布的例⼦。
捏饺子PCA降维
PCA的思想其实简单的概括就是:选取包含信息量最多的⽅向对数据进⾏投影,其投影⽅向可以从最⼤化⽅差或者最⼩化投影误差两个⾓度
来理解。⽅差⼤说明包含的信息量⼤。 所以PCA的思想就是通过最⼤化⽅差来找到合适的投影⽅向。
⼩结:
PCA,主成分分析,何为主成分?其实可以理解成⼀个个投影⽅向。⽽PCA要做的就是找到⼀个合适的投影⽅向,把原有的⾼维空间的数据映射到⼀个低维的空间,从⽽实现降维。
那么这个⽅向如何寻找的,标准是什么呢?PCA希望投影后的数据有尽可能⼤的⽅差。有了这个⽬标之后,我们就可以开始⽤数学语⾔取描述,后⾯如何求解这个优化的⽬标呢?拉格朗⽇乘⼦法,最后会发现把问题转成求特征值和特征向量的问题,得到这些投影⽅向后,⾃然降维的事情也就⽔到渠成了。
SVD与PCA关系:对数据集X做SVD就可以直接得到PCA的结果Y。SVD其实可以⽤来求PCA,当然SVD 在机器学习中⽤于推荐系统的作⽤也为⼤家所熟知。
—————————————————————————————
NLP知识梳理:
—————————————————————————————
⽂本挖掘的分词原理:
现代分词都是基于统计的分词,⽽统计的样本内容来⾃于⼀些标准的语料库。⼀句话要分词,我们要求的是概率最⼤分词结果,这⾥涉及到所有词的联合概率分布,以及简化版的马尔科夫假设;利⽤语料库建⽴的统计概率,对于⼀个新的句⼦,我们就可以通过计算各种分词⽅法对应的联合分布概率,找到最⼤概率对应的分词⽅法,即为最优分词。
N元模型,实际中N⼀般取4,即当前词依赖前4个词;
某些⽣僻词,或者相邻分词联合分布在语料库中没有,概率为0。这种情况我们⼀般会使⽤拉普拉斯平滑,即给它⼀个较⼩的概率值;
维特⽐算法与分词
对于⼀个有很多分词可能的长句⼦,我们当然可以⽤暴⼒⽅法去计算出所有的分词可能的概率,再找出最优分词⽅法。但是⽤维特⽐算法可以⼤⼤简化求出最优分词的时间。
⼤家⼀般知道维特⽐算法是⽤于隐式马尔科夫模型HMM解码算法的,但是它是⼀个通⽤的求序列最短路径的⽅法,不光可以⽤于HMM,也可以⽤于其他的序列最短路径算法,⽐如最优分词。
维特⽐算法采⽤的是动态规划来解决这个最优分词问题的,动态规划要求局部路径也是最优路径的⼀部分,很显然我们的问题是成⽴的。
—————————————————————————————
词袋模型
总结下词袋模型的三部曲:分词(tokenizing),统计修订词特征值(counting)与标准化(normalizing)。
与词袋模型⾮常类似的⼀个模型是词集模型(Set of Words,简称SoW),和词袋模型唯⼀的不同是它仅仅考虑词是否在⽂本中出现,⽽不考虑词频。词袋模型有很⼤的局限性,因为它仅仅考虑了词频,没有考虑上下⽂的关系,因此会丢失⼀部分⽂本的语义。但是⼤多数时候,如果我们的⽬的是分类聚类,则词袋模型表现的很好。
淳朴的近义词Hash Trick
向量化的⽅法很好⽤,也很直接,但是在有些场景下很难使⽤,⽐如分词后的词汇表⾮常⼤,达到100万+,此时如果我们直接使⽤向量化的⽅法,将对应的样本对应特征矩阵载⼊内存,有可能将内存撑爆,在这种情况下我们怎么办呢?第⼀反应是我们要进⾏特征的降维,说的没错!⽽Hash Trick就是⾮常常⽤的⽂本特征降维⽅法。
和PCA类似,Hash Trick降维后的特征我们已经不知道它代表的特征名字和意义。此时我们不能像上
⼀节向量化时候可以知道每⼀列的意义,所以Hash Trick的解释性不强。
⼀般来说,只要词汇表的特征不⾄于太⼤,⼤到内存不够⽤,肯定是使⽤⼀般意义的向量化⽐较好。因为向量化的⽅法解释性很强,我们知道每⼀维特征对应哪⼀个词,进⽽我们还可以使⽤TF-IDF对各个词特征的权重修改,进⼀步完善特征的表⽰。
⽽Hash Trick⽤⼤规模机器学习上,此时我们的词汇量极⼤,使⽤向量化⽅法内存不够⽤,⽽使⽤Hash Trick降维速度很快,降维后的特征仍然可以帮我们完成后续的分类和聚类⼯作。当然由于分布式计算框架的存在,其实⼀般我们不会出现内存不够的情况。因此,实际⼯作中我使⽤的都是特征向量化。
—————————————————————————————
⽂本挖掘预处理之TF-IDF
TF-IDF是⾮常常⽤的⽂本挖掘预处理基本步骤,但是如果预处理中使⽤了Hash Trick,则⼀般就⽆法使⽤TF-IDF了,因为Hash Trick后我们已经⽆法得到哈希后的各特征的IDF的值。使⽤了IF-IDF并标准化以后,我们就可以使⽤各个⽂本的词特征向量作为⽂本的特征,进⾏分类或者聚类分析。当然TF-IDF不光可以⽤于⽂本挖掘,在信息检索等很多领域都有使⽤。因此值得好好的理解这个⽅法的思想。
—————————————————————————————
中⽂⽂本挖掘预处理特点
第⼀,中⽂⽂本是没有像英⽂的单词空格那样隔开的,因此不能直接像英⽂⼀样可以直接⽤最简单的空格和标点符号完成分词。所以⼀般我们需要⽤分词算法来完成分词;
第⼆,中⽂的编码不是utf8,⽽是unicode。这样会导致在分词的时候,和英⽂相⽐,我们要处理编码的问题。
中⽂⽂本挖掘预处理⼀:数据收集
第⼀种⽅法,常⽤的⽂本语料库在⽹上有很多,如果⼤家只是学习,则可以直接下载下来使⽤,但如果是某些特殊主题的语料库,⽐如“机器学习”相关的语料库,则这种⽅法⾏不通,需要我们⾃⼰⽤第⼆种⽅法去获取。
路由器的线怎么插第⼆种使⽤爬⾍的⽅法,开源⼯具有很多,通⽤的爬⾍我⼀般使⽤。但是我们我们需要某些特殊的语料数据,⽐如上⾯提到的“机器学
习”相关的语料库,则需要⽤主题爬⾍(也叫聚焦爬⾍)来完成。这个我⼀般使⽤。 ache允许我们⽤关键字或者⼀个分类算法来过滤出我们需要的主题语料,⽐较强⼤。
中⽂⽂本挖掘预处理⼆:除去数据中⾮⽂本部分
这⼀步主要是针对我们⽤爬⾍收集的语料数据,由于爬下来的内容中有很多html的⼀些标签,需要去掉。少量的⾮⽂本内容的可以直接⽤Python的正则表达式(re)删除, 复杂的则可以⽤来去除。去除掉这些⾮⽂本的内容后,我们就可以进⾏真正的⽂本预处理了。
中⽂⽂本挖掘预处理三:处理中⽂编码问题
由于Python2不⽀持unicode的处理,因此我们使⽤Python2做中⽂⽂本预处理时需要遵循的原则是,存储数据都⽤utf8,读出来进⾏中⽂相关处理时,使⽤GBK之类的中⽂编码,在下⾯⼀节的分词时,我们再⽤例⼦说明这个问题。
中⽂⽂本挖掘预处理四:中⽂分词
常⽤的中⽂分词软件有很多,个⼈⽐较推荐结巴分词。
中⽂⽂本挖掘预处理五:引⼊停⽤词
在上⾯我们解析的⽂本中有很多⽆效的词,⽐如“着”,“和”,还有⼀些标点符号,这些我们不想在⽂本分析的时候引⼊,因此需要去掉,这些词就是停⽤词。常⽤的中⽂停⽤词表是1208个;
中⽂⽂本挖掘预处理六:特征处理
两种特征处理的⽅法,向量化与Hash Trick。⽽向量化是最常⽤的⽅法,因为它可以接着进⾏TF-IDF的特征处理。
中⽂⽂本挖掘预处理七:建⽴分析模型
有了每段⽂本的TF-IDF的特征向量,我们就可以利⽤这些数据建⽴分类模型,或者聚类模型了,或者进⾏主题模型的分析。⽐如我们上⾯的两段⽂本,就可以是两个训练样本了。此时的分类聚类模型和之前讲的⾮⾃然语⾔处理的数据分析没有什么两样。因此对应的算法都可以直接使⽤。⽽主题模型是⾃然语⾔处理⽐较特殊的⼀块,这个我们后⾯再单独讲。
—————————————————————————————
英⽂⽂本挖掘预处理特点
英⽂⽂本的预处理⽅法和中⽂的有部分区别。⾸先,英⽂⽂本挖掘预处理⼀般可以不做分词(特殊需求除外),⽽中⽂预处理分词是必不可少的⼀步。第⼆点,⼤部分英⽂⽂本都是uft-8的编码,这样在⼤多数时候处理的时候不⽤考虑编码转换的问题,⽽中⽂⽂本处理必须要处理unicode的编码问题。第三点就是拼写问题,很多时候,我们的预处理要包括拼写检查,⽐如“Helo World”这样的错误,我们
不能在分析的时候讲错纠错。所以需要在预处理前加以纠正。第四点就是词⼲提取(stemming)和词形还原(lemmatization)。这个东西主要是英⽂有单数,复数和各种时态,导致⼀个词会有不同的形式。⽐如“countries”和"country","wolf"和"wolves",我们期望是有⼀个词。
英⽂⽂本挖掘预处理⼀:数据收集
⼀样;
五险一金是啥
郑秀文个人资料英⽂⽂本挖掘预处理⼆:除去数据中⾮⽂本部分
⼀样;
英⽂⽂本挖掘预处理三:拼写检查更正
由于英⽂⽂本中可能有拼写错误,因此⼀般需要进⾏拼写检查。拼写检查,我们⼀般⽤类库完成。找出错误后,我们可以⾃⼰来决定是否要改正。当然,我们也可以⽤pyenchant中的wxSpellCheckerDialog类来⽤对话框的形式来交互决定是忽略,改正还是全部改正⽂本中的错误拼写。
英⽂⽂本挖掘预处理四:词⼲提取(stemming)和词形还原(lemmatization)
词⼲提取(stemming)和词型还原(lemmatization)是英⽂⽂本预处理的特⾊。两者其实有共同点,即都是要找到词的原始形式。只不过词⼲提取(stemming)会更加激进⼀点,它在寻找词⼲的时候可以会得到不是词的词⼲。⽐如"imaging"的词⼲可能得到的是"imag", 并不是⼀个词。⽽词形还原则保守⼀些,它⼀般只对能够还原成⼀个正确的词的词进⾏处理。个⼈⽐较喜欢使⽤词型还原⽽不是词⼲提取。
英⽂⽂本挖掘预处理五:转化为⼩写

本文发布于:2023-08-03 03:54:10,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1106110.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分布   分词   数据   预处理   先验   模型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图