自从大语言模型流行以来,不管是实力雄厚的国际大厂,还是势头迅猛的初创企业,都推出了各式各样的大语言模型应用,比如 OpenAI 的 ChatGPT,微软的 New Bing,被众多巨头青睐的 Perplexity 等。但是无论这些应用的底层大语言模型的能力如何,就目前而言,主流大语言模型应用始终需要一个技术来弥补大模型本身能力的缺失——那就是 RAG(Retrieval-Augmented Generation,检索增强生成)。
Table of contents
Open Table of contents
什么是 RAG
RAG,即 Retrieval-Augmented Generation。为了简短表达,中文一般称之为检索增强生成,实际上更为准确的理解应该是基于检索增强的生成,这样就不难发现其中的重点是生成。因此,可以理解为 RAG 是一种结合了检索技术和生成技术,从而对于特定任务生成尽量相关和准确的结果的技术架构。为什么说是架构?因为 RAG 并不是某种具体的实现,而是一种设计。简单来说,这个设计的大概思路就是在回答用户问题的时候,会通过搜索引擎等检索技术从互联网或者私有知识库检索与用户问题相关的信息,然后将问题本身、检索到的信息送入作为生成模型的输入,生成模型会根据输入的问题和信息生成尽量准确和问题相关的回答。
RAG 主要由检索器和生成器两个部分组成。检索器主要是负责预处理用户问题,检索互联网或者私有知识库获取与问题相关的信息。而生成器主要是负责根据输入的问题和相关信息生成与问题相关和准确的内容。
为什么需要 RAG
目前大语言模型的火爆和其本身的智能化给我们一种通用人工智能就快要实现的感觉,那为什么还需要 RAG 技术呢?大语言模型本身不是也能很好地回答用户的问题吗?这就不得不先介绍下大语言模型的原理。这里并不做详细展开,只是从通俗的角度解释一下。简单来说,你可以把大语言模型看成一个由多达数亿级别的固定参数组成的一个“函数”,你的输入相当于函数入参,经过函数中这些固定参数的计算,会返回一个与输入相关的输出。当然,这些参数并不是随便选定的,而是会事先在大规模语料库上进行预训练和微调后固定下来的,从而让”函数“返回的输出尽可能与输入相关和准确。特别是在模型被发布以后,考虑到结果的一致性、性能以及安全性等因素,这些参数不会被轻易改变(也会根据一些情况而进行改变,比如确实需要在线学习和持续微调等,不过这样模型的结果一致性,性能以及安全性就难以把控)。因此,我们可以发现,我们实际上使用的大语言模型实际上是一种离线训练的模型,并不具备实时学习的能力。
所以,大模型在面对用户的问题时,就像一个在考试前将老师划定的考试范围内的知识学习地很透彻的学生,当问题确实是老师划定的范围内的时候,这些学生都能很准确地做出解答(当然一般不是百分百的准确,可能存在记忆偏差和理解错误等因素导致的错误解答)。可是,有次老师想区分出哪些学生是上课认真听讲并且学习了,哪些学生只是快考试的时候针对考试范围学习的时候,考试卷上出现了一些不在考试范围内的题目,这个时候,这些学生就傻眼了。如果是能从考试范围内的知识推理出一定答案的问题,也许这些学生也还能进行部分正确的解答。可是当问题是与考试范围内的知识好不相关的时候,这些学生就只能胡编乱造或者干脆弃笔不做了。这个时候,假如是你,你会怎么办?你是不是想着要是能有本课本开卷考试就好了?没错,这种允许学生带个课本的开卷考试就是 RAG 技术。
到这里,是不是就可以理解为什么现在大语言模型应用需要 RAG 技术呢?因为现在的大语言模型就是一个在考试前将老师划定的考试范围内的知识学习地很透彻的学生,当遇到划定范围之外的问题的时候,它就只能求助于检索技术,以获取额外的相关信息来解答问题了。大语言模型的生成能力与检索技术的检索能力,就组成了 RAG 技术。
RAG 的应用和缺点
目前与 RAG 技术最相关的产品,可能就是基于大语言模型的 AI 搜索引擎,比如 perplexity、phind 等,而且这些产品的技术架构和产品形态基本上都差不多。一般就是用户输入问题,检索器根据用户的问题在互联网上检索(有的也会对用户问题进行预处理或者确认等),然后生成器会根据用户问题和检索到的相关信息生成一系列的回答。
就我个人的体验来说,大部分情况下,这些 AI 搜索引擎确实不错。我觉得最核心的点在于,传统的搜索引擎是用户输入问题点击搜索,在搜索结果页点进一个搜索结果,阅读可能相关可能无关的内容,然后回到搜索引擎,再点击下一个搜索结果,重复下去,最终可能得到或得不到问题的答案。而在 AI 搜索引擎中,用户输入问题,然后等待它们生成答案,最后直接阅读答案即可。由于是直接对问题生成答案,这些 AI 搜索引擎产品是不是相当地节省了用户的时间?
但是,AI 搜索引擎不可避免的存在问题。就我目前所认为的两个最大问题,内容准确性和模型幻觉。
首先是内容准确性。这里暂时不考虑检索器的检索准确性,假设检索器始终能检索出与问题最相关的信息。内容准确性是指检索器检索出的内容并非是一定正确的。和预训练的内容不同,检索的内容一般是第三方生产的,检索器并不能保证内容的正确性,而生成器也无法进行判断,特别是某些”不正确“是非自然事实错误,比如人为规定的法令等。
然后是模型幻觉。这是大语言模型始终未能解决的一个问题,即模型对某些特定信息的训练不足或不基于正确的信息源,或者在处理非常具体或新颖的问题时超出了其知识范围,从而提供的回答与问题不符的情况。
总结
总之,大语言模型由于其本身的局限性,为了提升执行任务的准确性和时效性,在很多应用中实际上是以 RAG 这一形态落地的。但 RAG 本身也存在一定的缺陷。首先是大语言模型自身带来的幻觉问题,其次是检索内容的准确性,这些因素都可能导致最终答案的不准确。但不管怎么样,RAG 似乎仍然是当前大语言模型应用需要的最优解。
欢迎关注我的公众号“自语之言”,原创技术文章第一时间推送。