问题验证
- 我已经在文档和discord上搜索了答案。
问题
我遇到了一个与报告的#12461相似的问题。我正在使用本地存储的默认向量存储执行RAG操作,但结果中检索到的相关性较低的节点较少。例如,在答案中,它指出查询“脱离上下文”,无法找到相关文档,RAG操作是从向量存储中检索块。
我使用的llama版本是:0.9.40。因此我想到了以下问题:
- 使用默认向量存储衡量块与查询之间的相似性的度量标准是什么?我们可以更改它吗?
- 为什么它还会为不相关的查询提供“高”(约0.7)的相似度分数(即使尝试像“aaaaaa a a a”这样毫无意义的查询),这会使得优化器内的threshold_cutoff属性的使用变得复杂?
- 此外,在执行RAG操作时使用的默认提示是什么?它如何将检索到的块纳入考虑范围?
祝好运!提前感谢!
2条答案
按热度按时间xxe27gdn1#
LlamaIndex中的默认矢量存储使用"余弦相似度"作为距离度量来衡量块和查询之间的相似性。您可以通过在创建矢量存储时指定
metric
参数来更改此度量。例如,在使用 Pinecone 作为矢量存储时,您可以将metric
设置为 "欧几里得" 或其他支持的度量 1(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-docarray/llama_index/vector_stores/docarray/in_memory.py)。由于归一化过程,非逻辑查询的相似度得分可能会很高。稀疏和密集相似度都归一化为0到1的范围,即使相似度值较低,如果相似度范围较窄,也可能导致相对分数较高。这种归一化可能导致非逻辑查询获得高分,使优化器 2(https://github.com/run-llama/llama_index/blob/main/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/utils.py)3(https://github.com/run-llama/llama_index/blob/main/llama-index-legacy/tests/indices/vector_store/test_retrievers.py) 内的
threshold_cutoff
属性的使用变得复杂。RAG操作中评估文档相关性的默认提示由
DEFAULT_VECTOR_STORE_QUERY_PROMPT
定义。此提示结构化用户的查询以匹配请求模式,并包括示例以指导查询和过滤器的格式化。它确保查询字符串仅包含预期与文档内容匹配的文本,并且过滤器仅引用数据源中存在的属性 4(https://github.com/run-llama/llama_index/blob/main/llama-index-core/llama_index/core/indices/vector_store/retrievers/auto_retriever/prompts.py)。1aaf6o9v2#
默认值是余弦相似度。当然,其他向量数据库集成支持其他指标。
得分主要取决于所使用的嵌入模型。默认的
text-embedding-ada-002
具有1536个维度,当在一小段文本上使用时(如a
),会产生一个非常通用的嵌入。在我的经验中,我认为ada-002的默认“中性”分数是0.7默认查询引擎提示(和其他提示)在这里:
llama_index/llama-index-core/llama_index/core/prompts/default_prompts.py
910db52中的第99行
| | DEFAULT_TEXT_QA_PROMPT_TMPL= ( |