2016-08-31 5 views
0

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) 

스코어 기능은 계층 적 소프트 맥스 교육 중에 습득 한 매개 변수를 사용해야합니다. 그러나 로그 확률 계산시 시그 모이 드 함수 (word2vec Parameter Learning Explained equation (45))가 있어야합니다. 그래서 gensim은 실제로 로그 확률을 lprob으로 계산하거나 비교를위한 점수 일뿐입니다.

다음과 같이 내가 로그 확률을 계산 한 것입니다

: -log(1.0/(1.0+exp(-sgn*dot(l1, l2a.T))))

이 제로에 가까운 값을 폭발 때문에이 방정식을 사용하지 않거나 일반 잘못이다?

답변

0

나는 시그 모이 드 함수의 로그가 다시 작성 될 수 있음을 간과했습니다 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)))

그래서 코드는 로그 가능성을 계산한다.