llama_index [问题]:在RAG操作中用于检索块的相似度指标是什么?

nsc4cvqm  于 5个月前  发布在  其他
关注(0)|答案(2)|浏览(66)

问题验证

  • 我已经在文档和discord上搜索了答案。

问题

我遇到了一个与报告的#12461相似的问题。我正在使用本地存储的默认向量存储执行RAG操作,但结果中检索到的相关性较低的节点较少。例如,在答案中,它指出查询“脱离上下文”,无法找到相关文档,RAG操作是从向量存储中检索块。
我使用的llama版本是:0.9.40。因此我想到了以下问题:

  • 使用默认向量存储衡量块与查询之间的相似性的度量标准是什么?我们可以更改它吗?
  • 为什么它还会为不相关的查询提供“高”(约0.7)的相似度分数(即使尝试像“aaaaaa a a a”这样毫无意义的查询),这会使得优化器内的threshold_cutoff属性的使用变得复杂?
  • 此外,在执行RAG操作时使用的默认提示是什么?它如何将检索到的块纳入考虑范围?

祝好运!提前感谢!

xxe27gdn

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)。

  • 要继续与 Dosu 对话,请提及 @dosu。*
1aaf6o9v

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= ( |

相关问题