微博内容分词后怎样用JupyterNotebook做LDA主题模型分析

2021-6-21 11:09| 发布者: Fuller| 查看: 6129| 评论: 11

摘要: LDA(Latent Dirichlet Allocation)是一种文档生成模型。它认为一篇文章是有多个主题的,而每个主题又对应着不同的词。一篇文章的构造过程,首先是以一定的概率选择某个主题,然后再在这个主题下以一定的概率选出某一 ...

1,项目说明

1.1 数据分析师可以驾驭的数据处理模板

LDA(Latent Dirichlet Allocation)是一种文档生成模型。它认为一篇文章是有多个主题的,而每个主题又对应着不同的词。一篇文章的构造过程,首先是以一定的概率选择某个主题,然后再在这个主题下以一定的概率选出某一个词,这样就生成了这篇文章的第一个词。不断重复这个过程,就生成了整片文章。这里假定词与词之间是没顺序的。

LDA的使用是上述文档生成的逆过程,它将根据一篇得到的文章,去寻找出这篇文章的主题,以及这些主题对应的词。

Python3下的Gensim库,是一个自然语言处理库,能够将文档根据TF-IDF, LDA, LSI 等模型转化成向量模式,以便进行进一步的处理。此外,gensim还实现了word2vec功能,能够将单词转化为词向量。

Python+gensim【中文LDA】简洁模型一文做了详细讲解,本notebook参照该文做了简化。没有采用jieba分词,而是采用GooSeeker分词和文本分析软件的输出结果。这样做的有个最大好处是:剩下要写的python代码就很少了,防止分散过多精力去调试程序。另外,GooSeeker分词软件有图形界面,在交互数据分析过程中可以清楚地观察分析过程和结果,符合数据探索的要求。

下图展示了本notebook使用的处理流程

在之前的实验中,我们借助GooSeeker分词和文本分析软件生成的分词结果和情感分析结果,在notebook中做词云图和情感走势图。本次实验,为了聚焦于Gensim部分的使用,减少python的代码量,我们依然直接读取GooSeeker分词和文本分析软件生成的分词结果,做进一步的处理。

1.2 本模板适应的场景

本模板根据GooSeeker分词和文本分析软件生成的分词效果表,对数据进行基本处理后,调用Gensim库做进一步处理。

1.3 使用方法

基本操作顺序是:

1. 在GooSeeker分词和文本分析软件上进行任务创建并导入包含原始内容的excel,并导出分词效果表

2. 将导出的分词效果表放在本notebook的data/raw文件夹中

3. 从头到尾执行本notebook的单元

注意:每个notebook项目目录都预先规划好了,具体参看Jupyter Notebook项目目录规划参考。如果要做多个分析项目,把整个模板目录专门拷贝一份给每个分析项目。

1.4 简要技术说明

在每个功能项单元,如果不需要关心的编程细节,将注明【编程细节】。

本notebook主要实现以下几个步骤:

1. 读取data/raw文件夹中的从分词工具导出的分词效果表

2. 对分词效果表进行基本的预处理

3. 使用Gensim库做LDA主题模型实验

4. 使用可视化工具分析生成的主题

2,第三方库

本notebook使用了gensim库和pyLDAvis库,gensim库用于生成BOW词袋和做LDA主题提取, pyLDAvis库用于LDA主题结果的可视化。

请安装下面2个第3方库,方法步骤是:

1. 在Windows开始菜单中找到Anaconda

2. 在Anaconda菜单中找到Anaconda Prompt菜单,选择这个菜单可以打开一个命令行窗口,在命令行窗口中执行下面两条命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gensim #国内安装使用清华的源,速度快

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyLDAvis

3,数据源

数据源是GooSeeker分词和文本分析软件生成的分词效果表。 原始数据是从微博上采集的关于“甘肃马拉松事故”的博文数据。供参考和实验。

将要分析的微博内容以Excel格式导入GooSeeker分词软件,几分钟后就能得到词频词性表和分词效果表。如果还做了关键词筛选,还可以生成共词矩阵和社交关系图。另外情感分析也可自动执行,也可以配置自己的情感词库和文本分类关键词。下图展示了可导出的分词结果表。本文使用Python对分词效果表进行统计分析和画图。

下图显示的是从集搜客分词和文本分析软件导出的分词效果表数据,下面我们会读取这个excel并且把"分词数据"这一列"做处理和转换,每个单元格按Gensim的要求转换成一个列表。

4,修改历史

2021-06-18:第一版发布

5,版权说明

本notebook是GooSeeker大数据分析团队开发的,所分析的源数据是GooSeeker分词和文本分析软件生成的,本notebook中的数据和代码可自由共享使用,包括转发、复制、修改、用于其他项目中。

6,python程序

6.1 准备程序环境

导入必要的Python程序包,设定要分析的文件名变量。使用以下变量对应GooSeeker分词结果表:

file_word_freq:词频表

file_seg_effect: 分词效果表

file_word_choice_matrix: 选词矩阵表

file_word_choice_match: 选词匹配表

file_word_choice_result: 选词结果表

file_co_word_matrix: 共词矩阵表

【编程细节】本节下面的代码将对上述词频表名变量赋值


6.2 检测data\raw目录下是否有分词效果表

C:\Users\work\workspace_219\notebook\微博内容分词后怎样用JupyterNotebook做LDA主题模型实验-0621\notebook\eda\..\..\data\raw

