2014-09-24 9 views
2
def n_similarity(self, ws1, ws2): 
    v1 = [self[word] for word in ws1] 
    v2 = [self[word] for word in ws2] 
    return dot(matutils.unitvec(array(v1).mean(axis=0)), matutils.unitvec(array(v2).mean(axis=0))) 

이것은 gensim.word2Vec에서 발췌 한 코드입니다. 두 개의 단일 단어의 유사성은 코사인 거리로 계산할 수 있지만 두 단어 집합은 무엇입니까? 코드는 각 wordvec의 평균을 사용한 다음 두 평균 벡터의 코사인 거리를 계산합니다. Word2vec에서 몇 가지를 알고 있습니다. 그런 프로세스의 기초가 있습니까?gensim.word2vec에서 두 개의 bag-of-words가 이렇게 비슷한 방식으로 계산 된 이유는 무엇입니까?

답변

2

모든 단어 벡터의 평균을 취하는 것이 가장 간단한 방법으로 단일 벡터로 줄여서 코사인 유사성을 사용할 수 있습니다. 직관은 모든 단어 벡터를 합하면 결과에 의미 (의미)가 조금씩 생기는 것입니다. 그런 다음 벡터의 수를 나누어 더 큰 단어 모음이 더 긴 벡터로 끝나지 않도록합니다 (어쨌든 코사인 유사성에 중요하지 않음).

전체 문장을 단일 벡터로 축소하는 다른 방법은 복잡합니다. 나는 그것에 관한 related question에 관해 그것에 관한 작은 조각을 썼다. 그 이후로 많은 새로운 알고리즘이 제안되었습니다. 더 접근하기 쉬운 것 중 하나는 Paragraph Vector이며, word2vec에 익숙하다면 이해하는데 문제가 없습니다.

+0

Thx 많이! 그것이 내가 찾고있는 것입니다. – AndyLiu

+1

그러나 단락 벡터조차도 전체 문장/단락의 표현으로 훈련 과정에서 단어의 평균을 사용합니다. –