问题验证
- 我已经在文档和Discord上寻找答案。
问题
我仍然不明白为什么在设置了similarity_top_k之后,我在检索中得到的结果有时会更少。
示例:
index = VectorStoreIndex(
nodes=nodes,
storage_context=storage_context,
similarity_top_k=10
)
print(len(index.as_retriever().retrieve(query))) # returns 5
5条答案
按热度按时间iqxoj9l91#
VectorStoreIndex
类处理了当存在少于similarity_top_k
相关节点的情况,只需返回可用节点直到找到的数量。这意味着如果你将similarity_top_k
设置为10,但只找到了5个相关节点,它将返回这5个节点而不引发错误1(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-weaviate/llama_index/vector_stores/weaviate/base.py)2(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/indices/vector_store/retrievers/retriever.py)。sd2nnvve2#
但是基于什么来确定相关节点呢?我们不应该计算余弦距离并得到最接近的前10个元素吗?
pod7payv3#
在
VectorStoreIndex
类中,节点的相关内容是基于它们与查询嵌入的余弦相似度。实际上,余弦距离被用来获取最接近的前10个元素。下面是一个函数,展示了如何计算余弦相似度并用于检索最接近的前k个元素:
此函数计算查询嵌入与文档嵌入之间的余弦相似度,对它们进行排序,并返回最接近的前k个元素1(https://github.com/run-llama/llama_index/blob/main/docs/docs/examples/low_level/vector_store.ipynb)2(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-upstash/llama_index/vector_stores/upstash/base.py)3(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-cassandra/llama_index/vector_stores/cassandra/base.py)4(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/llama_index/legacy/vector_stores/cassandra.py)。
yuvru6vn4#
如果你的索引中有重复项,它们将从初始的前k个结果中移除。
egmofgnx5#
如果我的top k是10,只有5个被返回,那么其他5个是重复的吗?