关于word2vec中的python:score_cbow_pair(gensim)

score_cbow_pair in word2vec (gensim)

我想在gensim中学习单词和doc矢量时输出对数概率。我已经看过了" slow plain numpy"版本中score函数的实现。

1
2
3
4
5
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)

得分函数应利用在等级softmax训练中学习的参数。但是在对数概率的计算中,应该假设有一个S形函数(word2vec参数学习解释方程(45))。
gensim真的会计算lprob中的对数概率吗,还是仅仅是出于比较目的的得分。

我将计算出对数概率如下:
-log(1.0/(1.0+exp(-sgn*dot(l1, l2a.T))))

是否使用此方程式,因为它会爆炸接近零的值,或者通常是错误的吗?


我忽略了S型函数的对数可以重写: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)))

因此,代码确实计算了对数似然。