作者:Susan Li翻译:陈之炎校对:陈汉青本文约1900字,建议阅读5分钟在这篇文章,我们将LDA应用于一组文档,并将文档按照主题分类。

标签:LDA 算法

主题建模是一种用于找出文档集合中抽象“主题”的统计模型。LDA(Latent Dirichlet Allocation)是主题模型的一个示例,用于将文档中的文本分类为特定的主题。LDA算法为每一个文档构建出一个主题,再为每一个主题添加一些单词,该算法按照Dirichlet分布来建模。

那便开始吧!

数据

在这里将使用到的数据集是15年内发布的100多万条新闻标题的列表,可以从Kaggle下载。

先来看看数据。

1048575

图1

数据预处理

执行以下步骤:

  • 标记化——将文本分成句子,将句子分成单词,把单词变为小写,去掉标点符号。

  • 删除少于3个字符的单词。

  • 删除所有的句号。

  • 词形还原——将第三人称的单词改为第一人称,将过去和未来时态中的动词改为现在时。

  • 词根化——将单词简化为词根形式。

加载gensim 和nltk库

[nltk_data] Downloading package wordnet to[nltk_data]
C:\Users\SusanLi\AppData\Roaming\nltk_data…[nltk_data] Package wordnet is already up-to-date!
True

编写一个函数,对数据集执行词形还原和词干预处理。

预处理之后选择要预览的文档。

源文件:
[‘rain’, ‘helps’, ‘dampen’, ‘bushfires’]
标记化和词形还原后的文件:
[‘rain’, ‘help’, ‘dampen’, ‘bushfir’]
成了!
预处理标题文本,将结果保存为“processed_docs’

图2

数据集的词袋

由 “processed_docs”创建一个字典,其中包含单词出现在训练集中的次数。

0 broadcast
1 communiti
2 decid
3 licenc
4 awar
5 defam
6 wit
7 call
8 infrastructur
9 protect
10 summit

Gensim filter_extremes

过滤出以下几种情况下的单词:

  • 在少于15个文档中出现(绝对数)或

  • 在总语料库中占比分数超过0.5

以上两步之后,只保留前10万最频繁出现的单词。

Gensim doc2bow

为每个文档创建一个字典来报告单词和这些单词出现的次数,将其保存到“bow_corpus”,然后再次检查选定的文档。

[(76, 1), (112, 1), (483, 1), (3998, 1)]

预览样本预处理文件的词袋。

Word 76 (“bushfir”) appears 1 time.
Word 112 (“help”) appears 1 time.
Word 483 (“rain”) appears 1 time.
Word 3998 (“dampen”) appears 1 time.

TF-IDF

利用models.TfidfModel模型,创建 ‘bow_corpus’的 tf-idf模型对象,并将其保存到“tfidf”。对整个语料库进行tfidf转换,并将其命名为“corpus_tfidf’。最后,预览第一份文件的TF-IDF分数值。

[(0, 0.5907943557842693),
(1, 0.3900924708457926),
(2, 0.49514546614015836),
(3, 0.5036078441840635)]

使用词袋运行LDA

使用gensim.models.LdaMulticore训练LDA模型并将其保存到“lda_model’

计算每个主题下出现的单词及其相对权重。

图3

你能用每个主题中的单词及其相应的权重来区分不同的主题吗?

利用TF-IDF 运行LDA 

图4

现在,你能用每个主题中的单词及其相应的权重来区分不同的主题吗?

评估利用LDA词袋模型对样本文档进行分类的效果

检查将测试文件归为哪一类。

[‘rain’, ‘help’, ‘dampen’, ‘bushfir’]

图5

测试文档被模型精确归类为可能性最大的那个主题,说明分类准确。

评估LDA TF-IDF模型对样本文档进行分类的效果

图6

测试文档被模型精确归类为可能性最大的那个主题,说明分类准确。

隐含文档上的测试模型

图7

源代码可以在GitHub上找到。期待听到您的反馈或问题。

参考资料:

https://www.udacity.com/course/natural-language-processing-nanodegree--nd892

原文标题:

利用Python实现主题建模和LDA 算法

原文链接:

https://towardsdatascience.com/topic-modeling-and-latent-dirichlet-allocation-in-python-9bf156893c24

编辑:王菁

校对:汪雨晴

译者简介

陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。业余时间喜爱翻译创作,翻译作品主要有:IEC-ISO 7816、伊拉克石油工程项目、新财税主义宣言等等,其中中译英作品“新财税主义宣言”在GLOBAL TIMES正式发表。能够利用业余时间加入到THU 数据派平台的翻译志愿者小组,希望能和大家一起交流分享,共同进步。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

