liguoyu1 / python

49 stars 53 forks source link

关于btm的问题 #1

Open ccluqh opened 6 years ago

ccluqh commented 6 years ago
def reset_biterm(self, bit):
    k = bit.getTopic()
    w1 = int(bit.get_word())-1
    w2 = int(bit.get_word(2))-1

请问,下面更新的时候为什么要先减去1哪? self.nb_z[k] -= 1 self.nwz[k][w1] -= 1 self.nwz[k][w2] -= 1 min_val = -(10**(-7)) 请问,下面这个函数体应该是个空的吧? bit.resetTopic() 谢谢!

liguoyu1 commented 6 years ago

首先减1是为了将相关词上次相关bit的频率值恢复,避免值的无限增加,主要由于bit被赋予新的topic,原来topic下的 频率值计数就不应该再包含该bit的计数。 如果没能理解还请多多交流! def resetTopic(self): self.word_z = -1 非空!定义如上! 以上是我个人对于算法的一点理解!如果还有什么问题,多多交流,相互学习!感谢关注!

ccluqh commented 6 years ago

非常感谢您的解答,还想请问您一下,得到模型后,可以算出一个词的主题分布吗(不是一个词对的主题分布,因为这个通过pzb可以求出)?

liguoyu1 commented 6 years ago

计算出来的就是单个词的主题分布,biterm 词对计算时时假设独立分布的,其联合分布即是词对word概率的乘积,算法是这样讲的。

ccluqh commented 6 years ago

非常感谢您的解答!学习到了!