用gensim做LDA实践之文本分类

之前看LDA,一直没搞懂到底作用是什么,公式推导了一大堆,dirichlet分布求了一堆倒数,却没有真正理解精髓在哪里。

最近手上遇到了一个文本分类的问题,采用普通的VSM模型的时候,运行的太慢,后来查找改进策略的时候,想起了LDA,因此把LDA重新拉回我的视线,也终于弄懂了到底是做什么的。

LDA本质是一种降维

为什么这么说,因为在我的文本分类问题中,文本共有290w个,根据词项得到的维度为90w个,这样一个巨大的矩阵【尤其是维度过多】扔到分类器里,肯定会有各种各样的问题【比如训练过慢,过拟合,等等】
因此,LDA的出现,能让VSM模型的列,由词项变成“主题”。这也就是主题模型的来历吧。

文档——主题矩阵

先看一个简单的:LSI 隐语意索引。基本方法是SVD矩阵分解
从图片中可以看到,最开始文档——词矩阵,被分解为两个矩阵的相乘,其中主题的个数【维度】要远远小于词的维度

现在我们开始分析这两个矩阵各自长啥样:
文档——主题矩阵求出来之后,是这样的
这里写图片描述
在这里,我定义了200个主题,现只截图了前25个主题。

需要说明的是,这个是第一个文档的主题分布。我们可以看到,第一个样本的第6,第7个主题明显得分更高一些。至于主题都是“什么主题”,需要人自己通过“主题——词”矩阵观看,并给出
【其实,并不需要定义每个主题是什么,其实只是一列,并放在分类器里用就可以了。】

其实,我们降维得到的这个矩阵,就可以放在分类器里面用了。
LDA得到的主题表征:
这里写图片描述
LDA神奇之处在于,如果我定义了200个主题,那么我得到corpus_lda的时候,比如要看第二个样本的主题,它不会像LSI一样全部显示出来,而是选择性地显示几个大的。

主题——词矩阵

同样地,如果想看每个主题都有哪些词,也就是主题——词矩阵,那么可以看到:
这里写图片描述

总结

最后,【在文本分类中】其实我们要做的,就是从文本——词项矩阵变为文本——主题【维度为200】矩阵,通过降维的方式,对文本分类。其中的值由词项的TF-IDF值变为了主题的权重得分值。

附上整个lda的过程的步骤和代码:

第一步,把待转换成词袋的词变成需要的类型

value_list以逗号隔开

通过学习value_list得到我们的字典。【注意:value_list的格式】

第二步:把所有文档根据字典转换成VSM

这里写图片描述

现在得到的corpus利用了字典,把每一个文档变成了一个一个tuple组合的形式,key为ID,value为出现的频数

第三步,把频数变为tfidf值【用corpus训练】

这里写图片描述

此时,可以转换一个文档,方法:先用dictionary的dic2bow方法变成词频,再把词频变为tfidf频率

第四步:用训练好的tfidf把测试文档变为tfidf格式

这里写图片描述

第五步:把规整后的tfidf矩阵放进LSI,LDA模型中

这里写图片描述

所以说实际上没有做舆情的话,我是没有用到主题——词项矩阵的。这个充其量是让我理解“这个主题是讲的什么东西”。

另外,多说一句。短文本【标签,名称】并不适合做LDA,因为一个文档里的标签太少了,LDA并不能发挥其真正效果

  • 11
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值