当前位置:   article > 正文

LDA主题模型-sklearn的LatentDirichletAllocation实现案例_latentdirichletallocation sklearn

latentdirichletallocation sklearn

原理介绍请参考:  LDA主题模型及python实现

                             用scikit-learn学习LDA主题模型

实现LDA模型的库有:sklearn的LatentDirichletAllocation Gensim 库等。下面主要一个例子,结合sklearn进行实现。

主要步骤:

1、构建词袋:对每篇文章进行分词处理(本例中使用的jieba库),暂未进行去停留词。

2、进行统计词频,利用CountVectorizer得到所有文档中各个词的词频向量主题词袋构成的一个list。

3、利用LatentDirichletAllocation进行LDA处理,设置需要分成的主题个数等参数,可以得到每篇文章属于每个主题的概率矩阵和分成每个主题中主题词的分布概率矩阵

实例代码:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @Time : 2020/2/25 17:07
  4. # @Author : ystraw
  5. # @Site :
  6. # @File : t3.py
  7. # @Software: PyCharm Community Edition
  8. # @function:
  9. import numpy as np
  10. import jieba
  11. # 文档链表
  12. docment = [
  13. '【财新网】(记者 孙良滋 实习记者 单镭婧)受新冠肺炎疫情影响,湖北多地施行交通管制,当地家禽养殖业遭受波及。据财新记者了解,作为全国禽蛋供给大省,受交通管制影响,不少企业饲料告急,鸡蛋和鸡苗积压难以运输出去。目前,饲料问题经过相关部门的协调有所缓解,但鸡蛋和鸡苗如何运输出去仍极具挑战。湖北省畜牧业协会的一名负责人对财新记者介绍,湖北禽蛋产量居全国第六,年家禽存栏量约为3.5亿只,出栏量约为5.3亿只,日需饲料3000吨,其中玉米1800吨、豆粕1200吨。受交通管制影响,饲料难以运输进来,已经有多家企业饲料告急。',
  14. '2月26日胡润研究院发布《2020世茂深港国际中心·胡润全球富豪榜》(Shimao Shenkong International Center·Hurun Global Rich List 2020)。上榜企业家财富计算截止日期为2020年1月31日。这是胡润研究院连续第九年发布“全球富豪榜”。全球十亿美金企业家人数增加346人,达到创纪录的2816人。中国799位,比美国多173位。美国626位,与中国差距扩大。印度、德国和英国其次,各有100多位。亚马逊56岁的杰夫-贝佐斯连续第三年成为全球首富,身家9800亿人民币,下降5%。其前妻麦肯齐以3080亿人民币首次上榜,排在第22位。作为中国首富马云财富增长15%,以3,150亿元位列全球第21位,比去年上升一位。不过,因为特斯拉股价翻倍,埃隆·马斯克财富增长1,300多亿,至3,220亿人民币,超过了马云。任正非财富增长了7%,达到210亿人民币,位列全球第903位,正好跟特朗普的财富一样。医药行业最强夫妻档孙飘扬钟慧娟夫妇财富增长至去年的2.5倍,达到2,000亿人民币。北京连续五年成为全球十亿美金企业家之都,共有110位居住在北京,比纽约多出12位。上海超过香港位列第三。香港跌至第四。广州新进前十名,宁波新进前30名。粤港澳大湾区共有232人上榜,比去年增加35人',
  15. '【环球网报道 实习记者 崔妍】据日本《产经新闻》最新消息,日本官房长官菅义伟在26日上午的新闻发布会上表示,国际奥委会已告知日本,东京奥运会的准备工作还在继续。据报道,当地时间26日上午,日本官房长官菅义伟就“国际奥委会资深委员称若疫情5月下旬得不到控制,东京奥运会可能会取消”这一消息做出回应,菅义伟表示,大会组委会已向国际奥委会进行确认,国际奥委会表示这不是组织的官方立场。菅义伟说:“我们得到的答复是,国际奥委会正在为奥运会如期召开做好准备。”菅义伟表示,下月即将开始的火炬接力不会改变日程。日本政府将与国际奥委会、大会组委会等各部门紧密合作,向海外及时发布有关对应新冠病毒的对策消息,为召开做好准备。据美联社此前报道,当地时间25日,国际奥委会资深委员说,如果新冠肺炎疫情在5月下旬得不到控制,2020年东京奥运会可能将被取消,而不是推迟或换城市举办。报道称,国际奥委会资深委员迪克•庞德(Dick Pound)(加拿大前游泳冠军)表示,如果因为新冠肺炎疫情爆发而证明今夏在东京举行的奥运会太危险,组织者很有可能完全取消这届奥运会,而不是推迟或换城市举办。据他估计,有两三个月的窗口期来决定2020年东京奥运会的命运,这意味着决定可能会推迟到5月下旬。'
  16. ]
  17. # 进行分词,并存入list:
  18. result = []
  19. for doc in docment:
  20. document3_cut = jieba.cut(doc)
  21. result.append(' '.join(document3_cut))
  22. # 获取词频向量:
  23. from sklearn.feature_extraction.text import CountVectorizer
  24. from sklearn.decomposition import LatentDirichletAllocation
  25. corpus = result
  26. cntVector = CountVectorizer()
  27. cntTf = cntVector.fit_transform(corpus)
  28. # 输出选取词特征
  29. vocs = cntVector.get_feature_names()
  30. print('主题词袋:', len(vocs))
  31. print(vocs)
  32. # 输出即为所有文档中各个词的词频向量
  33. # print(cntTf)
  34. # LDA主题模型
  35. lda = LatentDirichletAllocation(n_components=2, # 主题个数
  36. # max_iter=5, # EM算法的最大迭代次数
  37. # learning_method='online',
  38. learning_offset=50., # 仅仅在算法使用online时有意义,取值要大于1。用来减小前面训练样本批次对最终模型的影响
  39. random_state=0)
  40. docres = lda.fit_transform(cntTf)
  41. # 文档所属每个类别的概率
  42. LDA_corpus = np.array(docres)
  43. print('类别所属概率:\n', LDA_corpus)
  44. # 每篇文章中对每个特征词的所属概率矩阵:list长度等于分类数量
  45. # print('主题词所属矩阵:\n', lda.components_)
  46. # 构建一个零矩阵
  47. LDA_corpus_one = np.zeros([LDA_corpus.shape[0]])
  48. # 对比所属两个概率的大小,确定属于的类别
  49. LDA_corpus_one = np.argmax(LDA_corpus, axis=1) # 返回沿轴axis最大值的索引,axis=1代表行;最大索引即表示最可能表示的数字是多少
  50. print('每个文档所属类别:', LDA_corpus_one)
  51. # 打印每个单词的主题的权重值
  52. tt_matrix = lda.components_
  53. id = 0
  54. for tt_m in tt_matrix:
  55. tt_dict = [(name, tt) for name, tt in zip(vocs, tt_m)]
  56. tt_dict = sorted(tt_dict, key=lambda x: x[1], reverse=True)
  57. # 打印权重值大于0.6的主题词:
  58. # tt_dict = [tt_threshold for tt_threshold in tt_dict if tt_threshold[1] > 0.6]
  59. # 打印每个类别前5个主题词:
  60. tt_dict = tt_dict[:8]
  61. print('主题%d:' % (id), tt_dict)
  62. id += 1

