我的算法需要计算p(words|topic)
。
通过Python lda,我们可以很容易地得到p(words|topic)
>>> print(ldamodel.print_topics(num_topics=2, num_words=4))
['0.054*pressur + 0.054*drive + 0.054*brother + 0.054*mother', '0.070*brocolli + 0.070*good + 0.070*health + 0.050*eat']
但是,对于lda-ruby
gem,print_top_words只能输出已排序的单词(根据主题),但它们的概率仍然未知:
2.2.3 :066 > lda.top_words 2
{
0 => [
[0] "i",
[1] "new"
],
1 => [
[0] "government",
[1] "officials"
],
...
19 => [
[0] "i",
[1] "children"
]
}
我发现top_words正在使用lda#beta
对每个主题的单词进行排序,beta是[topic_num * words_num]
2D_matrix,其中填充了负浮点数,范围从-800~0
(大约),浮点数越大(接近0),top_words排名的单词越高。
我认为我接近我的对象(get p(words|topic)
),但我不知道如何解释这个beta矩阵。它不同于其他矩阵lda#gamma([doc_num * topic_num]
,填充正浮点数,在归一化后可以解释为p(topic|doc)
,因为beta充满了负数,我还没有找到关于它的指令。
有没有人知道如何在lda-ruby
中使用测试版或其他任何内容来获取p(words|topic)
?