在word2vec(gensim)中得分

2024-09-29 01:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在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))))

这个等式是因为它在接近于零的值时爆炸,还是在一般情况下是错误的?在


Tags: 函数logl1docmodel对数概率单词
1条回答
网友
1楼 · 发布于 2024-09-29 01:25:01

我忽略了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)))

所以代码确实计算了对数似然。在

相关问题 更多 >