设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 IT综合资讯 查看内容

腾讯Peacock大规模主题模型首次全揭秘

2015-3-2 15:29| 发布者: joejoe0332| 查看: 2974| 评论: 0|原作者: 赵学敏 王莉峰 王流斌 孙振龙 严浩 靳志辉 王益|来自: CSDN

摘要: LDA是一个简洁、优雅、实用的隐含主题模型,腾讯效果广告平台部(广点通)的工程师们为了应对互联网的大数据处理,开发了大规模隐含主题模型建模系统Peacock,通过并行计算对10亿x1亿级别的大规模矩阵进行分解,从而 ...

编者按:LDA是一个简洁、优雅、实用的隐含主题模型,腾讯效果广告平台部(广点通)的工程师们为了应对互联网的大数据处理,开发了大规模隐含主题模型建模系统Peacock,通过并行计算对10亿x1亿级别的大规模矩阵进行分解,从而从海量样本数据中学习10万到100万量级的隐含语义。Peacock已应用在腾讯的文本语义理解、QQ群的推荐、用户商业兴趣挖掘、相似用户扩展、广告点击率转化率预估等多个业务数据中。本文节选自Peacock团队的论文《Peacock:大规模主题模型及其在腾讯业务中的应用》,分享了广点通Peacock研发和训练的技术思想和技术细节,以及Peacock在腾讯业务中的应用,供读者参考。以下为节选章节: 


三、十亿文档、百万词汇、百万主题?

  LDA 的训练算法貌似并不复杂,主要的工作就是在维护两个频率计数矩阵N_td 和N_wt。然而在这个时代,我们要面对的是互联网的海量数据,想象一下,如果在图15中,左边的文档节点是十亿、中间的主题个数是百万、右边不同的词的个数也是百万,我们将需要处理一张多大的图!



图15文档d_1中词w主题重新采样


在实际应用中,我们希望使用更多的数据训练更大的模型,这包含了两重意思:

  1. “更多的数据”,我们希望训练器能处理海量的训练数据,因为更多的数据蕴含着更加丰富的隐含语义,同时模型也更加准确,效果更好。上一小节提到单机版LDA训练器显然是处理不了海量数据的,使用它训练模型,我们估计要等到天荒地老了。
  2. “更大的模型”,我们希望训练器能归纳出更多更具体更长尾的隐含语义,比如一百万主题。抛开标准LDA算法本身的问题,更大的模型意味着N_wt矩阵规模更大。N_wt的大小为V×K,V表示词表大小,K表示主题个数。取V=1,000,000且K=1,000,000,N_wt需要消耗3000G以上内存(假设int型密集存储,因为模型随机初始化并不稀疏),显然单机内存是无法满足需求的,必须对模型进行切分。

  下面分别从数据并行和模型并行两个方面来介绍怎样解决上述两个问题。“数据并行”和“模型并行“是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算法的示意图:

  • 假设我们有三个可执行单元,每个都启动一个采样任务,每个任务中都有一个完整的“本地”模型L N_wt;
  • 任务并行的处理训练语料数据块(W,T)和N_td,更新模型L N_wt,同时序列化更新后的训练语料数据块(W,T)和N_td到磁盘;
  • 在迭代结束或任务处理训练语料数据块过程中,任务之间或同步或异步的融合模型。模型融合的方式可以类似MPI中的AllReduce,也可以借助全局的参数服务器G N_wt。


AD-LDA算法的整个过程和MapReduce的执行过程非常一致,所以早期有非常多的团队使用MapReduce来实现AD-LDA算法[5]:

  • MapReduce的一个Job进行AD-LDA算法的一个迭代;
  • 训练语料数据块(W,T)和N_td作为Job输入,Mapper加载上个迭代生成的G N_wt作为 L N_wt,对数据块中的词进行主题采样;
  • Reducer融合各个L N_wt,生成下一个迭代需要加载的G N_wt。


  因为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是一致的。



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部