NLP:使用LDA在几分钟内从数据集中提取主题!

Winifred 2018-08-23

点击上方关注,All in AI中国

作者:Priya Dwivedi

让我们一起用数据来做一些很酷的事情!

NLP:使用LDA在几分钟内从数据集中提取主题!

最近我开始学习关于主题建模方面的文档主题生成模型(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。

NLP:使用LDA在几分钟内从数据集中提取主题!

使用数据集

我使用的数据集是20个新闻组数据集。它可在sklearn数据集下使用,而且可以轻松地下载为:

NLP:使用LDA在几分钟内从数据集中提取主题!

这个数据集已经通过主题对新闻做出分类。你可以通过:

NLP:使用LDA在几分钟内从数据集中提取主题!

数据集中有20个目标/主题:

  • 无神论
  • 图形学
  • 微软公司的视窗操作系统
  • windows电脑硬件
  • 苹果电脑硬件
  • windows X系统
  • 待售
  • 汽车
  • 摩托车
  • 棒球
  • 曲棍球
  • crypt命令
  • 电子
  • 微电子装置
  • 空间
  • 基督徒
  • 枪支
  • 中东地区
  • 多元政治
  • 多元宗教信仰

简单的看,我们可以说这个数据集有几个广泛的主题,如:

1.科学

2.政坛

3.体育

4.宗教

5.技术等

NLP:使用LDA在几分钟内从数据集中提取主题!

在Python中使用LDA提取主题

1.对原始文本进行预处理

涉及的方法有:

标记化:将文本分成句子,句子分成单词。将单词小写,并删除标点符号。

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

停止词都删除。

把文中的词按屈折变化形式进行归类:第三人称的词变成了第一人称,过去时态和将来时态的动词变成了现在时态。

单词还原:调整单复数等变化,回到单词最初的样子。

我们使用NLTK和gensim库来执行预处理。

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用LDA在几分钟内从数据集中提取主题!

文本结果如下:

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用LDA在几分钟内从数据集中提取主题!

2.将文本转换成词袋

在进行主题建模之前,我们将标记化和屈折变化的文本转换为词袋——你可以将其看作是一个字典,关键是单词,最有价值的部分是单词在整个语料库中出现的次数。

NLP:使用LDA在几分钟内从数据集中提取主题!

我们可以进一步过滤出现次数很少或频繁出现的单词。

现在,对于每个预处理文档,我们使用刚刚创建的字典对象将文档转换为词袋。也就是说对于每个文档,我们创建一个字典来报告这些单词的数量和出现次数。

NLP:使用LDA在几分钟内从数据集中提取主题!

结果如下:

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用LDA在几分钟内从数据集中提取主题!

3.运行LDA

这实际上非常简单,因为我们可以使用gensim LDA模型。我们需要指定数据集中有多少个主题。在我看来,我们从8个独特的主题开始。pass的数量是通过文档训练的次数。

NLP:使用LDA在几分钟内从数据集中提取主题!

结果和原理解释

就这样模型建立了。现在让我们来看看结果是否有意义。

模型的输出是8个主题,每个主题由一系列单词分类。LDA模型没有给这些词取一个主题名称,需要我们作出解释。请参阅下面的模型输出示例,并弄清楚LDA是如何为这些词分配潜在的主题的。

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用LDA在几分钟内从数据集中提取主题!

NLP:使用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

NLP:使用LDA在几分钟内从数据集中提取主题!

相关推荐