在人工智能领域,大模型RAG技术(Retrieval-Augmented Generation)已成为近年来研究的热点。它结合了检索和生成两大关键技术,为自然语言处理任务带来了革命性的进步。本文将带领大家深入了解大模型RAG技术的全流程,让你轻松掌握这一前沿技术。
一、RAG技术概述
RAG技术,即检索增强生成技术,是一种将检索和生成相结合的自然语言处理技术。它利用大规模的语料库进行信息检索,为生成过程提供丰富的背景知识和上下文信息,从而提高生成结果的准确性和多样性。RAG技术广泛应用于文本生成、对话系统、问答系统等领域。
二、RAG技术工作流程
预处理:首先,对大规模的语料库进行预处理,包括分词、去除停用词、构建词汇表等步骤。这些预处理操作有助于提取出文本中的有效信息,为后续的检索和生成过程奠定基础。
检索:在生成过程中,RAG技术会根据当前的上下文信息,在语料库中检索相关的文本片段。这个检索过程通常基于某种相似度度量方法,如余弦相似度、TF-IDF等。检索结果将作为生成过程的参考和补充。
生成:在得到检索结果后,RAG技术会利用生成模型(如Transformer、GPT等)来生成新的文本。生成过程会综合考虑当前的上下文信息、检索结果以及生成模型自身的知识库,从而生成更加准确、多样的文本。
后处理:最后,对生成的文本进行后处理,包括去除重复、修正语法错误等步骤。这些后处理操作有助于提高生成结果的质量。
下面我们来了解一下RAG,它有非常多的组件,但是我们可以化繁为简。我喜欢把RAG——Retrieval Augmented Generation理解为Retrieval And Generation,也就是检索与生成,在加上一个数据向量和索引的工作,我们对RAG就可以总概方式地理解为“索引、检索和生成”。
以下就是RAG的主要组成,依次是数据提取——embedding(向量化)——创建索引——检索——自动排序(Rerank)——LLM归纳生成。当然这里少了使用环节,我们暂时先忽略用户提问的环节。
在技术细节上,我们还可以分成更细的组成。
数据提取
分块(Chunking)
向量化(embedding):这是将文本、图像、音频和视频等转化为向量矩阵的过程,也就是变成计算机可以理解的格式,embedding模型的好坏会直接影响到后面检索的质量,特别是相关度。关于embedding大家可以看我之前的一篇文章《大模型应用中大部分人真正需要去关心的核心——Embedding》,一般我们现在可以选择的embedding模型有这些:
检索环节技术含量依然很高,而且对于我们目前来说,还有一两项工作正在进行中。
检索优化一般分为下面五部分工作:
元数据过滤:当我们把索引分成许多chunks的时候,检索效率会成为问题。这时候,如果可以通过元数据先进行过滤,就会大大提升效率和相关度。比如,我们问“帮我整理一下XX部门今年5月份的所有合同中,包含XX设备采购的合同有哪些?”。这时候,如果有元数据,我们就可以去搜索“XX部门+2023年5月”的相关数据,检索量一下子就可能变成了全局的万分之一;
图关系检索:如果可以将很多实体变成node,把它们之间的关系变成relation,就可以利用知识之间的关系做更准确的回答。特别是针对一些多跳问题,利用图数据索引会让检索的相关度变得更高;
检索技术:前面说的是一些前置的预处理的方法,检索的主要方式还是这几种:
重排序(Rerank):很多时候我们的检索结果并不理想,原因是chunks在系统内数量很多,我们检索的维度不一定是最优的,一次检索的结果可能就会在相关度上面没有那么理想。这时候我们需要有一些策略来对检索的结果做重排序,比如使用planB重排序,或者把组合相关度、匹配度等因素做一些重新调整,得到更符合我们业务场景的排序。因为在这一步之后,我们就会把结果送给LLM进行最终处理了,所以这一部分的结果很重要。这里面还会有一个内部的判断器来评审相关度,触发重排序。
查询轮换:这是查询检索的一种方式,一般会有几种方式:
这一部反而是我比较疏忽的,因为有大量的现成框架可以使用,而且,这一步真正发挥巨大作用的是LLM。
这里面我们使用的框架有Langchain和LlamaIndex,而且我们因为有之前的AI产品积累,所以还有一套完整的Java框架可以使用,所以这一块我没有太多研究。唯一非常关注的就是Prompt工程,我们团队内部,这一部分的工作是交给了原来AI产品的知识库运营团队来做的,他们原来做的更多是BERT相关的知识库预训练,应该说工作内容还是比较匹配的。
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!