相关动态
文本主题抽取:用gensim训练LDA模型
2024-11-10 21:53

得知李航老师的《统计学习方法》出了第二版,我第一时间就买了。看了这本书的目录,非常高兴,好家伙,居然把主题模型都写了,还有pagerank。一路看到了马尔科夫蒙特卡罗方法和LDA主题模型这里,被打击到了,满满都是数学公式。LDA是目前为止我见过最复杂的模型了。

文本主题抽取:用gensim训练LDA模型

找了培训班的视频看,对LDA模型有了大致的认识。下面总结一点东西。

1、LDA与PLSA的联系

LDA模型和PLSA的联系非常紧密,都是概率模型(LSA是非概率模型),是利用概率生成模型对文本集合进行主题分析的无监督学习方法。

不同在于,PLSA是用了频率学派的方法,用极大似然估计进行学习,而LDA是用了贝叶斯学派的方法,进行贝叶斯推断,所以

下面是两个小案例,用gensim训练LDA模型,进行新闻文本主题抽取,还有一个是希拉里邮件的主题抽取。

github:https://github.com/DengYangyong/LDA_gensim

一、LDA新闻文本主题抽取

第一步:对新闻进行分词

这次使用的新闻文档中有5000条新闻,有10类新闻,['体育', '财经', '房产', '家居', '教育', '科技', '时尚', '时政', '游戏', '娱乐'],每类有500条新闻。首先对文本进行清洗,去掉停用词、非汉字的特殊字符等。然后用jieba进行分词,将分词结果保存好。

第二步:构建词频矩阵,训练LDA模型

gensim所需要的输入格式为:['黄蜂', '湖人', '首发', '科比', '带伤', '战',...],也就是每篇文档是一个列表,元素为词语。

然后构建语料库,再利用语料库把每篇新闻进行数字化,corpus就是数字化后的结果。

第一条新闻ID化后的结果为corpus[0]:[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1),...],每个元素是新闻中的每个词语的ID和频率。

最后训练LDA模型。LDA是一种无监督学习方法,我们可以自由选择主题的个数。这里我们做了弊,事先知道了新闻有10类,就选择10个主题吧。

LDA模型训练好之后,我们可以查看10个主题的单词分布。

第6个主题(从0开始计数)的单词分布如下。还行,从“拍摄、电影、柯达”这些词,可以大致看出是娱乐主题。

(5, '0.007*"中" + 0.004*"拍摄" + 0.004*"说" + 0.003*"英语" + 0.002*"时间" + 0.002*"柯达" + 0.002*"中国" + 0.002*"国泰" + 0.002*"市场" + 0.002*"电影"')

从第10个主题的单词分布也大致可以看出是财经主题。

(9, '0.085*"基金" + 0.016*"市场" + 0.014*"公司" + 0.013*"投资" + 0.012*"股票" + 0.011*"分红" + 0.008*"中" + 0.007*"一季度" + 0.006*"经理" + 0.006*"收益"')

但效果还是不太令人满意,因为其他的主题不太看得出来是什么。

第三步:抽取新闻的主题

我们还可以利用训练好的LDA,得到一条新闻的主题分布,也就是一条新闻属于各主题的可能性的概率分布。

找了三条新闻,分别是体育,娱乐和科技新闻:

然后同样进行分词、ID化,通过lda.get_document_topics(corpus_test) 这个函数得到每条新闻的主题分布。得到新闻的主题分布之后,通过计算余弦距离,应该也可以进行文本相似度比较。

从结果中可以看到体育新闻的第6个主题的权重最大:(5, 0.60399055),可惜从第6个主题的单词分布来看,貌似这是个娱乐主题。

娱乐新闻的主题分布中,第5个主题的权重最大:(4, 0.46593386),而科技新闻的主题分布中,第3个主题的权重最大:(2, 0.38577113)。

 

二、希拉里邮件门主题抽取

在美国大选期间,希拉里的邮件被泄露出来了,有6000多封邮件,我们可以用LDA主题模型对这些邮件的进行主题抽取,得到每个主题的单词分布,和每封邮件的主题分布。

还可以利用训练好模型,得到新邮件的主题分布。

步骤和以上的案例差不多,只是不需要进行分词。

第一步:用正则表达式清洗数据,并去除停用词

第二步:构建语料库,训练LDA模型

这个英文的stopwordlist感觉不太行,从最终得到的单词分布来看,us、would这种词居然还有。这些单词看得眼睛都花了,不容看出来主题是啥。

我们看第8个主题的单词分布,里面的词有:state,obama,president,government,估计这个主题与当前总统有关。

(7, '0.008*"us" + 0.008*"new" + 0.007*"would" + 0.005*"state" + 0.005*"obama" + 0.004*"one" + 0.004*"said" + 0.004*"president" + 0.003*"first" + 0.003*"government"'), 

第三步:查看邮件的主题分布

查看了第一封邮件的主题分布,然后推测了希拉里两条推特的主题。

 

参考资料:

1、李航:《统计学习方法》(第二版)

    以上就是本篇文章【文本主题抽取:用gensim训练LDA模型】的全部内容了,欢迎阅览 ! 文章地址:http://zleialh.xhstdz.com/quote/67625.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://zleialh.xhstdz.com/mobile/ , 查看更多   
发表评论
0评