RAG 探索解析
R(检索- Retrieval)
检索源(Source)
RAG 依靠外部知识来增强 LLMs,而检索源的类型和检索单元的粒度都会影响最终的生成结果。
数据结构
- 非结构化数据,如文本,是使用最广泛的检索源,主要是从语料库中收集(或者百科)。
- 半结构化数据,通常是指包含文本和表格信息组合的数据,如 PDF。
- 结构化数据,如知识图谱(KGs),通常经过验证,可以提供更精确的信息。Knowledge pt 生成 KB 搜索查询并将知识存储在个性化的基础上,增强 RAG 模型的知识丰富性。
除了从原始的外部来源进行检索之外,也可以 LLMs 自身产生的内容进行检索和增强。
检索粒度
粗粒度检索单元理论上可以为问题提供更多的相关信息,但它们也可能包含冗余内容,这可能会分散下游任务中检索器和语言模型的注意力;细粒度检索单元粒度虽然精准划分,但增加了检索的负担,并且不能保证语义完整性和满足所需的知识。在推理过程中选择合适的检索粒度是提高密集检索器的检索和下游任务性能的一个简单而有效的策略。
检索优化(Indexing Optimization)
在索引阶段,文档将被处理,分段,并转换成嵌入,存储在矢量数据库中。索引构造的质量决定了在检索阶段是否能够获得正确的上下文。
分块策略
最常用的方法是将文档按固定数量的token(例如,100、256、512)分割成块。更大的块可以捕获更多的上下文,但它们也会产生更多的噪音,需要更长的处理时间和更高的成本。虽然较小的块可能无法完全传达必要的上下文,但它们的噪音确实较小。然而,语块导致句子中的截断,促使递归分割和滑动窗口方法的优化,通过跨多个检索过程合并全局相关信息实现分层检索。尽管如此,这些方法仍然不能在语义完整性和上下文长度之间达到平衡。因此,可以使用 Small2Big 方法,其中句子(小)作为检索单元,前面和后面的句子(大)作为LLMs的上下文。
元数据附件
chunks可以丰富元数据信息,如页码,文件名,作者,类别时间戳。检索可以基于这些元数据进行过滤,限制检索范围。在检索过程中为文档时间戳分配不同的权重可以实现时间感知的 RAG,确保知识的新鲜性和避免过时的信息。
除了从原始文档中提取元数据之外,还可以人工构造元数据。例如,添加段落摘要,以及引入假设性问题。这种方法也被称为 Reverse HyDE。
结构检索
提高信息检索的一个有效方法是为文档建立一个层次结构。通过构建结构,RAG 系统可以加快相关数据的检索和处理。
- 层次索引:文件是按照父子关系排列的,有链接到它们的块。数据汇总存储在每个节点上,帮助快速遍历数据,帮助 RAG 系统决定提取哪些块。这种方法也可以减轻块提取问题造成的错觉。
This chapter requires login to view full content. You are viewing a preview.
Login to View Full Content