Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表中两个单词之间的余弦相似性_Python_Word2vec - Fatal编程技术网

Python 列表中两个单词之间的余弦相似性

Python 列表中两个单词之间的余弦相似性,python,word2vec,Python,Word2vec,我正在定义一个函数,它获取一个单词列表,并返回列表中相互之间具有非零余弦相似度(以及相似度值)的单词的相关信息 有人能帮我解决这个问题吗。我在想,如果我能得到一个预计算的word2vec矢量文件,那将非常有用,但在互联网上没有 您可以定义这两个函数 def word2vec(word): from collections import Counter from math import sqrt # count the characters in word cw

我正在定义一个函数,它获取一个单词列表,并返回列表中相互之间具有非零余弦相似度(以及相似度值)的单词的相关信息


有人能帮我解决这个问题吗。我在想,如果我能得到一个预计算的word2vec矢量文件,那将非常有用,但在互联网上没有

您可以定义这两个函数

def word2vec(word):
    from collections import Counter
    from math import sqrt

    # count the characters in word
    cw = Counter(word)
    # precomputes a set of the different characters
    sw = set(cw)
    # precomputes the "length" of the word vector
    lw = sqrt(sum(c*c for c in cw.values()))

    # return a tuple
    return cw, sw, lw

def cosdis(v1, v2):
    # which characters are common to the two words?
    common = v1[1].intersection(v2[1])
    # by definition of cosine distance we have
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2]
并在本例中使用它们

>>> a = 'safasfeqefscwaeeafweeaeawaw'
>>> b = 'tsafdstrdfadsdfdswdfafdwaed'
>>> c = 'optykop;lvhopijresokpghwji7'
>>> 
>>> va = word2vec(a)
>>> vb = word2vec(b)
>>> vc = word2vec(c)
>>> 
>>> print cosdis(va,vb)
0.551843662321
>>> print cosdis(vb,vc)
0.113746579656
>>> print cosdis(vc,va)
0.153494378078
顺便说一句,你在标签中提到的是一个完全不同的行业,这需要我们中的一个人花大量的时间和精力来研究它,你猜怎么着,我不是那个…

这是怎么回事

scipy.spatial.distance.cosine(word2vec(a),word2vec(b))

您可以使用word2vec库来实现这一点。

您能展示一下您迄今为止所做的尝试吗?有指向几个可供下载的预计算向量集合的指针。非常感谢您如此轻松地解释它。。但是我有一个疑问,我们不能像处理查询和文档一样做同样的事情吗。。我的意思是,首先求一个字母的字母频率,然后求逆单词频率。然后计算cos角?。。只是想知道..不,我展示的是在词汇层面上做的,真正的东西,比如
word2vec
python
免费库,在语义层面上工作。如果我是你,我将尝试调查并最终研究
gensim
库,这是一个基于
word2vec
构建的Python shell。。我正在阅读的代码说明是“编写一个函数,获取单词列表,并返回列表中相互之间具有非零余弦相似度的单词的信息,以及相似度值。”那么这是指语义相似度,还是仅指您建议的正常相似度?这个“距离”看起来方向不对。距离越远,意味着不同,而相似程度越低。