三、检索器
在RAG中,有效地从数据源中检索相关文档至关重要。涉及的关键问题包括检索源、检索粒度、检索的预处理以及选择相应的嵌入模型。
3.1. 检索源
RAG依赖外部知识来增强LLM,而检索源(Retrieval Source) 的类型(数据结构)和检索单元的粒度都会影响最终的生成结果。
3.1.1. 数据结构
1. 非结构化数据(Unstructured Data)
非结构化数据是检索的主要来源,最常见的形式是文本(如Wikipedia中的内容)。在开放域问答(ODQA)任务中,主要的检索来源包括:
- HotpotQA 数据集(2017年10月1日发布)。
- DPR 数据集(2018年12月20日发布)。
除了百科全书类数据外,非结构化数据还包括跨语言文本【19】和特定领域的数据,如医学【67】和法律【29】领域的数据。
2. 半结构化数据(Semi-structured Data)
半结构化数据通常包含文本和表格信息的组合,例如PDF文件。在处理这类数据时,传统的RAG系统面临以下挑战:
- 文本拆分过程中可能无意中将表格分开,导致检索时数据损坏。
- 表格的引入使得语义相似性搜索更加复杂。
一个解决方案是利用LLM的编码能力执行表格上的Text-2-SQL查询(如TableGPT【85】)。或者,可以将表格转换为文本进行基于文本的方法分析【75】。然而,这些方法目前都不是最佳解决方案,表明这一领域仍有较大的研究机会。
3. 结构化数据(Structured Data)
结构化数据通常指经过验证并且可以提供更精确信息的知识图谱(Knowledge Graph, KG)【86】。例如,KnowledGPT【15】通过生成KB搜索查询并存储知识来增强RAG模型的知识丰富性。
G-Retriever【84】是一个将图神经网络(GNN)、LLMs和RAG集成的系统,它通过软提示(soft prompting)增强图理解和问答能力,并使用奖收集斯坦纳树(PCST)优化问题进行目标导向的图检索。然而,构建、验证和维护结构化数据库需要额外的工作。
4. 由LLMs生成的内容(LLMs-Generated Content)
为了应对传统外部辅助信息的局限性,一些研究专注于利用LLM的内部知识来增强RAG。例如:
- SKR【58】能够对问题进行分类(已知问题或未知问题),并选择性地应用检索增强。
- GenRead【13】使用LLM生成器替代了检索器,发现LLM生成的上下文由于更好地符合预训练目标(如因果语言建模),常常包含更准确的答案。
- Selfmem【17】通过迭代创建一个无限的记忆池,并使用一个记忆选择器来选择可以作为原问题的对偶问题的输出,从而自我增强生成模型。
这些研究展示了RAG中数据源利用的广泛创新,旨在提高模型性能和任务的有效性。
结论
RAG系统中的数据结构正变得多样化,从传统的非结构化数据扩展到半结构化和结构化数据,以及由LLMs生成的内容。每种数据结构都有其独特的挑战和机会,研究者正在开发新的方法来克服这些问题,以提高RAG的效果。
3.1.2. 检索粒度
检索粒度(Retrieval Granularity),即检索数据的颗粒度,这是影响检索效果的重要因素之一。
1. 粗粒度与细粒度的权衡
- 粗粒度(Coarse-grained retrieval units) 理论上可以提供更多的上下文和相关信息,但它们也可能包含大量冗余内容,分散下游任务中的检索器和语言模型的注意力【50】、【87】。换句话说,粗粒度虽然包含更多信息,但其中一些信息可能对特定任务不必要,反而增加了模型的负担。
- 细粒度(Fine-grained retrieval units) 通过更小的检索单位减少冗余信息,但这同时增加了检索的复杂性,并且不一定能保证语义完整性或满足所需知识【50】。在某些任务中,检索过小的单位会导致信息的割裂,使得检索的结果不具备连贯的上下文信息,从而影响后续任务的效果。
在推理过程中选择合适的检索粒度是提升稠密检索器(dense retrievers)性能的一种有效策略。
2. 文本中的检索粒度
在文本数据中,检索粒度可以从细到粗逐步增加,包括以下几种单位:
- Token