私はgensimでwordとdocベクトルの学習中にlog-probabilityを出力したかったのです。私は "slow plain numpy"バージョンでスコア関数の実装を見てきました。word2vec(gensim)のscore_cbow_pair
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トレーニング中に学習されたパラメータを使用する必要があります。しかし、対数確率の計算では、シグモイド関数(word2vec Parameter Learning Explained equation (45))が仮定されています。 したがって、gensimは実際にはlog-probabilityをlprob
に計算しますが、これは単なる比較目的のスコアです。
: -log(1.0/(1.0+exp(-sgn*dot(l1, l2a.T))))
はそれがゼロに近い値のために爆発するので、この式が使用されていないか、それが一般的な間違っていますか?