跳过内容

父子检索器

别名

  • 父文档检索器

所需图结构

父子词汇图 父子词汇图

背景

文本嵌入表示文本的语义。一段更窄的文本会产生更有意义的向量表示,因为来自多个主题的噪音更少。然而,如果LLM只收到一小段信息用于答案生成,这些信息可能会缺少上下文。检索找到信息所在的更广泛的周边文本可以解决这个问题。

描述

用户问题使用之前用于创建块嵌入的相同嵌入器进行嵌入。在子块嵌入上执行向量相似性搜索,以找到 k 个(由开发者/用户预先配置的数量)最相似的块。然后检索找到的子块的父块,并返回父块的附加元数据。对于相同父块的块可以进行聚合,并对其分数进行平均或选择最大值。

用法

此模式是基本检索器的一个有益演进。当一个块中包含多个主题,从而对嵌入产生负面影响时,此模式特别有用,而较小的块将具有更有意义的向量表示,这可以带来更好的相似性搜索结果。只需有限的额外工作,即可获得更好的结果。

所需预处理

将文档分割成(更大的)块(父块),然后将这些块进一步分割成更小的块(子块)。使用嵌入模型来嵌入子块的文本内容。请注意,不需要嵌入父块,因为它们仅用于答案生成,而不用于相似性搜索。

检索查询

MATCH (node)<-[:HAS_CHILD]-(parent)
WITH parent, collect(node.text) as chunks, max(score) AS score // deduplicate parents
RETURN parent.title + reduce(r="", c in chunks | r + "\n\n" + c.text) AS text,
score, {source:parent.url} AS metadata

延伸阅读

现有实现

示例实现

类似模式

类似模式可以在具有同级结构的词汇图具有分层结构的词汇图上实现,其中附加上下文不是仅从检索父文档而来,而是从同级文档或先前设置的结构深度而来。例如,具有同级结构的词汇图目前已在 Neo4j 的 LLM 知识图谱构建器中实现。

请注意,在具有分层结构的词汇图上可以有两种检索器:

Lexical Graph With Sibling Structure

Lexical Graph With Hierarchical Structure

我在哪里?
© . This site is unofficial and not affiliated with Microsoft.