Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用tensorflow实现LDA(潜在dirichlet分配)的优势_Tensorflow_Lda - Fatal编程技术网

使用tensorflow实现LDA(潜在dirichlet分配)的优势

使用tensorflow实现LDA(潜在dirichlet分配)的优势,tensorflow,lda,Tensorflow,Lda,我想用tensorflow实现LDA作为一种实践,我认为tensorflow版本可能具有以下优点: 快。如果我可以使用内置的ops来表示采样过程 易于并行化。许多ops已经通过并行化优化实现,因此这种lda应该很容易在GPU或分布式集群上运行 更短更干净的代码。与许多其他模型一样,尤其是NNs,使用tensorflow构建此类模型所需的代码更少 在我检查了一些lda的python实现(例如)之后,我不知道可以使用什么样的tensorflow操作,应该构建什么样的图,应该选择什么样的优化器。因

我想用tensorflow实现LDA作为一种实践,我认为tensorflow版本可能具有以下优点:

  • 快。如果我可以使用内置的ops来表示采样过程
  • 易于并行化。许多ops已经通过并行化优化实现,因此这种lda应该很容易在GPU或分布式集群上运行
  • 更短更干净的代码。与许多其他模型一样,尤其是NNs,使用tensorflow构建此类模型所需的代码更少
在我检查了一些lda的python实现(例如)之后,我不知道可以使用什么样的tensorflow操作,应该构建什么样的图,应该选择什么样的优化器。因为gibbs抽样的过程看起来像是文档主题、主题词矩阵和主题计数表的元素更新。那么tensorflow可以做些什么来简化和优化这个过程呢


我是否可以将生成文档与实际输入文档的可能性作为优化目标,并利用梯度提升优化器最小化可能性的负值,从而得到alpha、beta和doc主题分布?因为如果这是可处理的,tensorflow肯定可以在这里使用。

关于如何从系统中获益这一更广泛的问题,有许多相关的答案

对于TensorFlow中的潜在Dirichlet分配(LDA),我可以给出一个明确的答案。一个关键的好处是认识到LDA只是一个模型。给定此模型,以及以术语矩阵(例如,via)表示为文档的数据集,TensorFlow不仅可以执行可伸缩的推理,还可以执行非常灵活的推理。TF中使用的特定ops取决于特定的算法。您可以编写Gibbs采样器或坐标上升变分推理算法,这两种算法对于LDA都是高效的(可用于手动
tf.assign
ops对可训练变量)。CAVI在计算和内存方面都是高效的,并且可以通过高效的数据管道(如


使用TensorFlow,您还可以使用诸如黑盒变分推理之类的通用方法,这些方法非常通用,不需要手动
tf.assign
ops。一旦您编写的LDA能够很好地解决您的问题,您就可以通过多种方式扩展LDA,例如使用非共轭先验、层次先验和深度网络参数化(可能使用)。通用方法需要诸如TensorFlow优化器和TensorFlow的基于梯度优化的自动微分等工具。这些在Python中是不可用的,除非您演示跟踪工具,例如。

我已经运行了这两个模型,所以我想我从实践中得到了一些想法。 LDA的输出是主题分布和单词分布,输入是文档中的单词。Word2Vec的输出是句子的向量表达式。在您的应用场景中,您的目标是推荐相似的主题,而不是句子的相似含义。例如,“我发现一只非常可爱的猫”,“我叔叔的猫很胖,我给它喂食物,我很满意。”这两句话有不同的意思,但这两句话的主题都是猫。
希望有帮助。

LDA的输出是主题上的单词分布,Word2Vec的输出是短语(而不是句子)的向量表达式。可以找到一个用于Tensorflow概率的LDA实现