2 SparseLDA算法

本章将介绍一种Gibbs Sampling算法的加速算法——SparseLDA [9],它主要利用LDA 模型的稀疏性,来达到加速以及节省内存的目的,是一种精确算法(没有近似)。

2.1 背景

q(z)=ntk,¬i+βnk,¬i+βV(nkm,¬i+αk)(1)

在介绍具体的算法之前,我们先细化一下算法 LdaGibbs 中的文档采样(主要是 k~∼p(zi|{z⃗ }¬i,{w⃗ }) 的采样),具体见 StandardGibbs,可以看到主要的时间消耗在计算归一化系数 Q(时间复杂度为 O(K))。

上一章给出的LDA训练算法 LdaGibbs :每个采样迭代复杂度是 O(MNm¯¯¯¯¯K)(Nm¯¯¯¯¯表示训练文档的平均长度);内存消耗主要在 nkm 和 ntk,假设都采用Dense存储,内存复杂度是 O(K(M+V));考虑到 nkm 的使用存在局部性,不用常驻内存(可以将上一个迭代的带有主题标号的文档 m 以及对应文档主题直方图 nkm 序列化到磁盘上,采样时通过loader线程预取),内存复杂度是 O(KV)。我们有没有复杂度更低的算法呢?

Porteous等人 [10] 以及Yao等人 [9] 分别给出了自己的解法,都是在优化算法 StandardGibbs 方面做文章。前者的FastLDA算法利用Hölder不等式 [11] 迭代逼近 Q,使得不用每次都计算所有的 q(z)。后者的SparseLDA算法利用LDA模型的稀疏性,也使得不用每次都计算所有的 q(z),同时给出了一种更经济的模型存储方式。因为 SparseLDA 有更好的性能,本章重点介绍 SparseLDA 算法。

题外话,最近(KDD’2014 Best Research Track Paper)Li等人 [12] 利用 Alias 采样以及 Metropolis-Hastings 采样,给出了一个较 SparseLDA 更优的采样算法 AliasLDA。论文给出的实测数据显示,在 K=10,000 情况下,AliasLDA 较 SparseLDA 有一倍左右的性能提升。

2.2 SparseLDA 算法


Figure 7: Length distribution of nkm

Figure 8: Length distribution of ntk

LDA 模型中的 nkm 和 ntk (实现时,一般将 ntk 按词 t 组织成向量)非常稀疏,图 7 和 8 给出了二者的分布。分布来自一份英文语料、主题数 K=200 的实验 [13],语料的文档平均长度 Nm¯¯¯¯¯ 在 30 左右(因为作者的懒惰,没有给出实际的大规模互联网语料上的分布图,但是引用的图已经能说明问题)。实际工程上使用的语义理解 LDA 模型一般使用搜索引擎 Query Log 或 Query Session Log 训练(因为 Query Log 中语义丰富),文档平均长度小于 30,而主题数 K 远大于 200(系列文章后续将介绍的 Peacock 系统支持百万级别主题数模型训练),所以 nkm 和 ntk 将更加稀疏。

Q=∑kntk,¬i+βnk,¬i+βV(nkm,¬i+αk)=∑k⎛⎝⎜ntk,¬i(nkm,¬i+αk)nk,¬i+βV+βnkm,¬ink,¬i+βV+βαknk,¬i+βV⎞⎠⎟=∑kntk,¬i(nkm,¬i+αk)nk,¬i+βVE+∑kβnkm,¬ink,¬

转载于:https://www.cnblogs.com/lmsj918/p/4057878.html

SparseLDA算法相关推荐

  1. 微博收藏(机器学习代码与工具)(一)

    转载自: http://blog.csdn.net/linj_m/article/details/44244051 在微博上见过很多好资料,可是以前一直没有时间好好看,都只能先转发或者收藏,最后一个学 ...

  2. SDCC 2015算法专场札记:知名互联网公司的算法实践

    SDCC 2015算法专场札记:知名互联网公司的算法实践 发表于4小时前|526次阅读| 来源作者投稿|0 条评论| 作者张俊林 SDCC算法架构大数据京东腾讯 摘要:11月21日,为期三天的SDCC ...

  3. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  4. 通用解题法——回溯算法(理解+练习)

    积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...

  5. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

  6. 伍六七带你学算法 进阶篇-排序算法

    给定一个整数数组 nums,将该数组升序排列. 示例 1: 输入:[5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:[5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 各排序算 ...

  7. 伍六七带你学算法 入门篇-卡牌分组

    力扣-914. 卡牌分组 难度-简单 这是一道非常有趣的题,提交通过率令人深思 ,思考它是不是一道简单的题- 开始正题: 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以 ...

  8. 伍六七带你学算法 入门篇-最小的k个数

    java面试题-最小的k个数 难度-简单 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:a ...

  9. 十大算法,描述+代码+演示+分析+改进(赶紧收藏!)

    十大算法 1.冒泡排序 ​ (1)算法描述 ​ 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...

  10. 人工智能3d建模算法_打破国外垄断,全国产3D芯片为机器人“点睛”

    ◎ 科技日报记者 崔爽 传统机器人只有"手",只能在固定好的点位上完成既定操作,而新一轮人工智能技术大大推动了机器和人的协作,这也对机器人的灵活性有了更高要求. 要想像人一样测量. ...

最新文章

  1. CUDA 11功能清单
  2. 企业级LNMP架构搭建实例(基于Centos6.x)
  3. 【展开讲讲?xmind日常小知识】xmind2020插入表格
  4. Git - 忽略的文件冲突解决
  5. 云计算架构设计6大原则,你遵循了吗?| 赠书
  6. PHP 继承新增,php类的扩展和继承用法实例
  7. html实现动态折线图
  8. 多线程调用生成主键流水号存储过程产生主键冲突问题解决方案
  9. java 重载赋值_java中构造方法,set/get方法,方法重载使用解读
  10. 酷我 android 目录,酷我听听:Android平台最强音乐播放器
  11. 【VScode】优雅地将代码打印为 PDF
  12. 图像分割(多分类)将mask变为one hot label
  13. 摄动理论求解非线性单摆振动问题
  14. DCDC电源中同步与异步的区别
  15. Dedecms去掉所有版权
  16. 参考文献意译翻译借鉴
  17. Jbuilder2005破解补丁使用方法和下载地址
  18. 阿里年薪50WJAVA工程师转大数据学习路线!
  19. MY-I.MX6-DEMO Android4.4.2环境搭建
  20. PSD文件误删了怎么恢复?教你三招

热门文章

  1. 成功解决TypeError: distplot() got an unexpected keyword argument ‘y‘
  2. spring security面试
  3. 向量的数量积,向量积,混合积
  4. paddlex,2.1.0识别预测代码(包含视频的)
  5. 计算机系统中引入虚拟内存的好处是什么,虚拟内存的作用是什么
  6. 【旺铺2012分享】导航CSS代码使用修改技巧!
  7. psd 解析 java_PSD解析工具实现(一)
  8. ObjectARX开发(自定义块以及属性的获取)
  9. 防卒指南:996+健身≈猝死
  10. Linux查看系统自启动服务