分词效果excel表: data\raw\ 分词效果_202106180944189420.xlsx

6.3 读取分词效果表

以下的演示以GooSeeker分词和文本分析软件生成的分词效果excel表为例,需要把分词效果表放到本notebook的data/raw文件夹下

分词效果表已经把每个句子切分成了一个个词,词与词之间用空格间隔,所以,只需要执行split,就能分成词数组

6.4 对读取到的分词效果数据(语料库)进行预处理

去除纯数字和只有一个字的词

6.5 使用Gensim库进行主题模型实验

根据处理后的语料库生成唯一性词典

显示词典的前10行

生成矢量列表(list of vectors)

显示矢量列表的前10行

使用Gensim库的models.LdaModel方法进行主题建模

注意:本步骤的运行时间长短,和语料库的大小有关。语料库大的话,需要等待的时间会相应比较长

运行完成后会看到提示显示:LDA建模运行结束

显示提取出的每个主题的相关词

建模后,会生成每篇文档对应每个主题的概率

下面显示前10篇文档

6.6 根据提取的模型数据进行可视化

在这个图上,可以鼠标悬浮在某个话题上,查看这个话题的特征词。

已经上面提取的3个主题下的词,作者依据自己的理解总结为:

主题1:关于事故原因方面的,天灾还是人祸

主题2:事故救援方面

主题3:极端天气讨论

上面话题地图中引用了两篇论文,分别是:

1. LDAvis: A method for visualizing and interpreting topics

2. Termite: Visualization Techniques forAssessing Textual Topic Models

7,本次实验存在的问题及下一步的实验

1. 由于本次实验使用的语料库(微博记录)总共只有2万多条,并且先用集搜客文本分词和情感分析软件做好了分词,所以对电脑资源的消耗不大,所有的数据都是加载到内存处理的。实际的分析项目,需要考虑性能问题,这个可以参考Gensim的官方文档

2. GooSeeker分词和文本分析软件具有手工筛选特征词的功能,下一个实验将先手工选词,再做LDA分析,对比实验效果

3. 语料库的内容质量会影响最后的提取和分析结果, 下一步准备采集电商评论,用LDA做提取消费者话题的实验

8,下载notebook

作为数据探索实验,本notebook放在文件:notebook\eda

微博内容分词后怎样用JupyterNotebook做LDA主题模型实验-0621.zip

第二版于2021-10-16发布,增加了清洗空数据的步骤:

微博内容分词后怎样用JupyterNotebook做LDA主题模型实验_20211016.zip


鲜花

握手

雷人

路过

鸡蛋
发表评论

最新评论

评论 edu0509 2022-5-11 15:36
notebook中有写第三方库的安装:
本notebook使用了gensim库和pyLDAvis库,gensim库用于生成BOW词袋和做LDA主题提取, pyLDAvis库用于LDA主题结果的可视化。

请安装下面2个第3方库:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gensim #国内安装使用清华的源,速度快
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyLDAvis
kopkop: 直接加载pyLDAvis.gensim,然后最后一步的可视化用pyLDAvis.gensim.prepare
评论 kopkop 2022-5-11 15:23
直接加载pyLDAvis.gensim,然后最后一步的可视化用pyLDAvis.gensim.prepare
17773376573: No module named 'pyLDAvis.gensim_models'请问这个怎么解决啊?
评论 17773376573 2022-4-20 15:09
No module named 'pyLDAvis.gensim_models'请问这个怎么解决啊?
评论 gz51837844 2021-10-16 17:03
第二版增加了清洗空数据的步骤,可以点击尾部链接下载
评论 Fuller 2021-10-15 09:33
东斤兑: 执行成功了,已经显示了矢量列表的前10行,就卡在6.4
我把这篇文章最后的notebook下载下来运行了,没有出现问题。我开了一个帖子:https://www.gooseeker.com/doc/thread-19136-1-1.html 。 有什么问题具体在帖子中说一下,帖子可以贴图和代码
评论 东斤兑 2021-10-14 13:54
执行成功了,已经显示了矢量列表的前10行,就卡在6.4
小蜜蜂测试161: 你的上一步执行成功了?要按顺序执行下来才行
评论 小蜜蜂测试161 2021-10-14 10:40
你的上一步执行成功了?要按顺序执行下来才行
东斤兑: 我在搞LDA,然后我做好分词,正要去除纯数字和只有一个字的词,然后根据处理后的语料库生成唯一性词典的时候,老是报错,我不知道是哪一步错了,错误要么是TypeE ...
评论 东斤兑 2021-10-14 10:05
我在搞LDA,然后我做好分词,正要去除纯数字和只有一个字的词,然后根据处理后的语料库生成唯一性词典的时候,老是报错,我不知道是哪一步错了,错误要么是TypeError: 'collections.defaultdict' object is not callable,要么是TypeError: 'float' object is not iterable,请问是为什么?
评论 Fuller 2021-8-30 09:14
15964002091: 这个模板有notebook下载吗
已经在上面的文章中,当成附件发布出来了,也可以到这个网页上看到和下载更多notebook:https://www.gooseeker.com/doc/thread-18414-1-1.html
评论 Fuller 2021-8-29 17:48
15964002091: 这个模板有notebook下载吗
要等明天上班的时候,我把这个notebook贴上来
评论 15964002091 2021-8-29 17:03
这个模板有notebook下载吗

查看全部评论(11)

GMT+8, 2024-4-20 05:39