web-dev-qa-db-ja.com

gensimからの負のWord2Vec類似性の解釈

例えば。 gensimを使用してWord2vecモデルをトレーニングします。

_from gensim import corpora, models, similarities
from gensim.models.Word2vec import Word2Vec

documents = ["Human machine interface for lab abc computer applications",
              "A survey of user opinion of computer system response time",
              "The EPS user interface management system",
              "System and human system engineering testing of EPS",
              "Relation of user perceived response time to error measurement",
              "The generation of random binary unordered trees",
              "The intersection graph of paths in trees",
              "Graph minors IV Widths of trees and well quasi ordering",
              "Graph minors A survey"]

texts = [[Word for Word in document.lower().split()] for document in documents]
w2v_model = Word2Vec(texts, size=500, window=5, min_count=1)
_

また、単語間の類似性を照会すると、負の類似性スコアが見つかります。

_>>> w2v_model.similarity('graph', 'computer')
0.046929569156789336
>>> w2v_model.similarity('graph', 'system')
0.063683518562347399
>>> w2v_model.similarity('survey', 'generation')
-0.040026775040430063
>>> w2v_model.similarity('graph', 'trees')
-0.0072684112978664561
_

負のスコアをどのように解釈しますか?

コサイン類似度の場合、範囲は_[0,1]_であってはなりませんか?

Word2Vec.similarity(x,y)関数の上限と下限は何ですか?ドキュメントにはあまり書かれていません: https://radimrehurek.com/gensim/models/Word2vec.html#gensim.models.Word2vec.Word2Vec.similarity =(

Pythonラッパーコードを見ると、それほど多くはありません: https://github.com/RaRe-Technologies/gensim/blob/develop/gensim/models/Word2vec .py#L1165

(可能であれば、類似性関数が実装されている場所の_.pyx_コードを教えてください。)

15
alvas

コサインの類似性は、通常のコサイン波と同様に、-1から1の範囲です。

Cosine Wave

ソースについて:

https://github.com/RaRe-Technologies/gensim/blob/ba1ce894a5192fc493a865c535202695bb3c0424/gensim/models/Word2vec.py#L1511

def similarity(self, w1, w2):
    """
    Compute cosine similarity between two words.
    Example::
      >>> trained_model.similarity('woman', 'man')
      0.73723527
      >>> trained_model.similarity('woman', 'woman')
      1.0
    """
    return dot(matutils.unitvec(self[w1]), matutils.unitvec(self[w2])
9
Eugene K