RAG
众所周知,大模型以及一些预训练的模型在训练完毕之后会在其参数存储了大量的压缩资讯。但是这样的参数是通过固定的语料库训练而成,训练完毕之后这个模型已经固定了。然而外部资讯瞬息万变,加上大模型本质上为一种概率模型,所以会存在很多问题。打个比方,它没有办法知晓最近发生的事情,同时也会针对一些问题一本正经的胡说八道。几个很明显的大模型问题:
-
偏见:因为大模型会收到训练语料的影响,要是输入的语料有明显的偏见也会带入到大模型之中。
-
幻觉:大模型其实是一种概率模型,里面各个层级的神经网络算是某种意义的概率转移模型,它的最终输出是概率输出,因此难免一本正经的胡说八道。
-
时效:因为训练大模型的语料是固定的,而现实世界又是一直变化,资讯其实源源不断地进来,因此训练好的大模型在提供准确的信息层面还是存在滞后。
白话的总结制约大模型的两大关键因子:资讯的来源和时效。如何合理的平衡这两个因子,也决定了在将大模型推向应用领域的关键技术选择和数据管理模式。研究人员其实在2021年的时候最早提出了RAG想用最简洁的办法解决这个问题。那么RAG是什么?RAG,英文全称Retrieval Augmented Generation,检索增强生成。RAG首次在《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中提出。
2021年当时 大模型还未流行,Seq2Seq的模型却十分流行,它帮助解决知识密集型任务,以及机器缺乏外部知识源的情况下而无法解决的任务。
大模型与数据管理
大模型的知识一般来至三个渠道,绿色渠道为用户输入(U),蓝色渠道为大模型已经掌握的知识(训练语料,L),粉色渠道为外部知识库(E),把这三部分交叉会形成4个重叠的区域,每个区域可以将知识组合使用,但是存在着或多或少的问题。
区域1:用户将输入的上下文和关注点给达大模型,大模型给出的响应会存在幻觉和失效的问题。
区域2:用户将输入的上下文和外部知识库结合,那么缺乏语义分析和对话管理和,其实这个领域和传统的机器人技术相似。
区域3:利用外部的知识库对已经训练好的大模型进行微调,微调技术会在后续的章节进行讨论,可是相当的复杂。
区域4:那么将用户上下文和关注点、外部知识库和大模型组合运用的方法就是RAG。效果虽然不如3,但是简单和便捷。
RAG基本框架
RAG的基本流程为:外部知识库预处理至向量数据库(后文会详细介绍)=》用户输入问题=》问题编码后在向量数据库检索相似知识=》将用户输入和检索知识组合成查询的提示词=》大模型基于问题结合自身和外部知识库给出最终回答。
简单的说就是A提问,然后B收到之后检索和这个问题相关的知识库,最后将相关的知识库和问题组合起来送给大模型回答。这个过程非常的干净利落,不需要涉及很复杂的编程。
因为大模型的输入都有一定的约束,过长的文本则需要先切片(上图),然后采用一定的策略拼接成提示词(下图)送给大模型去理解和给出正确的答案。在这里向量数据库成为很重要的一环,它连接着所有的环节。
关于RAG和微调之间正确性的问题,有篇论文做出了对比认为是RAG不差于全数据微调,但是论文发表在早年,和现在的大模型技术已经不可同日而语。后面会针对两者进行深入的比较分析。
Gorilla
说到RAG,就不得不提鼎鼎大名的Gorilla(基于Llama-7B)。Gorilla由加利福尼亚大学伯克利分校和微软研究院设计,该模型能根据用户输入的自然语言为用户选择最合适的API来执行对应任务。某种意义上它是希望成为一个统帅其它AI的AI模型。
它利用在三大机器学习中心的数据集进行训练,这些中心包括Torch Hub、TensorFlow Hub和HuggingFace。它不断新增新的领域,包括 Kubernetes、GCP、AWS、OpenAPI等。在zero-shot的情况下,Gorilla的性能优于GPT-4、Chat-GPT和Claude。它非常可靠,大幅减少了幻觉错误。