RAG 技术 03 - 构建索引
索引是构建原始文本块的另一种表示方式,以便在后续能通过该表示方式快速检索到相关上下文
在基于关键词或者向量的索引方式中,其关键过程分为 2 步:
- 分块:对文档内容进行分块处理
- 索引:对分块内容进行关键词、嵌入向量索引
分块优化
块的大小和重叠程度直接影响 RAG 系统的性能。较大的块能提供更多上下文信息,但也会引入更多噪声,增加处理时间和成本。较小的块则噪声较少,但可能无法完整传达上下文。
为了提升效果,目前采用以下方式优化分块过程:
- 带有重叠的滑动窗口:缓解因分隔带来得语义割裂
- Small-to-Big:构建小块和大块的索引,通过检索小块 + 使用大块生成的方式,提升检索准确度
索引优化
在构建索引时,可以通过以下方式增强后续检索的准确性
使用假设问题索引提升检索的对称性
使用 llm 为每个数据块生成 1 个多个的问题,并将预先生成的问题与数据块一起存储,提升检索准确度
除了生成 chunk 的总结提问,还可以总结 chunk 内的实体,形成这个 chunk 的关键字
结构化组织
分层 Indexing
由 LLM 生成摘要并对摘要进行检索可以使得检索过程更为高效,在大型数据库的情况下,一种有效的方法是创建两个索引:一个由摘要组成,另一个由文档块组成,并分两步进行搜索,首先通过摘要过滤掉相关文档,然后在此相关组内进行搜索。
构建结构化索引的方法主要包括:
- 1)基于段落和句子分割的结构感知;
- 2)基于 PDF、HTML 和 Latex 等内在结构的内容感知;
- 3)基于语义识别和分割的语义感知
知识图谱检索
图形搜索利用知识图谱来增强信息检索。通过将数据表示为图形,其中节点表示实体,边缘表示关系,您可以发现关键字搜索或语义搜索方法可能会遗漏的复杂联系。当您输入查询时,图形搜索算法会导航这些关系,从而允许您根据数据的互连性检索直接匹配项和上下文相关信息
此方法对于涉及复杂数据集的应用程序特别有用,在这些应用程序中,了解关系是获得见解的关键。要使用 Graph Search,您必须首先使用 LLM 将数据转换为知识图谱,然后使用 Cypher 查询根据用户查询检索数据
知识图谱能解决一些全局性的复杂问题
元数据
为文档新增元数据,有更多信息过滤文档,提高检索的准确性