2017-02-22 205 views
8

E.g.我们培养使用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代码其中相似性函数被实现。)

+2

如果它使用余弦相似性,那么范围是[-1,1]。从维基百科文章:“这是一个方向的判断,而不是幅度:两个具有相同方向的向量具有1的余弦相似性,90°处的两个向量具有0的相似性,并且两个径向相反的向量具有-1,与它们的大小无关。“ –

+0

余弦相似性可以解释为点积。因此,如果两个词具有0余弦相似性,则它们是完全正交的,这意味着它们具有两个不同的“含义”并且完全不相关。而负相似意味着这两个词在组件中是相关的,但是以相反(或负)的方式。 –

回答

-1

正如其他人所说的余弦相似性的范围可以从-1到基于两个向量之间的角度1进行比较。 gensim中的确切实现是归一化向量的简单点积。

https://github.com/RaRe-Technologies/gensim/blob/4f0e2ae0531d67cee8d3e06636e82298cb554b04/gensim/models/keyedvectors.py#L581

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])) 

在演绎方面,你能想到这些值的像你想象的相关系数。值1是单词向量(例如,“女人”与“女人”相比)的完美关系,值0表示单词之间不存在关系,并且值-1表示单词之间完全相反的关系。