输出结果:
主题词袋: 284
['000', '100', '110', '12', '1200', '15', '150', '173', '1800', '2020', '21', '210', '22', '220', '232', '25', '26', '2816', '30', '300', '3000', '3080', '31', '346', '35', '56', '626', '799', '903', '9800', 'center', 'dick', 'global', 'hurun', 'international', 'list', 'pound', 'rich', 'shenkong', 'shimao', '一位', '一名', '一样', '上升', '上午', '上榜', '上海', '下旬', '下降', '不会', '不少', '不是', '不过', '世茂', '东京', '两三个', '中国', '中心', '举办', '举行', '了解', '五年', '亚马逊', '交通管制', '产经新闻', '产量', '人数', '人民币', '亿元', '亿只', '亿美金', '今夏', '介绍', '任正非', '企业', '企业家', '估计', '位列', '作为', '供给', '做出', '做好', '全国', '全球', '共有', '其中', '其次', '养殖业', '冠军', '决定', '准备', '出去', '出栏', '创纪录', '前十名', '前妻', '加拿大', '北京', '医药行业', '协会', '协调', '单镭婧', '印度', '危险', '即将', '去年', '及时', '发布', '发布会', '取消', '受新冠', '召开', '可能', '各有', '合作', '告急', '告知', '命运', '回应', '因为', '国际', '国际奥委会', '埃隆', '城市', '增加', '增长', '多亿', '多位', '多出', '多地', '多家', '大会', '大湾', '大省', '夫妇', '夫妻', '奥运会', '如何', '如期', '如果', '委员', '存栏', '孙良', '宁波', '完全', '官房长官', '官方', '实习', '家禽', '富豪榜', '对应', '对策', '居住', '崔妍', '工作', '差距', '已经', '广州', '庞德', '开始', '当地', '影响', '得不到', '得到', '德国', '意味着', '成为', '我们', '或换', '截止', '扩大', '报道', '挑战', '排在', '接力', '控制', '推迟', '改变', '新冠', '新进', '新闻', '施行', '日期', '日本', '日本政府', '日程', '时间', '最强', '最新消息', '有关', '有所', '杰夫', '极具', '档孙', '正在', '正好', '此前', '波及', '海外', '消息', '深港', '游泳', '湖北', '湖北省', '火炬', '爆发', '特斯拉', '特朗普', '玉米', '环球网', '畜牧业', '疫情', '病毒', '目前', '相关', '研究院', '确认', '禽蛋', '积压', '称若', '窗口期', '立场', '第三', '第三年', '第九年', '第六', '第四', '答复', '粤港澳', '紧密', '纽约', '组委会', '组织', '组织者', '经过', '继续', '缓解', '美国', '美联社', '翻倍', '股价', '肺炎', '胡润', '英国', '菅义伟', '表示', '计算', '记者', '证明', '豆粕', '贝佐斯', '负责人', '财富', '财新', '财新网', '资深', '超过', '跌至', '身家', '达到', '运输', '这一', '这届', '这是', '进前', '进来', '进行', '连续', '迪克', '遭受', '部门', '钟慧娟', '问题', '难以', '飘扬', '饲料', '首富', '首次', '香港', '马云', '马斯克', '鸡苗', '鸡蛋', '麦肯齐']
类别所属概率:    # 这里分成两类,下面的矩阵表示,每篇文章属于第几类的概率。
 [[0.00559598 0.99440402]   # 例如这个表示第二篇文章属于第一个主题的概率为0.99, 属于第二个主题的概率为0.004
 [0.99695717 0.00304283]
 [0.99687826 0.00312174]]
所属类别: [1. 0. 0.]               # 表示第一篇大概率属于类别1,第二篇、第三篇大概率属于类别0
主题0: [('国际奥委会', 8.499704574473384), ('全球', 7.499719663031731), ('奥运会', 7.499704633071432), ('财富', 6.499719748517572), ('人民币', 5.499719889770342), ('2020', 5.4997138829345245), ('东京', 5.4997048719855925), ('菅义伟', 5.4997048719855925)]          # 类别0中概率较高的前几个主题词
主题1: [('饲料', 5.4998898336698945), ('记者', 4.507330152912838), ('交通管制', 3.4998901516942005), ('影响', 3.4998901516942005), ('运输', 3.4998901516942005), ('亿只', 2.499890750791945), ('企业', 2.499890750791945), ('全国', 2.499890750791945)]
 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/712118
推荐阅读
  

闽ICP备14008679号