大规模主题模型:对Spark LDA算法的改进

这篇文章由Databricks的Feynman Liang和Joseph Bradley,以及Intel的Yuhao Yang撰写。

在使用LDA之前,请先 下载Spark 1.5或是 申请试用版的Databricks。

人们正在推特上讨论什么呢?为了关注分布式计算,我该阅读哪些资讯文章呢?这些问题都能够被话题模型所解答,它是分析文档集所涵盖话题类别的一种技术。本文将要讨论Spark 1.4和1.5使用强大的隐含狄利克雷分布 (Latent Dirichlet Allocation,LDA)算法对话题模型的性能提升。

Spark 1.4和1.5引入了一种增量式计算LDA的在线算法,在已训练的LDA模型上支持更多的查询方式,以及支持似然率(likelihood)和复杂度(perplexity)的性能评估。我们给出了一个例子,用超过450万条维基百科词条的文档集训练一个话题模型。

话题模型和LDA

话题模型分析一个大规模的文档集,并且自动推测其所讨论的话题。举个例子,我们用Spark的LDA算法训练450万条维基百科词条,可以得到下表中的这些话题。

表一:用维基百科文档集训练得到的LDA话题示例

此外,LDA告诉我们每篇文档分别属于哪些话题;文档X有30%的概率属于话题1(“政治”)以及70%的概率属于话题5(“航线”)。隐含狄利克雷分布(LDA)是实践中最成功的话题模型之一。阅读我们 之前的文章了解更多关于LDA的介绍。

一种新的在线变分学习算法

在线变分预测是一种训练LDA模型的技术,它以小批次增量式地处理数据。由于每次处理一小批数据,我们可以轻易地将其扩展应用到大数据集上。MLlib按照 Hoffman论文里最初提出的算法实现了一种在线变分学习算法。

性能对比

上表所示的话题是用新开发的在线变分学习算法训练得到。如果我们对比时间开销,可以发现新算法相比原来的EM算法效率有显著提升:

图1:在线学习算法比之前的EM算法速度更快

实验细节

我们首先对数据预处理,滤去常见的英语停用词,并且将词表限制在10000个常用单词之内。然后用在线LDA优化器迭代100次训练得到100个LDA话题模型。我们的实验在 Databricks上进行,训练用到了16个节点的AWS r3.2x大集群,数据存放在S3。具体代码详见 github。

改进的预测、评估和查询

预测新文档的话题

除了描述训练文档集的话题之外,Spark 1.5支持让用户预测新测试文档所属的话题,使得已训练的LDA模型更有用。

用似然率和复杂度评估模型

在训练完一个LDA模型之后,我们通常关心模型在数据集上的表现如何。我们增加了两种方式来评估效果: 似然率和复杂度。

支持更多的查询方式

新的版本添加了一些新的查询方式,用户可以用在已训练的LDA模型上。例如,现在我们不仅能获得每篇文档的top k个话题(“这篇文档讨论了什么话题?”),也能得到每个话题下排名靠前的文档(“若要学习X话题,我该阅读哪些文档?”)。

运行LDA的小技巧

  • 确保迭代次数足够多。前期的迭代返回一些无用的(极其相似的)话题,但是继续迭代多次后结果明显改善。我们注意到这对EM算法尤其有效。
  • 对于数据中特殊停用词的处理方法,通常的做法是运行一遍LDA,观察各个话题,挑出各个话题中的停用词,把他们滤除,再运行一遍LDA。
  • 确定话题的个数是一门艺术。有些算法可以自动选择话题个数,但是领域知识对得到好的结果至关重要。
  • 特征变换类的Pipeline API对于LDA的文字预处理工作极其有用;重点查看Tokenizer,StopwordsRemover和CountVectorizer接口。

下一步是什么?

Spark贡献者正在积极地优化我们的LDA实现方式。正在进行的工作有: 吉布斯采样(一种更慢但是有时更准确的算法), 流式LDA算法和 分层狄利克雷处理(自动选择话题个数)。

感谢

LDA的开发得益于众多Spark贡献者的通力合作。

Feynman Liang、Yuhao Yang、Joseph KBradley等人完成了最近这次优化, 其它众多朋友对早期版本亦有贡献。

原文链接: Large Scale Topic Modeling: Improvements to LDA on Spark(译者/赵屹华 审校/朱正贵 责编/仲浩)

译者简介:赵屹华,搜狗算法工程师,关注大数据和机器学习。

原文发布于微信公众号 - CSDN技术头条(CSDN_Tech)

原文发表时间:2015-11-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据派THU

13张动图助你彻底看懂马尔科夫链、PCA和条件概率!

[ 导读 ]马尔科夫链、主成分分析以及条件概率等概念,是计算机学生必学的知识点,然而理论的抽象性往往让学生很难深入地去体会和理解。而本文,将这些抽象的理论概念,...

1031
来自专栏AI科技大本营的专栏

AI 技术讲座精选:TensorFlow 图像识别功能在树莓派上的应用

【AI100 导读】上周 TensorFlow 1.0 的发布使之成为最有前景的深度学习框架,也在中国 AI 社区中掀起了学习 TensorFlow 的热潮,不...

4438
来自专栏思影科技

《大话脑成像》系列之一:浅谈功能脑网络

最近,经我们team经过数轮研讨之后,决定开辟一个专栏,以寓教于乐的方式和浅显通俗的语言为关注者带来一些原理或方法上的理解,望读者们喜欢吧,如果出现些许...

4067
来自专栏思影科技

《大话脑成像》系列之二:不同模态脑网络的构建

接上回 只见孔乙己涨红了脸,额上的青筋条条绽出,争辩道,“这不能算报错……是BUG!……写代码的事,能算错么?”接连便是难懂的话,什么“涡旋噪声”、“敏捷开发...

3226
来自专栏Duncan's Blog

Personalized Search论文阅读笔记

论文中首先总结了之前的工作中对用户和资源的profile构建的方法,用户和资源的profile的tag的权重计算方法有TF、TF-IDF、BM25,以及用户兴趣...

1053
来自专栏PPV课数据科学社区

【数据分析】R语言中用自助法求统计量置信区间

当样本不符合理论分布假设时,求样本统计量的置信区间就成为一个难题。而自助法(Bootstrap)的思路是对原始样本重复抽样产生多个新样本,针对每个样本求取统计量...

4685
来自专栏深度学习之tensorflow实战篇

协同过滤算法概述与python 实现协同过滤算法基于内容(usr-item,item-item)

协调过滤推荐概述   协同过滤(Collaborative Filtering)作为推荐算法中最经典的类型,包括在线的协同和离线的过滤两部分。所谓在线协同,...

6894
来自专栏ATYUN订阅号

TensorFlow:如何通过声音识别追踪蝙蝠

在之前的教程中,我们利用TensorFlow的Object Detector API训练了浣熊检测器,在这篇文章中,我将向你展示如何使用TensorFlow构建...

3115
来自专栏AI研习社

Github 项目推荐 | Tensorflow.js 进化建模

这是 Siraj Raval 在 Youtube 上用 Tensorflow.js 实现Evolution建模的代码。

1574
来自专栏BestSDK

谷歌用深度机器算法检测癌症,准确率高过医学博士!

在检查患者的生物组织样品后, 病理学家的报告通常是许多疾病的黄金诊断标准。特别是对于癌症,病理学家的诊断对患者的治疗具有深远的影响。病理切片审查是一个非常复杂的...

3235

扫码关注云+社区