这个时候如果想对用户输入做一些过滤、对某种回答有了固定的答案怎么办呢?java程序员肯定就会想到写个filter或者intercepter,RAG就是在做类似的事情,只不过流程更加复杂。
RAG是什么
检索增强生成(RAG)是对大型语言模型输出进行优化的方法,使其能够在生成响应之前引用训练数据来源之外的权威知识库。
简单来讲就是让用户的问题先经过一个提前预置的专业知识库,先检索知识库,将知识库的响应提交给大模型,让大模型总结输出,或者直接就输出了,不经过大模型总结。
为什么需要RAG
- 大模型在没有答案的情况下提供幻象数据,也就是胡说八道。
- 当用户需要特定的当前响应时,提供过时或通用的信息,模型提供的最新信息为训练模型时的数据。
- 数据来源不权威,缺少来源依据和出处
- 无法提供实时数据:天气预报、报时、股票行情等。
- 敏感词、停止词过滤
RAG的基石:向量数据库
复习一下向量的概念:在几何中一个同时具有大小和方向的对象就叫向量,还有一个定义大家可能更加熟悉,“既有大小,又有方向的量叫做向量”。
向量(vector)是在大语言模型、知识库交互、计算过程中的重要指标。它可以将文本和知识表示为数学向量,实现文本相似度计算、知识库检索和推理等功能。向量(vector)为语义理解和应用提供了一种方便有效的表示方法。
向量有N维度,向量的检索过程就是对向量进行算术运算的过程,例如:通过向量之间的夹角来描述它们之间的关系。在二维坐标系中,如果夹角越小,说明两个向量之间的关联性越高。我们可以使用公式计算任意两个向量之间的余弦相似度。在三维坐标系里,也可以用同样的原理来计算任意两个向量之间的夹角和余弦相似度。
当维度比较低的时候向量计算可以很快的完成,如果存在一个9999维的向量计算将会比较耗费CPU资源,此时我们借鉴关系型数据的经验,就会用到向量索引了,通过索引实现快速比较
RAG的实现EmbeddingModel&RerankModel
阶段一:将自然语言分割成向量,EmbeddingModel专门用于生成语义向量,在语义搜索和问答中起着关键作用。
Embedding模型是指将高维度的数据(例如文字、图片、视频)映射到低维度空间的过程。简单来说,embedding向量就是一
个N维的实值向量,它将输入的数据表示成一个连续的数值空间中的点。本文主要关注文本embedding。
阶段二:RerankModel擅长优化语义搜索结果和语义相关顺序精排。
划重点,说人话就是:
通俗的讲就是embedding实现了自然语言的向量化,提供检索能力,提供检索结果,rerank模型实现了根据语义的排序
这个阶段一、阶段二是不是特别像搜索引擎里面的倒排索引和评分排序呢?是的,整体的流程是和es类似,哪思考一个问题为
什么不用es,反而用这么复杂的模型来实现呢?
参考:
什么是向量数据库_向量数据库简介_向量数据库的优势以及应用场景-腾讯云开发者社区 (tencent.com)
AIGC|人人都在说的向量数据库究竟是什么?小白也能读懂! - 哔哩哔哩 (bilibili.com)
我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!