我想在gensim中输出学习单词和doc向量的对数概率。我看了一下“slow-plainnumpy”版本中score函数的实现。在
def score_cbow_pair(model, word, word2_indices, l1):
l2a = model.syn1[word.point] # 2d matrix, codelen x layer1_size
sgn = (-1.0)**word.code # ch function, 0-> 1, 1 -> -1
lprob = -log(1.0 + exp(-sgn*dot(l1, l2a.T)))
return sum(lprob)
score函数应该利用在分层softmax训练中学习到的参数。但是在对数概率的计算中,应该有一个sigmoid函数(word2vec Parameter Learning Explained equation (45))。
那么gensim是真的计算lprob
中的对数概率,还是仅仅为了比较目的而计算一个分数。在
我会计算对数概率如下:
-log(1.0/(1.0+exp(-sgn*dot(l1, l2a.T))))
这个等式是因为它在接近于零的值时爆炸,还是在一般情况下是错误的?在
我忽略了sigmoid函数的对数可以重写:
log(1.0/(1.0+exp(-sgn*dot(l1, l2a.T)))) = log(1)-log(1.0+exp(-sgn*dot(l1, l2a.T))) = -log(1.0+exp(-sgn*dot(l1, l2a.T)))
所以代码确实计算了对数似然。在
相关问题 更多 >
编程相关推荐