我想用tensorflow来实现LDA作为实践,我认为tensorflow版本可能有以下优点:
而在我检查了 lda 的一些 python 实现之后(例如,https://github.com/ariddell/lda/),我不知道可以使用什么 tensorflow 操作,应该构建什么样的图以及应该使用什么优化器我选择。因为 gibbs 采样的过程看起来像是文档主题、主题词矩阵和主题计数表的元素更新。那么tensorflow可以做些什么来简化和优化这个过程呢?
我是否可以将生成的 doc 与实际输入 doc 的可能性视为优化目标,并利用梯度提升优化器来最小化可能性的负数,从而获得 alpha、beta 和 doc-topics 分布?因为如果这是可以处理的,那么这里绝对可以使用 tensorflow。
关于概率编程如何从深度概率编程系统中受益的更广泛的问题,有许多相关的答案。
我可以对 TensorFlow 中的潜在狄利克雷分配 (LDA) 给出一个明确的答案。一个关键的好处是认识到 LDA 只是一个模型。给定此模型,以及表示为逐项矩阵的数据集(例如,通过tf.SparseTensor),TensorFlow 不仅可以让您执行可扩展的推理,还可以执行非常灵活的推理。在 TF 中使用的特定操作取决于特定算法。您可以编写 Gibbs 采样器或协调上升变分推理算法——两者都对 LDA 非常有效(可与tf.assign可训练变量的手动操作一起使用)。CAVI 在计算和内存方面都很高效,可扩展到数百万个文档,并且可以使用高效的数据管道(例如tf.data )进行具体化。
借助 TensorFlow,您还可以使用通用方法,例如黑盒变分推理,这些方法非常通用且不需要手动tf.assign操作。一旦您编写好它来解决您的问题,您就可以通过多种方式扩展 LDA,例如使用非共轭先验、分层先验和深度网络参数化(可以使用tf.layers)。通用方法需要诸如 TensorFlow 优化器和 TensorFlow 的基于梯度优化的自动微分等工具。这些在 Python 中不可用,除非您使用autograd等跟踪工具。
| 归档时间: |
|
| 查看次数: |
4612 次 |
| 最近记录: |