gpt4 book ai didi

python - 了解 gensim.similarities.index 中 AnnoyIndexer 的most_similar 方法

转载 作者:行者123 更新时间:2023-11-30 22:09:30 25 4
gpt4 key购买 nike

所以我制作了一个 AnnoyIndexer 并运行一些most_similar 查询来查找 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`), ...]"

AnnoyIndex 返回的距离是向量之间的欧氏距离。因此该方法需要将欧氏距离转换为余弦距离。余弦距离等于1 - e/2哪里e是欧氏距离值,因此是变换。请参阅this推导等价性。

另请注意,此转换不会改变值之间的顺序关系,请考虑 0 < d1 < d2 < 1然后d1/2 < d2/21 - d1/2 < 1 - d2/2 ,所以如果 d1距离为o1d2o2那么改造后o1仍然比 o2 更接近查询向量.

关于python - 了解 gensim.similarities.index 中 AnnoyIndexer 的most_similar 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51903087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com