生成式AI是一种能够生成各类内容的技术,包括文本、图像、音频和合成数据。自2022年底ChatGPT在全球范围内推广以来,基于Transformer解码器结构的大模型已能在短时间内为用户生成高质量的文本、表格、代码,使整个AI领域迈入了新的时代。
大语言模型(Large Language Model,LLM)经过海量文本数据的训练后,能将这些文本数据以一种黑盒形式压缩在模型参数中。预训练完成后,模型便掌握了大量的人类世界知识。研究者发现,当模型的规模足够大且经过指令微调对齐后,便可通过提示模板,运用零样本(zero-shot)或少样本(few-shot)的提示词来完成许多自然语言理解和自然语言生成任务。
然而,不好的消息是,大模型并不具备在环境不断变化的场景中回答特定问题所需的全面知识。例如,早期的ChatGPT的预训练语料库时间截至2021年,这意味着模型无法准确输出2021年以后的事实性问题,这正是现代大模型所面临的知识更新困境。而在2023年11月,OpenAI发布的GPT-4 Turbo的知识更新时间截至2023年4月,实际上,对于一个大模型来说,更新基础模型知识库是非常困难的一件事情。首先,需要保证预训练数据的质量;其次,更新知识库后的模型通常都需要重新训练,至少要将新数据与旧数据按照一定的比例进行混合训练,而不能仅仅使用新数据,否则会出现灾难性遗忘的问题。总之,大模型的知识更新问题将成为模型的一个重要痛点,并且是一个值得研究的课题。
2020年,Facebook(后更名为Meta)在“Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”一文中首先提出了一种称为检索增强生成(RAG)的框架。该框架可以使模型访问超出其训练数据范围之外的信息,使得模型在每次生成时可以利用检索提供的外部更专业、更准确的知识,从而更好地回答用户问题。
在RAG系统中,模型可以通过浏览外部知识来回答用户的问题,而不是试图从参数记忆中找到问题相关的答案,就像在考试的时候是开卷考试还是闭卷考试一样。例如:我们可以分别询问ChatGPT和Bing Chat两个问题:“RAG是什么?”“为什么大模型都是Decoder(解码器)结构?”因为Bing Chat可以结合互联网的搜索数据来生成答案,所以答案会更精准并且信息量更足。
从图1-1和图1-2的答案中,我们可以很明显地看出使用RAG与不使用RAG的差异。
RAG在推理过程中分为两个阶段:检索和内容生成。在检索阶段,通过算法检索与用户问题相关的知识片段。在开放领域中,这些知识片段可以来自互联网上搜索引擎检索到的文档,例如微软Bing AI的模式;在私有领域的企业场景中,通常使用大量的内部文档通过更小的信息源约束来提高模型生成的安全性和可靠性。
图1-1 ChatGPT回答结果
图1-2 Bing Chat回答结果
完成检索之后,可以获取到一些与用户输入相关的可靠外部知识。在内容生成阶段,通过一个结构化的prompt模板约束,将这些外部知识添加到用户的问题中,并传递给语言模型。模型基于知识增强的prompt,通过自己的大量参数计算,就可以生成一个针对该用户问题的更准确的答案。在这个过程中,还可以约束模型对生成的答案进行溯源,以方便地知道模型是依据哪些知识片段完成最终答案生成的。
在后面的章节中,我们会详细介绍RAG的所有流程。
模型微调是指在一个特定任务上用一定量的数据来训练模型的过程,通过在特定数据集上微调可以提高模型在特定数据集上的性能。如果有足够大的监督数据集,且数据集不会发生改变,那么微调是一个很不错的方法。尽管大模型的微调成本较高,但现在已有大量低成本微调的方法,例如LoRA、QLoRA。然而,如果数据集是动态的,就需要不断地重新训练模型以跟上数据的变化;或者如果没有足够大的数据集,那么微调不是一个好方法。在这种情况下,可以使用RAG来提高大模型的性能。同样,可以利用RAG来提高大模型在摘要、翻译等任务上的性能,因为这些任务可能无法进行微调。
表1-1清晰地展示了两者的区别。
表1-1 RAG与模型微调的对比
RAG最直观的应用便是问答场景。本小节将以问答场景为例,探讨采用RAG后的范式改变。在LLM出现之前,一个智能客服系统会涉及大量的人工介入维护。例如,需要人工为客户可能提出的每个问题撰写答案,并且还需根据外部环境的变化调整已有的答案或新增更多的问答对。这种旧策略在算法准确性之外的局限性在于,如果预先编辑的问答对错过了某种问答场景,那么整个系统将无法正常回复。此外,持续更新问答对以适应政策和环境的变化非常困难,需要人工长期进行维护。
如今,由LLM驱动的问答系统可以在无须人工维护结构化知识的情况下为用户问题提供更个性化的答案。然而,LLM的知识主要是在预训练阶段学习的,也就是说,如果想让LLM准确回答你的问题,需要使用自己的数据进一步微调模型,这个过程也叫继续预训练(continue pretraining)。而RAG则可以大大减少对模型进行新知识的训练和输入的需求,只需上传最新的文件或政策,模型就可以以开放式模式检索信息以回答问题,即使知识频繁更新,也无须训练更新模型的参数。
笔者目前所在企业正在使用RAG来实现许多业务场景的聊天功能。以一个行政场景为例来说明它的工作原理:员工小明准备在下周前往宁波出差,他想了解一下出差宁波的住宿标准。
为了回答这个问题,RAG系统首先从行政知识库空间中获取数据,了解出差住宿标准如何划分,以及宁波所属的城市类型。这些事实性的知识被组织到LLM的提示词中,LLM便可以生成简明扼要、个性化的答案。紧接着,前端页面将回答发送给小明,并附带其信息来源的链接。