gensim most_similar with positive and negative, 어떻게 작동합니까?

Nov 29 2020

나는 Gensim에 대해 말하는 이 답변을 읽었습니다 most_similar.

벡터 산술을 수행합니다. 양의 벡터를 더하고 음의 값을 뺀 다음 그 결과 위치에서 해당 각도에 가장 가까운 알려진 벡터를 나열합니다.

그러나 내가 그것을 테스트했을 때 그것은 사실이 아닙니다. Gensim "text8"데이터 세트 로 Word2Vec을 훈련하고 다음 두 가지를 테스트했습니다.

model.most_similar(positive=['woman', 'king'], negative=['man'])

>>> [('queen', 0.7131118178367615), ('prince', 0.6359186768531799),...]

model.wv.most_similar([model["king"] + model["woman"] - model["man"]])

>>> [('king', 0.84305739402771), ('queen', 0.7326322793960571),...]

그들은 분명히 동일하지 않습니다. 첫 번째의 여왕 점수조차 동일하지 않은 0.713두 번째 점수입니다 0.732.

그래서 다시 질문합니다. Gensim은 어떻게 most_similar작동합니까? 위의 두 결과가 다른 이유는 무엇입니까?

답변

1 gojomo Nov 29 2020 at 20:55

덧셈과 뺄셈이 전부 는 아닙니다 . 정확한 설명을 보려면 소스 코드를 확인해야합니다.

https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/keyedvectors.py#LC690:~:text=def%20most_similar,self%2C

접근 자를 통해 덧셈과 뺄셈이 각 벡터 의 단위 표준 버전에 있음을 알 수 get_vector(key, use_norm=True)있습니다.

의 사용을 model[key]로 변경 model.get_vector(key, use_norm=True)하면 대상 벡터의 방법 외부 계산이 방법이 positivenegative벡터를 결합하는 것과 동일한 결과를 제공하는 것을 볼 수 있습니다.