编者按:LDA是一个简洁、优雅、实用的隐含主题模型,腾讯效果广告平台部(广点通)的工程师们为了应对互联网的大数据处理,开发了大规模隐含主题模型建模系统Peacock,通过并行计算对10亿x1亿级别的大规模矩阵进行分解,从而从海量样本数据中学习10万到100万量级的隐含语义。Peacock已应用在腾讯的文本语义理解、QQ群的推荐、用户商业兴趣挖掘、相似用户扩展、广告点击率转化率预估等多个业务数据中。本文节选自Peacock团队的论文《Peacock:大规模主题模型及其在腾讯业务中的应用》,分享了广点通Peacock研发和训练的技术思想和技术细节,以及Peacock在腾讯业务中的应用,供读者参考。以下为节选章节: 三、十亿文档、百万词汇、百万主题?LDA 的训练算法貌似并不复杂,主要的工作就是在维护两个频率计数矩阵N_td 和N_wt。然而在这个时代,我们要面对的是互联网的海量数据,想象一下,如果在图15中,左边的文档节点是十亿、中间的主题个数是百万、右边不同的词的个数也是百万,我们将需要处理一张多大的图! 图15文档d_1中词w主题重新采样 在实际应用中,我们希望使用更多的数据训练更大的模型,这包含了两重意思:
下面分别从数据并行和模型并行两个方面来介绍怎样解决上述两个问题。“数据并行”和“模型并行“是Google大神Jeff Dean在深度学习训练系统DistBelief[13]中新提出的两个概念,尽管Peacock系统开发的时候,DistBelief还没有真正对外公布。随着深度学习的持续升温,大家现在已经逐渐熟悉了这两个形象的名词,此处请允许我们借用一下这两个概念。 3.1 数据并行——处理更多的数据“数据并行”通俗的理解:通过多任务(每个任务都包含一份完整的模型)并行的处理数据训练模型,任务之间的模型或同步或异步的进行融合。借用王益[3]的说法,“如果一个算法可以做数据并行,很可能就是可扩展的了”。幸运的是,David Newman团队发现基于吉布斯采样的LDA训练算法可以“数据并行”,并给这个算法取了一个名字叫AD-LDA[14]。 注意,AD-LDA算法是吉布斯采样的近似算法,因为严格的吉布斯采样要求串行采样,不能并行。直观的理解就是语料中前一个词w_1采样更新后的N_wt和N_t应该应用于后一个词w_2的采样,而不是w_1和w_2的采样都基于相同状态的N_wt和N_t。AD-LDA算法会使得LDA的训练收敛速度变慢,但在多几轮迭代后,AD-LDA算法可以收敛到与串行吉布斯采样相同的点。 图17给出了AD-LDA算法的示意图:
AD-LDA算法的整个过程和MapReduce的执行过程非常一致,所以早期有非常多的团队使用MapReduce来实现AD-LDA算法[5]:
因为MapReduce使用磁盘进行数据交换,同时整个训练任务需要调度几百个Jobs,所以基于MapReduce的AD-LDA实现是非常低效的。 图17 AD-LDA算法 3.2 模型并行——训练更大的模型图18 模型并行1 上文提到,训练大模型时,N_wt太大而无法整体放入任务的内存,直观的解决方法如图18所示,将N_wt沿词的维度进行分片,每个采样任务只加载一个模型分片N_wt^((i))。相应的,语料数据块也需要做对应的词维度切分,因为单个任务i只能采样N_wt^((i))包含的词w。细心的童鞋可能已经发现,图18所示的模型并行方式在N_td上采用了类似AD-LDA算法的近似,L N_td间的融合与L N_wt间的融合类似,相应的算法也会减缓收敛(因为N_wt是所有训练语料上的聚合结果,而N_td只和具体文档d有关,后者变化比前者更加“快速”, N_td的并行近似采样更加“危险”,很容易造成训练不收敛)。 图19 模型并行2 有没有办法不进行N_td的并行近似采样,同时保持上述的模型切片方式呢?Peacock系统设计了图19所示的并行采样方式:加载了不同N_wt^((i))切片的任务并行的沿对角线方向对训练语料数据块(W,T)进行采样,一条对角线采样完成后,依次进行下一条对角线。这样在对同一个文档的不同数据块间的词进行采样时,仍然保持了“串行性”,应用了之前数据块中的词对N_td的更新。图19的模型并行采样方式收敛性同AD-LDA是一致的。 |