NLP:使用LDA在几分钟内从数据集中提取主题!
点击上方关注,All in AI中国
作者:Priya Dwivedi
让我们一起用数据来做一些很酷的事情!
最近我开始学习关于主题建模方面的文档主题生成模型(LDA),并对它强大的功能和快速的运行感到惊讶。主题建模是使用无监督学习提取文档集合中出现的主要主题(通常表示为一组单词)的一项任务。
我在20个新闻组数据集上测试了该算法。该数据集包含来自众多新闻报道/媒体的上千篇新闻文章。在这个数据集中,我提前知道了这些新闻的主要主题,以验证LDA是识别是否正确。
代码运行起来非常简单和快速。你可以在GitHub里面找到它们。我觉得你有必要亲自尝试一下(https://github.com/priya-dwivedi/Deep-Learning/blob/master/topic_modeling/LDA_Newsgroup.ipynb)。
关于LDA
LDA用于将文档中的文本分类为特定的主题。它根据文档模型构建主题,根据主题模型构建单词,建模为狄利克雷分布(Dirichlet distributions)。
1.每个文档建模为主题的多项分布,每个主题建模为单词的多项分布。
2.LDA假设我们输入的每一个文本块都会包含一些相关的词。因此,选择正确的语料库至关重要。
3.它还假设文档是由多个主题混合生成的。然后这些主题根据它们的概率分布生成单词。
要了解更多关于LDA的信息,请查看此链接:http://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf。
使用数据集
我使用的数据集是20个新闻组数据集。它可在sklearn数据集下使用,而且可以轻松地下载为:
这个数据集已经通过主题对新闻做出分类。你可以通过:
数据集中有20个目标/主题:
- 无神论
- 图形学
- 微软公司的视窗操作系统
- windows电脑硬件
- 苹果电脑硬件
- windows X系统
- 待售
- 汽车
- 摩托车
- 棒球
- 曲棍球
- crypt命令
- 电子
- 微电子装置
- 空间
- 基督徒
- 枪支
- 中东地区
- 多元政治
- 多元宗教信仰
简单的看,我们可以说这个数据集有几个广泛的主题,如:
1.科学
2.政坛
3.体育
4.宗教
5.技术等
在Python中使用LDA提取主题
1.对原始文本进行预处理
涉及的方法有:
标记化:将文本分成句子,句子分成单词。将单词小写,并删除标点符号。
少于3个字符的单词将被删除。
停止词都删除。
把文中的词按屈折变化形式进行归类:第三人称的词变成了第一人称,过去时态和将来时态的动词变成了现在时态。
单词还原:调整单复数等变化,回到单词最初的样子。
我们使用NLTK和gensim库来执行预处理。
文本结果如下:
2.将文本转换成词袋
在进行主题建模之前,我们将标记化和屈折变化的文本转换为词袋——你可以将其看作是一个字典,关键是单词,最有价值的部分是单词在整个语料库中出现的次数。
我们可以进一步过滤出现次数很少或频繁出现的单词。
现在,对于每个预处理文档,我们使用刚刚创建的字典对象将文档转换为词袋。也就是说对于每个文档,我们创建一个字典来报告这些单词的数量和出现次数。
结果如下:
3.运行LDA
这实际上非常简单,因为我们可以使用gensim LDA模型。我们需要指定数据集中有多少个主题。在我看来,我们从8个独特的主题开始。pass的数量是通过文档训练的次数。
结果和原理解释
就这样模型建立了。现在让我们来看看结果是否有意义。
模型的输出是8个主题,每个主题由一系列单词分类。LDA模型没有给这些词取一个主题名称,需要我们作出解释。请参阅下面的模型输出示例,并弄清楚LDA是如何为这些词分配潜在的主题的。
检查GitHub代码查看所有的主题。并使用模型来增加减少主题的数量(https://github.com/priya-dwivedi/Deep-Learning/blob/master/topic_modeling/LDA_Newsgroup.ipynb)。
意见/看法
1.该模型在提取数据集中独特主题方面做得非常好,如果我们知道具体名称,我们可以确认这些主题。
2.模型运行得很快。我可以在几分钟内从数据集中提取主题。
3.它运行的前提是假设数据集中有不同的主题。因此,如果数据集中是一堆随机编写的推文,那么模型结果可能无法解释。
未来如何改进
我对Guided LDA很感兴趣,想尝试一下:https://medium.freecodecamp.org/how-we-changed-unsupervised-lda-to-semi-supervised-guidedlda-e36a95f3a164。
其他作品
http:/DepplearningAnalytics.org/blog
我喜欢在有趣的问题上工作。我已经帮助几家初创企业部署了最新的基于人工智能的解决方案。你可以看一看:http://deeplearninganalytics.org/。
参考文献
1.非常感谢Udacity,特别是他们的NLP 纳米学位,让学习变得非常有趣。
2.LDA论文:http://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf