Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 了解gensim.complications.index中索引器的最相似方法_Python_Nlp_Gensim_Word2vec_Annoy - Fatal编程技术网

Python 了解gensim.complications.index中索引器的最相似方法

Python 了解gensim.complications.index中索引器的最相似方法,python,nlp,gensim,word2vec,annoy,Python,Nlp,Gensim,Word2vec,Annoy,所以我做了一个索引器,运行一些最相似的查询,在300维向量空间中找到一些向量的最近邻。这是它的代码: def most_similar(self, vector, num_neighbors): """Find the approximate `num_neighbors` most similar items. Parameters ---------- vector : numpy.array Vector for word/document.

所以我做了一个索引器,运行一些最相似的查询,在300维向量空间中找到一些向量的最近邻。这是它的代码:

def most_similar(self, vector, num_neighbors):
    """Find the approximate `num_neighbors` most similar items.
    Parameters
    ----------
    vector : numpy.array
        Vector for word/document.
    num_neighbors : int
        Number of most similar items
    Returns
    -------
    list of (str, float)
        List of most similar items in format [(`item`, `cosine_distance`), ... ]
    """

    ids, distances = self.index.get_nns_by_vector(
        vector, num_neighbors, include_distances=True)

    return [(self.labels[ids[i]], 1 - distances[i] / 2) for i in range(len(ids))]

我想知道为什么距离的返回值都是从1开始,然后除以2?当然,在这样做之后,最大/最小距离都被弄乱了?

来自gensim的文档:

"List of most similar items in format [(`item`, `cosine_distance`), ...]"
索引返回的距离是向量之间的欧几里德距离。因此,该方法需要将欧氏距离转换为余弦距离。余弦距离等于
1-e/2
,其中
e
是欧氏距离值,因此转换。有关等效性的推导,请参见


还注意到这种转换不会改变值之间的顺序关系,考虑<代码> 0 D1<D2<1 < /代码>然后<代码> d1/2 < d2/2 < /> >和<代码> 1 -d1/2 < 1 -d2/2 < /代码>因此,如果

d1
o1
o2
d2
之间的距离,那么在转换后
o1
仍然比
o2

更接近查询向量,谢谢你的回答,这真的很有帮助。我不明白的一点是,如果它返回向量之间的余弦距离,为什么它会给WordEmbeddingSkeyeAdvectors类中使用COSADD方法的最相似的方法带来不同的结果?COSADD方法不也只是找到余弦距离吗?WordEmbeddingSkeyeAdvectors中最相似的函数返回余弦相似性,余弦距离=1-余弦相似性。有关欧几里得距离、余弦距离和余弦相似性之间关系的更多信息,请参见上的wikipedia条目。