独家 | 利用Python实现主题建模和LDA 算法(附链接)相关推荐

  1. python建模大赛算法_利用Python实现主题建模和LDA 算法(附链接)

    主题建模是一种用于找出文档集合中抽象"主题"的统计模型.LDA(Latent Dirichlet Allocation)是主题模型的一个示例,用于将文档中的文本分类为特定的主题.L ...

  2. matlab 随机森林算法_(六)如何利用Python从头开始实现随机森林算法

    博客地址:https://blog.csdn.net/CoderPai/article/details/96499505 点击阅读原文,更好的阅读体验 CoderPai 是一个专注于人工智能在量化交易 ...

  3. 独家 | 基于Python的遗传算法特征约简(附代码)

    作者:Ahmed Gad 翻译:张睿毅 校对:丁楠雅 本文4700字,建议阅读15分钟. 本教程主要使用numpy和sklearn来讨论如何使用遗传算法(genetic algorithm,GA)来减 ...

  4. 独家 | OpenCV1.12 对极几何和立体视觉简介(附链接)

    作者:Kaustubh Sadekar 翻译:黄瑞迪 校对:张玲本文约6500字,建议阅读15分钟本文将使用OpenCV和立体视觉来赋予计算机这种深度知觉能力. 你是否曾经好奇过,为什么你带上特制的3 ...

  5. 独家 | 全面!手把手教你决策树可视化(附链接代码)

    作者: Terence Parr, Prince Grover 翻译:王雨桐 校对:詹好 本文长度约为9500字,建议阅读10+分钟 本文分析了决策树可视化中的关键因素,比较了现有的可视化工具.并通过 ...

  6. Python:实现reverse letters反向字母算法(附完整源码)

    Python:实现reverse letters反向字母算法 def reverse_letters(input_str: str) -> str:"""Rever ...

  7. python:实现newton_forward_interpolation牛顿前插算法(附完整源码)

    python:实现newton_forward_interpolation牛顿前插算法 from __future__ import annotationsimport math# for calcu ...

  8. Python:实现gnome sortt侏儒排序算法(附完整源码)

    Python:实现gnome sortt侏儒排序算法 def gnome_sort(lst: list) -> list:if len(lst) <= 1:return lsti = 1w ...

  9. Python:实现integer partition整数分区算法(附完整源码)

    Python:实现integer partition整数分区算法 def partition(m: int) -> int:memo: list[list[int]] = [[

最新文章

  1. 基于帝国cms 7.5带支付个人也可以使用的h5微信商城
  2. vue 父组件传子组件数值,父值变更子获取的值没有变的问题
  3. Web前后端笔记-vue封装http请求添加signature及后端(Java)解析并验证
  4. 为什么Linux与众不同?
  5. c语言程序100例第4题 参考了参考答案
  6. 为什么 Kafka 这么快?
  7. 2017-2018-1 20155320 嵌入式C语言——时钟
  8. Atitit 单点登录实现几种模式架构图 目录 1. 因此要点也就以下两个:存储信任验证信任 1 1.1. 共享cookie (最简单 1 1.2. 通过 url带token参数跳转 1 1.3.
  9. javascript案例10——下拉菜单
  10. 单相半桥两电平电压型逆变器的正弦脉宽调制(SPWM)——Matlab程序
  11. Python模块selenium实例:电影分类排名数据生成json,sqlite和excel(openpyxl)文件(一)
  12. VMware添加共享硬盘
  13. iphone与android传文件,安卓与苹果手机之间互传文件的方法教程
  14. 测试种类大汇总(45类)
  15. 20140228老沙的感觉
  16. php怎么切取部分歌曲,怎么把歌曲里的某一段剪切出来-歌曲怎么剪切,音频剪切软件...
  17. TypeError: Direct assignment to the reverse side of a related set is prohibited. Use parent_id.set()
  18. uni-app中使用rich-text如何添加样式控制富文本里面的内容
  19. Web应用程序与桌面应用程序的区别
  20. Flutter中的浮动按钮 FloatingActionButton

热门文章

  1. 【c语言】蓝桥杯算法提高 温度转换
  2. mysql 多库多表_shell脚本建多库、多表、多实例(mysql)
  3. .net精简框架集下的ini文件读取(C#)
  4. 爬虫入门到精通-HTTP协议的讲解
  5. 添加时间数据时 出现多一天或者少一天的问题 解决方案
  6. squidguard实现
  7. squid 使用 笔记
  8. 理解java中的两种接口
  9. js数组如何按照固定的下标去重_js数组去重的三种常用方法总结
  10. Java中图形界面重绘方法