在一个理想的RAG流程中,我们期望一个小参数量的LLM结合一个大型的外挂知识库,可以达到一个超大参数量的模型的效果。从表1-2的经典模型来看,有两个极端的模型:RETRO只使用了70亿参数量的模型,但是它使用的外挂知识库达到了2万亿;相反,REPUG使用了不超过1750亿参数量的模型,但是知识库只有约50亿大小。
表1-2 RAG经典模型参数量与知识库大小
在之前的大量研究中,科学家进行了很多关于伸缩法则(Scaling Law)的研究。在OpenAI发布的“Scaling Laws for Neural Language Models”一文中提到,伸缩法则是指随着模型的大小、数据集的大小以及用于训练的计算量的增加,模型的性能会提升。并且为了获得最佳的性能,这三点必须同时增加。当不受其他两点制约时,模型性能与每个单独的因素都有幂律关系。如图1-8所示,随着模型大小、数据集大小和用于训练的计算量逐渐增加,模型的效果稳步提升。
图1-8 测试集损失随着参数量 N 、数据量 D 、计算量 C 的变化曲线
在RAG的流程中,除了以上三点,模型能缩放的比例还需要考虑到知识库的大小,这就需要进行更多的伸缩法则方面的研究,而不能复用现有的研究成果。当然,除此之外,还取决于要使用的模型架构和训练方法。但什么架构以及什么方法是最好的呢?这个问题我们将在第二部分具体介绍。
使用一个2.5亿参数量的模型,知识库有1亿个片段。如果采用一些近似的搜索算法,会使整个系统的解码效率降低到原来的1/12左右;如果采用精确搜索,则会降低到原来的1/70~1/60。
因此,在构建整个体系时,若想扩大知识库的量级,则这个系统所能承受的吞吐量就会明显下降,这些都是在优化系统时需要考虑的因素。然而,搜索涉及众多领域,并且存在许多优秀的开源框架,可以采用更高效的搜索算法使系统运行在GPU、TPU上。除此之外,随着知识库的增大,存储效率也是一个重要的挑战,大量的文本数据需要很大的磁盘空间来存储。同时,还需考虑如何存储向量、以何种形式存储,以及如何存储一些元数据。部分知识库还会涉及频繁的更新,这也给我们的存储方案带来巨大的挑战。
开放式问答的一个典型应用场景是聊天机器人,例如ChatGPT。用户可以向它提问,模型能够给出一些内容丰富、表达流畅的回答。在论文“KNN-LM does not improve open-ended text generation”中,作者对比了GPT-2和KNN-LM两个模型。尽管KNN-LM及其相关方法在困惑度上取得了较大的提升,但通过自动评估指标(如MAUVE)和人工评估发现,它们在开放式生成质量方面并未展现出相应的优势。如图1-9所示,在开放式问答的几个测试数据集上,KNN-LM与GPT-2相比并无明显优势。
此外,该论文作者还指出,随着生成序列的增长,检索分布的熵比基本语言模型的熵增加得更快。这意味着当使用模型生成的文本作为查询时,检索的可靠性较低(即受到曝光偏差的影响)。因此,未来还需要对检索增强语言模型的解码算法进行进一步研究和改进。
图1-9 KNN-LM与GPT-2效果比较
在2022年的一篇名为“Can Retriever-Augmented Language Models Reason?The Blame Game Between the Retriever and the Language Model”的论文中,科学家展示了检索增强模型在推理方面的局限性。实验结果表明,检索器使用的相似性度量通常不足以应对推理任务。此外,检索增强模型中的语言模型没有充分考虑语句之间的复杂关系,这导致即使使用较大的模型也会出现较差的推理性能。尽管分析了采用多跳检索的大模型的推理性能,但观察到的改进是微小的。总的来说,对于RAG系统而言,推理仍然是一个非常具有挑战性的课题。
如图1-10所示,在推理的任务上,大多数RAG经典模型都不能生成正确答案。
然而,许多研究者在努力尝试解决它,他们的工作主要从以下两个角度出发:
1)通过迭代召回(iterative retrieval)和问题改写(query reformulation)等方法寻求潜在的解决方案。相关的研究成果颇丰,例如2023年的FLARE、ReAct,以及2022年的Self-Ask等。
2)将问题拆解,将任务转变为多跳(multi-hop)推理范式。例如DSP(Demonstrate,Search, Predict,展示、搜索、预测)等研究工作。
总之,尽管检索增强模型在推理方面存在局限性,但仍有许多研究者在不断探索和尝试解决这一问题。
图1-10 使用经典RAG模型测试推理问题