2025大模型RAG原理、应用与系统构建_第1页
2025大模型RAG原理、应用与系统构建_第2页
2025大模型RAG原理、应用与系统构建_第3页
2025大模型RAG原理、应用与系统构建_第4页
2025大模型RAG原理、应用与系统构建_第5页
已阅读5页,还剩191页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录TOC\o"1-3"\h\u8915 112590 41352 423212第1 514296RAG 5207251.1 5229561.2为什么需要 8208801.3RAG 12187521.4RAG 14173541.5RAG 16287451.6RAG 1750291.7 2030585Chapter 2118672第2 2127044 21257082.1 21186502.2 4869002.3 54280062.4 621788Chapter 631507第3 6327362 6322353.1 63130263.2 66109513.3 7270963.4 75194483.5 7719244 784647 7821019第4 7927520RAG 7930094.1 79156494.2 86113374.3 90266004.4 9784364.5 110236894.6LLM 118139034.7 122345Chapter 12323896第5 12332630RAG 123282845.1基础RAG 123312865.2先进RAG 1264695.3大模型主导的RAG 12728175.4多模态RAG 131281815.5 13527903Chapter 13619451第6 13624393RAG 13626346.1RAG 136147106.2 137160236.3 137198996.4 1383616.5 14119712 146226606.6 14817552 1492130 14919021第7 15011716基于LangChain实现RAG 150213987.1LangChain 150194997.2基于LangChain实现 153215637.3基于Streamlit搭建一个ChatPDF 15558397.4 15828212Chapter 15915445第8 15932760RAG 159271798.1 15937528.2 171124468.3 175129038.4 196本部分将深入探讨RAG(RetrievalAugmentedGeneration,检索增强生成)的基本原理和在接下来的章节中,将介绍no、自动编码器和自回归模型等语言模型。接着,将重点讨论文本召回模型的设计与实现,包括稠密向量检索模型(如、等)以及稀疏向量检索模型(如、25等),此外,我们还将探讨重排序模型在G中的作用。通过本部分内容的学习,读者将全面了解的理论基础和实践方法,为后续深入研究和应用奠定坚实的基础。Chapter第1RAG管大模型能力卓越,但其存在不容忽视的短板。在工业界,系统是最常见的一个应用系统,它可以大幅提升整个大模型系统的性能。在本章中,我们将具体介绍系统的基础知识,以便读者对系统有一个初步了解。什么是生成式生成式是一种能够生成各类内容的技术,包括文本、图像、音频和合成数据。自2022年底h在全球范围内推广以来,基于no解码器结构的大模型已能在短时间内为用户生成高质量的文本、表格、代码,使整个领域迈入了新的时代。大语言模型(gengugeod,)经过海量文本数据的训练后,能将这些文本数据以一种黑盒形式压缩在模型参数中。预训练完成后,模型便掌握了大量的人类世界知零样本(oho)或少样本(ho)的提示词来完成许多自然语言理解和自然语言生成任务。月,OpenAI发布的GPT-4Turbo的知识更新时间截至2023年4月,实际上,对于一个大模2020年,Facebook(后更名为Meta)在“Retrieval-AugmentedGenerationforKnowledge-IntensiveNLPTasks”一文中首先提出了一种称为检索增强生成(RAG)的框架。该框架可在系统中,模型可以通过浏览外部知识来回答用户的问题,而不是试图从参数记忆以分别询问h和ngh两个问题:是什么?为什么大模型都是Decoder(解码器)结构?”因为BingChat可以结合互联网的搜索数据来生成答案,所以答在推理过程中分为两个阶段:检索和内容生成。在检索阶段,通过算法检索与用户文档,例如微软ng的模式;在私有领域的企业场景中,通常使用大量的内部文档通过更小的信息源约束来提高模型生成的安全性和可靠性。▲图1-1ChatGPT▲图1-2BingChatRAG成本微调的方法,例如o、o。然而,如果数据集是动态的,就需要不断地重新在这种情况下,可以使用来提高大模型的性能。同样,可以利用来提高大模型在摘要、翻译等任务上的性能,因为这些任务可能无法进行微调。表1-1RAGRAG最直观的应用便是问答场景。本小节将以问答场景为例,探讨采用后的范式改变。在出现之前,一个智能客服系统会涉及大量的人工介入维护。例如,需要人工环境的变化非常困难,需要人工长期进行维护。如今,由驱动的问答系统可以在无须人工维护结构化知识的情况下为用户问题提供更个性化的答案。然而,的知识主要是在预训练阶段学习的,也就是说,如果想让准确回答你的问题,需要使用自己的数据进一步微调模型,这个过程也叫继续预训练(onnuepnng)。而则可以大大减少对模型进行新知识的训练和输入的需识频繁更新,也无须训练更新模型的参数。笔者目前所在企业正在使用来实现许多业务场景的聊天功能。以一个行政场景为例标准。为了回答这个问题,系统首先从行政知识库空间中获取数据,了解出差住宿标准如何划分,以及宁波所属的城市类型。这些事实性的知识被组织到的提示词中,M息来源的链接。为什么需要同样的问题,我们可以咨询BingChat。BingChat是微软发布的一个针对浏览器的问题进行答案生成。如图1-4所示,当向BingChat询问“拼多多的CEO是谁?”时,我们得▲图1-3GPT-3.5-turbo(0315)▲图1-4BingChat然而,在使用系统之后,我们可以从图14的ngh回答中看出,它不仅给出了答查看,这也是系统的一大优点。因此,相较于纯粹的大模型生成,具有更强的可解释性。早在2020——“ExtractingTrainingDatafromLargeLanguageModels”。在这项研究中,他们以GPT-2图1-5通过提示词诱导GPT-2然而,在使用系统之后,由于模型组织答案所用到的知识来源于预先提供的知识库图1-6ImprovingLanguageModelsbyRetrievingfromTrillionsofTokens”中通过大量实验证明,可RAG的工作流程涉及3个主要阶段:数据准备、数据召回和答案生成。数据准备阶段包括用户输入的查询条件生成输出结果。输出质量的高低取决于数据质量和检索策略。图17描述了这一过程。图1-7RAG根据需要处理的任务类型,数据准备通常包括识别数据源、从数据源中提取数据、能会因应用场景和检索方法的不同而有所变化。例如,如果使用像这样的向量存储库,需要为数据创建嵌入并将其存储在向量存储库中;如果使用像h这样的搜索引擎,需要将数据索引到搜索引擎中;如果使用像o4这样的图数据库,需要为数据数据的步骤。向量存储库非常适合存储文本、图像、音频等非结构化数据,并根据语义相似性搜索数向量存储库中。在最简单的系统中,当向量存储库接收到用户查询时,查询也会被转换为一个向量,向量存储库会返回与查询最相似的候选数据。在系统中,可以从通用搜索引擎(如百度、ng等)或内部搜索引擎(如h、o等)中检索数据。在架构的检索阶段,使用问题任务详细信息查搜索数据非常有用。可以将来自搜索引擎的数据与来自其他数据库(据库等)的数据结合起来,以提高输出的质量。在中文的开源大模型中,对于70亿、140亿规模的开源模型,nh是一个不错的选择。相较于h、hun等开源大模型,nh具有更少的幻觉,更适用于大模型检索增强生成的模式。在场景下,幻觉主要体现在跳脱知识片段回答问题上,即回答的答案并不出现在增强的知识片段中。模型对于未知答案的拒绝能力也属于这个范畴。对于参数量不够大的模型,可以考虑通过适量数据的微调来提升模型在问答场景的效果。RAGRAG的一个优点是它能够生成高质量的回答。因为在生成过程中,检索器可以从大量文有知识生成更准确、更具深度的回答,也意味着模型出现幻觉答案的概率更小。在图1-1和图1-2中,我们分别询问了ChatGPT和BingChat两个问题:“RAG是什么?”“为什么大模型都是Decoder结构?”。可以明显感受到,使用了RAG的BingChat对自己的答案具有很好的可扩展性,这意味着它可以轻松地适应新的数据和任务。由于采用了检索—这使得在面对新领域或不断更新的知识库时具有很强的适应性。具有一定程度的可解释性,这意味着我们可以理解模型是如何生成回答的。由于的特性,我们可以很容易地追溯模型是从哪些文档中提取信息的。这使得我们可以评估模型的回答是否基于可靠的数据来源,从而提高模型的可信度。例如,在前面图12的例子中,ngh不仅回答了我们提出的问题,还给出了模型从哪些文档中提取了信答是准确的。由于的知识库能够与生成模型解耦,因此只要拥有一定的数据量,企业便可将G加准确、更具实用性,以满足企业的特定任务需求。RAG询10月份的金股是什么,如果召回片段不包含10到模型的结果生成,因此想构建一个好的系统,检索部分是极其重要的,需要花费大量的时间来打磨。由于系统需要先检索文档,然后生成答案,相比于纯粹的大模型推理,整个系统的耗时问题属于大模型的通病,在使用网页端h的时候,它以流式打字机的模式展示这个过程,耗时还是非常长的。RAG随着h的问世,文档问答成为一个热门应用。例如,h这个应用每天的日活都在以惊人的速度攀升。在这种场景下,系统可以从大量文档中检索相关信息,帮有的知识资源。护和可扩展的知识表示形式。在图谱问答场景中,系统可以从知识图谱中检索相关地组合和推理知识图谱中的多跳信息。在智能代理(gn)应用中,系统可以根据用户的问题从预先配置好的工具列表中情况选择合适的工具。答对库,系统可以持续提高其性能和覆盖范围。除此之外,还有一些衍生的场景,例如会话召回、上下文召回等。总之,系统通过检索不同类型的知识库来增强生成模型的能力,可以应用于多种场RAGLLM表1-2RAG在之前的大量研究中,科学家进行了很多关于伸缩法则(ng)的研究。在pn发布的ngsorulngugeod一文中提到,伸缩法则是指随着因素都有幂律关系。如图18所示,随着模型大小、数据集大小和用于训练的计算量逐渐增加,模型的效果稳步提升。图1-8测试集损失随着参数量N、数据量D、计算量C在的流程中,除了以上三点,模型能缩放的比例还需要考虑到知识库的大小,这就们将在第二部分具体介绍。能够给出一些内容丰富、表达流畅的回答。在论文“KNN-LMdoesnotimproveopen-endedtextgeneration”中,作者对比了GPT-2和KNN-LM两个模型。尽管KNN-LM及其相关差的影响)图1-9KNN-LM与GPT-2在2022年的一篇名为“CanAugmentedLanguageModelsReason?TheBlameGameBetweentheRetrieverandtheLanguag通过迭代召回(iterativeretrieval)和问题改写(queryreformulation)等方法寻求潜在DSP(DemonstrateSearch,Predict,展示、搜索、预测)图1-10使用经典RAG引出系统,然后简要介绍了G系统的构成、优缺点、使用场景及面临的挑战。在实际应用中,一方面,我们会尽可能地考虑如何优化系统的召回部分,这里涉及很利用检索到的知识,而非盲目地生成答案。这可以概括为模型偏好的问题。在系统成更有价值、更受欢迎的内容。在后续章节中,我们将具体分析检索—算法以及如何优化系统。Chapter第2Google的开创性论文“Attentionisallyouneed”发表以来,Transformer已经成为许多深度学这两部分在原始的“Attentionisallyouneed”论文中各包含6个模块,但在实际应用中,这▲图2-1▲图2-2编码器-获取句子中每个单词的表示向量,可以通过词嵌入(bddng)得到。词数据特征和位置信息特征,图23展示了词嵌入的表示过程,如果以简单的框来表示向量,则每个单词都可以被表示为一个高维向量,最终的输入句子被表示为一个词向量矩阵。▲图2-3▲图2-4解码器部分也由6出的编码矩阵和上一个解码块的输出,即解码层会根据当前词和之前的词信息翻译下一个单词1。如图25所示,在实际的执行过程中,1位置后的单词需要被掩盖掉以防止1知道后面的信息。▲图2-5▲图2-6Transformer图2-71.单词编码(wordembedding)是一种以数字方式表示句子中单词的方法,该方法用来表示基于神经网络语言模型(ulokngugeod,)的编码方式最早由ngo等人提出,它用于解决统计语言模型(如模型)中常见的维度灾难问题。和句法关系。▲图2-8词袋模型又称为模型(见图29),它基于目标词前后的n假设句子为:她正在踢毽子,我们以踢作为目标词,取n2,那么正,在,毽,子]等前后单词及目标单词踢将被一起输入给模型。模型通过计算og2来降低计算词图2-9CBOW定义一个窗口函数,该函数提取目标单词的左、右各n上述右侧提取多少个单词。o循环首先定义了句子中迭代的开始索引和结束索引,即从句子中的第3个单词开始到倒数第3储在列表中。例如,给定句子为:她正在踢毽子,模型的窗口大小为2,此时窗口提取的单词为正在毽和子,目标单词是踢,当2(窗口大小)时,代码如下。图2-10全局词向量表示(GlobalVectorsforWordRepresentation,GloVe)是一种基于全局信息来GloVe通过引入共现矩阵(Co-occurrenceProbabilitiesMatrix)来表征。定义词、与词的共现概率为,词与词之间的关系可以通过共现概率体现,即如果词词相近,与词较远,则希望越大越好,如果词与词相近,与词较远,则希望越小越好,如果词与词和词都相近或都较远,则趋近于1,具体如表21所示。表2-12.位置编码(PositionEmbedding)用来表示句子中单词的位置,且每个位置被赋予唯一的图2-11维度,2i+1表示奇数维度(即2i≤d,2i+1≤d)。使用这种公式计算PE有以下的好处:能够较容易地计算出相对位置。对于固定长度的间距k,PE(pos+k可以用PE(pos)计算图2-12可以看到,每个位置k正弦和余弦函数的值在[-1,1]▲图2-13n=10000、d=512、序列长度=100图2-14Transformer▲图2-15▲图2-16▲图2-17▲图2-18▲图2-19▲图2-20▲图2-21(batch_size,seq_length,d_model)×(d_model,(batch_size,seq_length,d_ffn)→max(0,(batch_size,seq_length,d_ffn))=(batch_sizeseq_length,d_ffn)→(batch_sizeseq_length,d_ffn)×(d_ffn,d_model)=(batch_size,seq_length,d_model)。图2-22图2-23在图26中,解码器将输出传递给解码头,解码头将接收到的解码器输出向量映射为单词子有4个词,词库中有1000个词,那么在这4个词的每个位置都会生成1000数代表词库中每个词出现在句子中每个位置的可能性。之后这些分数将被送入ox自动编码器(uonodr)是一类神经网络,它通过无监督学习重建其输入数据,同时在这个过程中实现数据的有效压缩。这一概念最早于20世纪80年代被提出,并于2006no和khudnov的研究中得到推广和发展。▲图2-24ELMo模型来自于2018年的论文“Deepcontextualizedwordrepresentations”图2-25ELMo型训练类似,预训练的目标是根据目标词的上下文预测目标词,即定义目标词为<称为上文,W>称为下文,在图225中,左侧的双向M代表正向编码器,负责从前往后提取信息,输入为句子序列中从左到右(除目标词外)的上文,右侧的双向M代表逆向编码器,负责从后往前提取信息,输入为句子序列中从右到左的逆序下文。每个单词都有一个对应的词向量。在执行问答任务时,问句中的每个词对应的词向量作为任务的输入,这样可以利用预训练M。网络中的语境信息,从而增强下游任务的性能。(donlnodrpnonsomnos,来自nor的双向编码器表征法)来源于谷歌发表于2018年的一篇论文,旨在通过联合左侧和右侧的上下文,从未标记文本中预训练出一个深度双向表示模型。的结构中只包含nor的编码部分,与按顺序(从左到右或从右到左)读取文本输入的方向模型不同,的编码器会读取整个单词序列,这被认为是双向读取,准确来说是非定向的。的这种在前面的章节中提到nor而成,具体可见图215。中的每一个no层都是由这样的编码单元构成的。在原论文中,模型包含两种:12层和24层。24层模型中每层有16个注意力,词向量的维度为1024,总参数量为3.4亿,12层的模型中每层有12个注意力,词向量维度为768,总参数量为1.1亿。BERT的预训练方式包含两种:MLM(MaskedLanguageModel掩码语言模型)和NSP(NextSentencePrediction,下句预测)。图2-26BERT图2-27BERT对于文本分类任务(如情感分析),的微调非常直接。可以在]标记的输出向量上(该向量旨在捕捉输入序列的整体意义)对特定的分类任务进行训练,比如区分文本是正面情感还是负面情感。对于问答任务(如SQuADv1.1),BERT需预测文本序列中答案的位置。这可以通过。是谷歌在2019年发布的升级版本,该方法引入了全词掩码。简单来说,原有基于od的分词方式会把一个完整的词切分为若干个子词,在生成预训练样本时,这些子词会被随机掩盖,在中,如果一个词的部分od字词被掩成的词。。由百度开发,整合了丰富的知识图谱信息。在预训练阶段使用构、语义信息进行统一建模,极大地增强了通用语义表示能力,能更好地理解和处理复杂语言结构和知识信息。自回归模型(AutoRegressiveModel,AR模型)是基于过去数据来预测当前数据的线性模1--11-(nvend,生成式预训练)模型是使用nor架构的神经网络模型。2018年6月,pnI发布论文povngngugendndngbynve-nng,首次提出模型框架,该框架通过预训练和微调,使用与任务无关的单一模型来实现强大的自然语言理解()。接下来我们将从生成式预训练、对nor结构的改进及的演进历史三个角度对模型框架进行阐释。在GPT开发之前,大多数SoTANLP在机器学习领域,有判别式模型(DiscriminativeModel)(GenerativeModel)两种,如图2-28图2-28督的token集合u={u,…,un},使用标准语言模型目标(LanguageModelingObjective)来最实验中,使用多层nor解码器作为语言模型,这与原始的no有些不同,属于nor的变体。该模型对输入上下文ok应用多头自注意力操作,然后通过位置前馈层在ok上输出分布:$图2-29对TransformerGPT图2-30Transformer与GPTInstructGPT。2022年2月,OpenAI发布InstructionGPT模型。该模型主要是在GPT-3的基础上增加了监督微调(SupervisedFine-tuning)环节,并且基于此,进一步加入了奖励h。2022年11月30日,pnI发布h模型,可以理解为一个多轮迭代训练后的nuon,并在此基础上增加了对话聊天功能。h的发布是自然语言处理领域的重大发展。h已经过大型对话数据语料库的训练,这使其能够理解并响应自然语言查询。赖于人类审查员和系统生成反馈的优化。强化学习过程提升了模型的性能和适应性,确保4的输出既符合人类的期望,又严格遵循既定的政策和指导原则。LLaMA(LargeLanguageModelMetaAIMetaAI大型语言模型)是MetaAI的FAIR团队于LLaMA表2-2oon数据集。oon是一个免费开放的网页爬虫数据库,在A论文中,作者对2017年到2020年的5个爬虫存储库数据进行了处理,具体包含:在行级别上对数据去重;使用x线性分类器识别语言,去掉非英文网页;用g语言模型过滤低质量内容。除此之外,作者训练了一个线性模型用于分类页面——过的网页和没有被维基百科引用过的,并丢弃第二类。GitHub数据集。这些数据是来源于GoogleBigQuery上公开可用的GitHub数据集,作者GutenbergandBooks3。包含两个书籍语料库,即公版书(GutenbergProject)和一个用于训练大语言模型的公开可用数据集(Books3sectionofThePile)。预处理为:在书级StackExchange。StackExchange是一个涵盖从计算机科学到化学等各种领域。作者的训练数据集包括一个StackExchange存储库,并做了预处理:保留其中最大的28个网站的(RootMeanSquarelayerNormalization,RMSNorm),旋转嵌入(RotaryEmbeddings)。去掉了绝对位置嵌入,并在每个网络层中添加旋转位置嵌入(RotaryPositionalEmbeddings,RoPE)。本章介绍了语言模型的基础原理,包含nor在nor的原理介绍中,以语言翻译为例介绍了no的工作流程,以及词嵌入、编码器、解码器等核心部分。而在词嵌入中,我们详细介绍了单词编码(神经网络编码和词向量编码)和位置编码,并通过公式讲解和代码帮助理解底层构造原理。在编码器和解码器中,我们重点讲解了注意力机制和前馈层。在自动编码器的原理一节中,我们介绍了o和,介绍了它们的原理和内部机制。最后,在自回归模型中,我们介绍了和,这两种也是当下最热门的语言模型,我们介绍了它们的数学原理和对原始no架构的改进。Chapter第3文本召回模型是大模型的核心。本章首先介绍文本召回模型相关的基础知识,包括本召回效果。在召回环节中,需要使用文本向量检索模型(或者说是向量化模型)、等深度学习模型的稠密向量检索模型;另一类是以、25为代表的则更擅长提取关键词信息。文本向量检索模型的主要作用是将文本映射到向量空间▲图3-1在大规模场景下,被广泛使用的稠密向量检索模型,例如、3、等,大多数都基于类似的no的编码器结构。相比于no的解码器结构,no的编码器结构可以同时考虑句子的上下文信息,从而更好地表征句子。图32展示了将no编码器用作稠密向量检索模型推理时的输入输出模式。可见,模型是对okn(字或词)进行向量化的,需要进一步处理才能得到句子的向量表示,常用的两种处理方式如下:图3-2查询:HowtolearnPython答案:HowtolearnPythononthe查询:WhatisPython?答案:Pythonisaninterpreted,high-levelandgeneral-purposeprogramminglanguage.Python'sdesignphilosophy…显然,在大模型场景下的文本召回环节,我们通常希望进行非对称检索。非对称检过,进入公众视野之后,被提出的针对场景的向量化模型都是支持非对称检索的,例如3、、等。是使用对比学习的方式进行训练的。对比学习的思想十分简单,即拉近相似的样本,推开不相似的样本。对于文本向量化模型来说,相似可以理解为文本语义上的相关性(在对称检索场景中),或者是查询和答案的匹配程度(在非对称检索场景中)匹配的。对比学习也是时代训练文本向量化模型最常用的方法之一,像、训练模式如图33所示,文本1和文本2经过no编码器变换后,取位反向传播和参数更新。使用的no编码器结构的模型为,当然也可以替换为其他更强大的模型,例如时代被广泛使用的模型是基于o构建的。基于批内负样本的交叉熵损失函数是对比学习的核心,其公式如下:图3-3SimCSE如“Approximatenearestneighbornegativecontrastivelearningfordensetext个句子是否匹配(比如是不是同义句或者属于同一问答对等)失函数或三元组损失函数进行训练。的输出经过平均池化后得到句向量以及句向量,并计算和的差值向量,将这三个向量拼接后,经过线性变换并计算损失函数。在推理过程中,直接计算向量和在训练时并没有考虑余弦相似度,导致训练和推理的计算逻辑不一致。这也是导致与其他文本向量化模型相比效果不佳的原因之一。▲图3-4SBERT▲图3-5SBERTCoSENT(CosineSentence)是苏剑林在其个人网站“科学空间”上提出的一种文本向量化其中,o代表o相似度,为大于0的超参数,默认为20。在训练过程中,为了降低损失函数的值,需要不断优化主干模型,使得负样本对的向量和对的向量和前一小节介绍的不同,o在训练和推理过程中均使用o相似度,计算逻辑一致,因此训练出来的模型效果优于。呢?povngulngugenonhpumonopnongna文章指出,no架构相关的预训练模型所产出的句向量存在各向异性的问题。也解决这个问题,h方法采用了一种简单而有效的方式,甚至无须对模型进行进一步训练。它通过线性变换的方法将产生的句向量映射到标准正态分布,从而更好地在向量空间中区分不同的句向量。具体的变换公式如下所示,其中x表示向量,μ表示向量的均值。TT-1-1-WΣW=I⇒Σ=(W)--1-token拥有双向注意力,在句子开头位置的[cls]token也可以感知文本的全局信息,因此模之外,我们也可以将模型最后一层输出的所有位置的向量取平均作为句子的向量表示。论文中使用了一种折中的方案来得到句向量——将所有位置的向量进行加权求和,息,理应分配更多的权重。具体的计算公式如下所示。表示第个位置的文本向量,S表示句子长度,向量对应的权重通过其所在的位置计算而来。基于no解码器的文本向量化模型通常效果不如基于no编码器模型的文本信息。在撰写本书时,笔者仅了解这一种no解码器结构的模型有不错的文本向量化效果,它基于27进行训练,参数量是同时期的no编码器结构文本向量化模型的10倍左右,推理成本较高。在大规模场景下,主流的做法是采用基于深度学习的稠密向量检索模型进行相关文问题不太敏感,其效果通常比以和25为代表的基于关键词的稀疏向量检索模型向量检索模型混合使用(混合使用检索模型的内容将在4.4.6小节具体介绍),以实现更好的文本召回效果。因此,稀疏向量检索模型的介绍也是非常有必要的。(如的你)的权重问题。这些常见词在各类文本中均容易出现,因此不具有代表性。(mqunynveountquny,词频逆文件频率)本质也是一种词袋模型,它解决了朴素词袋模型存在的这两个缺点。的核心思想是,一个词在大模型应用开发框架nghn已集成了基于的检索器v。nghn的v类底层调用了kn的do类。以下是使用do类的一个示例,我们可以发现它与朴素词袋模型ouno的输出格式有所不同。do使用了向量的稀疏表示,元组的第一个位置表示文本片段编号,第二个位置表示向量数值的下标,元组后面打印出了向量对应位置的值,未输出的位置的值均为0。词袋模型生成的向量通常是稀疏的,使用这种向量表示可以大大节约内存空间。其中,f(qi,D)表示查询文本Q中的第i个词qi在候选文本D中出现的次数,|D|为候选文本中中,N表示所有候选文本的数量,n(qi表示包含单词qi25可以被视为对的进一步改进。首先,25考虑了词频对相似度评分的饱和度影响。假设有一段含有100个词的文本,其中有10个词是葡萄。根据25的思想,我们认为该文本与葡萄是强相关的,而不要求葡萄出现近100次才能认定为强相关。换饱和状态,更多的出现次数不会对相似度产生重大影响。通过调整超参数k,我们可以调节饱和阈值。其次,25在计算相似度时不仅考虑当前文本的长度,还考虑它与平均文本长度的相对大小。25是目前应用最广泛的稀疏向量检索模型,大模型应用开发框架nghn的25v类集成了该检索方法。计,如果有n个候选文本片段,若想要使用交叉编码器进行相关文本召回,则需要将用户选出分值最高的若干候选文本,这个过程需要调用深度学习模型进行n次预测。在大模型场景下,更符合实际的做法是将文本向量化模型与交叉编码器结合起来,实现两阶段的文本召回,具体流程图如图36所示。在第一个阶段,利用向量化模型从向量数据库中快速召回个相关文本片段。在第二个阶段,利用交叉编码器从这段相关文本中进一步挑选出段相关文本。使用两阶段召回的方法既能保证召回的效率,又能提高召回的精重排序模型最简单、使用最广泛的训练范式如图37所示,将两个句子拼接后直接输入预训练过的语言模型中进行训练、预测,语言模型通常是nor相关模型,如、等。模型使用交叉熵损失函数进行二分类任务学习,以判断输入的两个句子是不是同一对问答句或相似句。即使在M时代,、等知名项目提供的重排序模型也使较好的效果。▲图3-6▲图3-7Chapter第4RAG在场景下,我们的目标是利用大模型对召回的相关文本进行提炼和总结,以回答用户的问题。通常来说,提示词(pop)的长度较长,对其编写的质量要求也较高。因此,了解如何撰写高质量的pop变得非常重要。本节将首先介绍一些重要的pop原则,然后再详细介绍在场景下如何编写出优秀的pop。我们与进行交互时使用自然语言的方式。但是我们发现,不同的问题描述方式会导致回答质量的差异。因此,学会如何更好地向描述问题变得非常重要。hT的爆火推动了pop工程的兴起,它旨在优化和开发提示词,以便更高效地利用各种实际问题。pop工程本质上是不成熟的副产品。目前,在某些场景下,M来,pop工程这一概念会逐渐淡化。但在目前,掌握优化pop的能力仍然非常必要,场景下也不例外。接下来,我们将通过一些基础案例来看看如何优化pop型能更好地回答我们的问题。场景场景输出:以下是北京的一些著名景点:故宫、天安门广场、颐和园、长城、天坛、鼓楼和恭王府、北京大学、798艺术区。在场景下,设置兜底回答比较重要。在某些情况下,向量化模型可能无法准确召回与用户问题相关的文本,甚至与用户问题几乎没有任何关联。如果让根据这些召回,如果上下文中没有与用户问题相关的答案,就不要强行生成答案了。这样能够避免产生不准确或不相关的回答。下面以推荐乐队的场景为例。在场景1中,我们只告诉了h小明和小红喜欢哪些乐h还是强行进行了回答。在场景2中,我们明确告诉h提供的信息如果不能回答问题就不要回答,这样才给出了合乎逻辑的答案。场景输出:根据提供的信息,小明喜欢万能青年酒店乐队,小红喜欢肚子乐队。基于这些信的喜好。场景输入:以下是一些信息:小明喜欢万能酒店旅店乐队,小红喜欢肚子乐队。如果以上信息无法回答我接下来的问题,请直接回答我无法回答你的问题问题:请给我推荐一些乐队。输入中提供问答示例(Few-shot场景输入:取如下每个单词最后一个字母拼成新的单词:“ladymanabc”场景问:“abccba”。答:“ca”。问“hijame”。答:“ie”。问:“ladymanabc”。答:输出:“ladymanabc”中每个单词的最后一个字母分别是“y”“n”和“c”,将它们拼接在一起标识出prompt假设我们的目标是让h帮我们总结内容。场景1中存在请直接输出这个违背我们真正意图的内容,h听取了请直接输出这条指令。在场景2中,用###标识了需要总结的内容后,h就能比较好地遵循指令了。在可能存在各种内容,不可避免地会出现一些违背用户真实意图的假指令号将召回文本标识出来很重要。场景场景输入:请从###之间的内容里提取出时间、地点和人物。###3月1###场景输出:100*235+2*(255+1)equals场景首先,计算括号内的表达式RAGonx位置需要放入和问题相关的召回文本,quy位置放入用户提出的问题。在这个例子中,依次涉及如下pop优化技巧:指定的身份、描述答案标准(题,不要健谈)、设置兜底回答方式、通过特殊符号###分隔出召回文本的内容。如果使用的性能较差,无法遵循你的指令(比如不要健谈些对话模型总是习惯性地多输出内容),就要继续扩写pop了,对严格的要求。总之,pop的编写是一个需要不断迭代的工作。文“LostintheMiddle:HowLanguageModelsUseLongContexts”中,作者通过实验证明了这在论文中,大模型的输入包含一个问题和个与问题相关的维基百科文本片段,但是只有其中1个文本片段包含正确答案。进行多次试验,每次将包含正确答案的文本片段放在不同的输入位置,并观察模型回答问题的正确率。图41展示了在大模型输入中放入20个文本片段的情况下,将包含正确答案的文档片段分别放置在输入的不同位置上(从1到20),h回答问题的正确率。可以观察到,如果包含正确答案的文本片段放在输入的中间位置,模型的回答效果甚至不如不提供任何外部文本片段时的表现(如图41中虚线所示,h在维基百科问答场景下,不借助任何外部知识回答正确率为56.1)。的中间位置,甚至会对模型的回答效果产生负面影响。这表明,为了提高模型的回答效果,并不是简单地引入额外的有用知识就一定能起到促进作用。图4-1带有正确答案的文本片段放在不同位置时LLM因此,在场景下,应避免将更有可能包含正确答案的召回文本片段放在输入的的文本片段从大到小排序并标号为1~,一种比较合理的放入输入中的顺序如图42所示,即将文本片段按顺序在开头和结尾进行交替摆放。图4-2在大模型场景下,我们需要构建一个向量数据库,构建向量数据库需要先将包含知识的长文本进行切块,然后再通过文本向量化模型处理后入库。文本切块虽然看起来简过长或文本切块过短。在no架构的向量化模型中,每个词都用一个向量来表示。为了得到一段文本的向量表示,通常的做法是对句子中的词向量取平均,或者使用编码器结构中位置的向量来表示。然而,如果待向量化的句子过长,平均后的词向量或者位置的向量会损失更多细节的语义信息,从而导致召回准确率降低。此外,在大模型场景下,如果后续生成答案的质量。佳实践,需要根据自己的应用场景进行分析和实验来进行选择。首先,切分策略需要考本块会丢失很多信息。最后,在场景下,还要考虑大模型可接受输入的长度,为了保证召回文本都能够输入给大模型,每块文本也不能过长。基于NLTK文“UnsupervisedMultilingualSentenceBoundaryDetection”,其基本思路是使用一个无监督有时候需要对诸如、kdon、、yhon代码等具有特殊内在结构的文本进损失。nghn为用户提供了多种特殊文本切块方法,具体如表41所示。处理yhon代码、kdon、的方法非常简单,针对不同的文本类型默认设置了不同的分割符列表,然后进一步调用固定大小文本切块方法uvhxp。此外,nghn还为用户预定义了其他常用编程语言(如o、、v)的分割符列表,但表4-1LangChain(续图4-3基于BERTLukasik等人在论文“TextSegmentationbyCrossSegmentAttention”中提出了Cross-Segment在论文“SequenceModelwithSelf-dpvedngndoworntpoknountgnon中提出的qod进行了进一步改进。qod利用对多个句子同时编码,建模了更长的上下文之间的使用了自适应滑动窗口方法,在不牺牲准确性的情况下进一步加快推理速度。qodl的示意图如图45所示。▲图4-4Cross-Segment▲图4-5SeqModel示意图在场景下,如果待召回的候选文本片段数量较少,可以直接将它们向量化后存储在(HierarchicalNavigableSmallWorld,HNSW)、倒排文件索引和乘积量化等高效向量检是由研发的一款高效的相似性搜索和聚类库。它使用编程语言实现,并提供了yhon接口。该库支持一些常用的算法在上的运行,以进一步提高计算速度。从实际应用的角度来看,本质上并不能被看作一种现代数据库,因为它不支持数据管理和分布式等功能。它只是实现了高效检索的核心算法而已。一些其他向量数据库,如vu,会在的基础上进行进一步开发,以优化灵活性、易用性和可靠性。图4-6乘积量化(odutunon,)是一种将聚类和向量切片思想相结合的方法,可以在小内存的情况下实现快速检索,但也会降低检索的准确性,示意图如图47所示。该方法首先将数据库中的所有向量都分成_p量为256,每个类别的d可以用一个字节(8b)表示,同时也要保存每段向量切片的聚类中心向量。对于某个向量的第段切片,可以用其所属聚类的来表示,这样原始向量就可以用一个_p维的量化向量来表示(向量量化),只占用了_p个字节的空间,大层包含图节点的全集。在查询时,从高层开始,分层找出当前层与查询向量最相似的节点,通过该节点进入下一层进行进一步检索,示意图如图48所示。分层的思想大大提高但是精度接近于精确检索。不过该方法建图过程慢,并且占用较多额外的内存。▲图4-7▲图4-8局部敏感哈希(LocalitySensitiveHashing,LSH)是一种近似快速检索技术。LSH的基本表4-2FaissMiniMax等其他公司的向量化模型接口。除此之外,还可以传入本地加载的HuggingFace点,用户可以将其部署在ubns上,以获得最佳的可用性和弹性。在vus2.版本中vus遵循数据层和控制层分解的原则,被设计为包含4个层次:接入层、协调器服务、工作节点和存储。在扩展或灾难恢复方面,这些层是相互独立的。vus有如下7个特社区活跃:有1000多个企业用户,200及HuggingFace等平台提供的先进的数据向量化接口或模型。不足的是,Weaviate目前只论文“DAPR:ABenchmarkonDocument-AwarePassageRetrieval”中提到了可以直接将长文在场景下,通常将从向量数据库中召回的文本直接输入M中。然而,由于向量化对于M来说,连贯且包含更多上下文信息的长文本能够帮助总结出更好的答案。直接召回长文本可能比较困难,但可以设计一些人工策略来扩充召回内容,打破“召回内容和输入M中的内容相等的约束,从而解决向量化模型需要短文本而M需要长文本的矛盾。nghn提供了父文本检索”功能,通过调用nounv接口来实现。该功库中。在召回环节,我们可以检索出子文本,但是并不直接将子文本输入M中,而是将子文本所属的父文本输入M中进行处理。nghn使用nounv的代码如下所示。在构建检索器时,传入了两个文本分割器pn_p和hd_p。前者用于确定在场景下输入到大模型中的父子文本块与父文本块之间的映射关系。当调用g_vn_doun接口进行召回时,实际返回的是父文本块的内容。构建向量数据库时,使用多种向量来表示同一段文本通常是有益的。假设有一段文本,我们不仅可以使用完整的来生成向量,还可以使用其子集、总结句等生成补充向量”。在过程中,当我们召回任意“补充向量所对应的文本后,并不直接将其输入大模型中,而是将文本的内容作为输入。这种做法解耦了召回的内容和输入等的关系。可利用如下3种文本生成“补充向量:在很多情况下,用户提出的问题有口语化、语义模糊、无关内容过多等特点。与M相失。因此,将模糊的问题向量化后召回的内容很可能与用户真实意图不相关,从而影响场景下M的最终回答效果。此外,召回的内容还对用户提问的措辞比较敏感,不M对用户的原始提问进行改写和扩充,然后再进行相关内容的召回。为“YouareanAIlanguagemodelassistant.Yourtaskistogenerate3differentversionsofthegivbasedsimilaritysearch.Providethesealternativequestionsseparatedbynewlines.Original据“HowtolearnPythononline?”检索出“HowtolearnPythonontheweb?”。而非对称检索则是根据问题检索出答案,例如根据“WhatisPython?”检索出“Pythonisaninterpreted,high-levelandgeneral-purposeprogramminglanguage.Python'sdesignphilosophy...”。显然,在向y(ypohlountbddn,假设文档嵌入)方法提出了一种思路,将向量召回环节近似转换为对称检索,从而提高了召回效果。y方法可以概括为以下4个步骤:在多轮对话场景中应用技术时,查询内容的优化变得更为重要,因为用户当前的问题很可能缺乏关键信息(关键信息可能在历史聊天记录中),本。举个简单的例子,假设有如下对话:在场景下,默认使用的是向量召回,文本转化为向量之后,仅通过简单的计算向量召回精度并不高。虽然通过增加召回文本的数量可以提高命中率,但这会增加下游M总结的难度,而且M的输入长度也有限制。一种改进方式是:在向量召回的基础上,最相关的少部分文本。通过这种多级排序的思路,既能保证召回效率,又能提高召回精度。在互联网搜索、推荐、广告等领域,这种多级排序的思路被广泛使用。在场景下,最常用的重排序模型是基于nor编码器架构的交叉编码器。将用原理和典型模型已在第3章中介绍,此处不再赘述。M具备比传统深度学习模型更强的语义理解能力。如果算力允许,也可以用M来做召回文本的重排序。大模型应用开发框架nghn提供了onxuopon-v接口,让用户可以方便地使用M进一步精选召回文本。具体使用方式如下所示。这种方式需要将基础检索器(b_v)和压缩器(b_opo)传入onxuoponv接口。压缩器的作用是精选召回文本。nghn提供了两种与M相关的压缩器:hn和hnxo。在构建这两种压缩器时,需要传入大模型对象。hn压缩器用于判断召回的文本是否与问题相关,而hnxor压缩器则可以从召回文本中提取关键句。这两种压缩器的底层实现原理非常简单,仅仅是通过设计提示词来实现的。例如,hn压缩器使用的提示词为:例如,模型相比于单棵树模型有更低的偏差,随机森林模型相比于单棵树模型有更低的方差。同样地,在大模型的召回环节中,我们也可以采用多模型集成的思路。其中,最常见的集成模式是将稀疏检索器(例如25)和稠密(向量)检索器结合起来。稀疏检索器擅长根据关键词查找相关文本,而向量检索器则擅长根据语义信息查找相关文本,两者具有互补关系。以两个检索器融合为例,我们可以分别计算用户查询和候选文本之间的相似度分值和排序,然后使用融合算法得到新的相似度或排序结果。其中,α为权重系数,为通过向量化模型得到的相似度,q为用户查询,c为候选文本片另外一种融合算法是倒数排序融合(ReciprocalRankFusion,RRF)。获得两个检索器对nghn基于倒数排序融合实现了多检索器融合方法nbv,仅需要传入检索器对象和融合权重即可。以融合25和pnI用”(functioncalling)能力。此处的“函数调用”特指OpenAI模型提供的一种功能:提前定召回环节计算得到查询文本和候选文本的相似度分值(oe)后,增加一项与时间有关的修正项对相似度进行修正。如果某个文本距离上次被召回的时间(hou_pd)越短,修正项分值越大,进而提高召回排序名次,增加被召回的概率。衰减率dy_e是超参数,衰减率越大,长时间没有被召回过的文本以后就更难被召回。ghdoov接口的使用方式如下所示。在这里,我们设定了较大的衰减率,并在写入“葡萄价格的元数据时设置了较早的上次被召回时间”。在这种情况下,即使查询内容与葡萄相关,葡萄相关价格的文本也不会被检索出来。对于大模型来说,召回的文本中是否包含用户问题对应的答案严重影响着M的最此,构建一套针对召回环节的评估流程,并不断优化召回的各个环节,是构建系统的必要步骤。评估召回环节效果需要的测试数据为形如“问题包含答案的文本块”这样的二元组。常用的评估指标有命中率和平均倒数排名(npolnk,)。命中率指的是包含答案的文本块在召回文本集合中出现的概率。对于单次召回,只有“命中和未命中”两种的排名倒数,然后取平均。具体计算公式如下所示,其中n表示包含第个问题的答案的文本片段在召回文本列表中的位置。该方法需要有参考答案,将参考答案和M的回答进行向量化,然后计算它们之间的相似性。举个例子,“天空是蓝色的和天空是黄色的”这两句话的相似度很高,但意思完全不同。大模型应用开发框架ndx提供了nyvuo接口实现该评估方法。法。即使没有参考答案,大模型利用自身知识也能进行评估(考nh),缺点是M调用成本较高。nd提供了onvuor类实现该评估方法。默认使用的提示词如下所示(可以自己设置提示词,如果使用h这样主要用英文语料训练的模型,提示词最好用英文,即使要评估的内容是中文):在场景下,会提供给M召回的文本信息,以上介绍的通用M回答评估方法并没有在评估过程中考虑答案和召回文本之间的关系。场景有专用的评估框架,目前比较著名的是(vlugndnonn,检索增强生成评估)。方法在评估过程中需要用到M和向量化模型。它需要多次调用,这就需要我们在实际应用中考虑评估成本是否可接受。方法的一个优点是不需要参考答案。在评估过程中,方法主要关注3个方面:忠实度、答案相关性和上下文相关性。接下来将分别对它们进行介绍。个“假问题”,具体使用的默认提示词如下:“Generateaquestionforthegivenanswer:LLM本节首先将介绍如何构建训练数据以及微调M,以改变M在场景下的回答方式。然后,将介绍两种经过优化后的框架。在这两种框架中,M发召回的能力。向量化模型和M联合训练理论上也属于本小节的范畴,但在后续章节会专门介绍这部分内容,因此这里不再详细介绍。LLM表4-36B的LLMPromptTuning、P-Tuning、P-Tuningv2、PrefixTuning及LoRA(LowRankAdaptation,低图4-9LoRA在大模型场景下,通常的做法是根据用户的问题仅进行一次文本召回。然而,在长文本生成的情况下,仅进行一次召回往往效果不佳,M生成长文本的过程中更有可能扩展出与问题相关性较弱的内容,如果M没有这部分知识,容易产生模型幻觉问题。下3种:LookingActiveREtrievalaugmentedgeneration)在实现了多次召回的基础上,还实现了让章“ActiveRetrievalAugmentedGeneration”除了框架外,(vevugndnon,自我反思检索增强生成)本和M生成文本的质量。涉及训练M,并扩充了词表,引入了4类新的“反射标记”,每类标记分别对应一种子任务:①是否召回(是否触发召回操作);②是否相关(判断召回的文本是否与问题相关);③是否支持(召回的文本是否支持答案的生表4-4Self-RAG的4(续框架需要训练两个模型,即判别模型和生成模型。判别模型本质也是一个生成式的M,给其输入不同的提示词,让它能够完成上述4类任务。判别模型的训练数据是用4生成的,向描述任务以及提供一些示例,让4向原始文本中插入反射的文本又能输出反射标记。在实际推理时,生成模型根据输出的“是否召回反射标记的类成,并对答案进行评分(判断答案是否有用),最后综合3类与判别质量相关(4除去是否召回任务)的反射标记里最理想类别的预测概率,选出最终的最佳答案。-的代码、模型权重以及训练数据均已开源。模型基于2进行微调,提供了7B和13两种规格。本章对pop设计的基础和场景下的pop设计进行了阐述。在G流程中,将包含知识的文本切块并存入向量数据库也是一个关键环节,我们在第4.2小节和第4.3小节分别介绍了4种文本切块的方法以及5层算法的原理。文本召回环节有许多可以优化的方法,我们在第4.4小节进行了介绍。良好的评估标准对于不断迭代效果来说是必不可少的。因此,我们还从召回环节和模型回答效果两个方面介绍了评估方法。最后,还介绍了一些优化M能力的方法。Chapter第5RAG基础RAG▲图5-1基础RAG先进RAG基础微调:如使用LlamaIndex对BGE(BAAIGeneralEmbedding)模型进行微调,微大模型主导的RAG在实际的场景中,很多问题都是简单的信息检索问题,例如茅台3的净利润茅台的买入评级,考验的是模型的知识检索能力,即根据问题从召回的候选片段中找到正确的答案再组织成易于理解的语言输出到前端。大模型主导的系统其实是大模型决定何时来调用工具(召回),何时去做检索,检索时的查询是什么。举例来说,当查询武汉东湖和杭州西湖的面积差多少时,模型会通过检索获取武汉东湖的面积面积,在适当时间调用工具计算器来得到最终的答案。计划和执行满足请求的一系列操作。本节通过AzureOpenAI的聊天模型来配置Agent,并综上,以查询“whatistheendingsceneofAvatar2?”为例来分析基于Agent的整个RAG是多模态RAG多模态系统可以看作系统的扩展,它可以处理不同模态的数据,例如文本、图片、音频、视频等。多模态系统的生成结果也更丰富和多样化,例如多模态系统可以检索文档生成文本或者检索文档生成图片来回答有关文档的查询。本节尝试基于4,使用ndx以及dn实践通过处理文本和图片来回答有关文档的相关查询。多模态向量存储(dn):用ndx对分离的文本块和图片做向量嵌入(可以使用pn词嵌入的模型对文本和图片做嵌入,pn词嵌入是预训练的模型集合,可以在统一的向量空间表达文本和图片),在dn中。检索引擎:检索引擎被链接到单点检索入口,这样可以方便地从dn中基于用户查储的图片。图5-2基于GPT-4V的多模态RAG本章介绍了的范式演变,首先介绍了基础系统的流程,然后从检索、增强、生成三个方面分析了基础系统存在的问题,针对这些问题,我们介绍了优化后的先进系统,以及它的优化措施,如数据清理、微调嵌入、增强检索、构建提示词等。接着重点介绍了基于gn构建的系统,通过nghn来实践其构建流程,展示了代码样例。最后以4为例介绍了多模态系统,使用ndx和dn来实践基于4处理文档,并回答文档的相关查询。Chapter第6RAG对于一个完整的系统而言,不能像开源博客、框架一样使用独立的召回模块和生成回模块和生成模块的训练。本章将梳理系统训练方法,以及各个训练方法的优缺RAG图6-1RAG此外,系统联合训练的另一个难点是语言模型的训练成本较高。以训练一个70亿参数量的模型为例,如果使用半精度(如p16或b16),加载模型到显存中,一个参数消耗2个字节,则总计消耗2*7*1091024*1024*1024,约13。简便计算时,通常用参数量乘以2,例如7模型,粗略估计加载到显存需要14,其他尺寸类似。在训练过程中需要存储梯度,则需要与参数量所需空间相同大小的显存(14);一般使用d优化器训练,需要2倍参数量所需空间的显存(28)需要56显存,若使用单精度(p32),则需要112。家用显卡的最大显存通常为24,这意味着微调一个70亿参数量的模型至少需要3块家用显卡。幸运的是,针对语言成本高的问题,开源社区已经有了LoRA、QLoRA、FlashAttention等独立训练是最常见也是目前大多数人使用的方法。可以理解为,直接从HuggingFace网站在第4、5章中已经介绍了许多经典的模型,它们的训练模式都可以归类到上述4个类场景的训练方法来构建最优秀的系统。下面将结合经典的模型,分别介绍每种训练方法的具体应用。型或。也就是说,这两个模型是单独训练完成的,二者之间互不关联。在第3章中,向量模型。同样,在第2章中,我们也介绍了经典的语言模型及其训练模式,因此这里不再赘述。独立训练的优点在于:一方面,两个模型解耦意味着它们可以独立优化,而不会相互干扰;另一方面,在很多场景中,我们可以直接使用现成的向量模型和生成模型接入G的场景和领域进行优化,这可能会对模型的跨域能力提出较高要求。辅助生成模型的训练。以经典模型为例,在模型中,针对n个字符输入的文本,会被切分成个hun,每个hunk的大小为n。每个小hunk经过召回模型编码成向量之后可以在知识库索引中分别召回个候选片段,这些候选片段经过一个编码器得到一个隐层特征,这些特征会被使用在每个层的CCA(ChunkedCrossAttention,分块交叉注意力)中,这个过程对应图6-2图6-2RETRO图62的下半部分对应的则是正常的语言模型的训练。因为考虑到索引部分的知识库特别度更新,从而使得索引不必随着训练过程而变动。从模型中可以很明显地看到序贯训练的特点:冻结其中一个模块的参数,但另一个模块的训练会依赖于冻结的模块。此外,由于冻结了向量模型,在图62左上部分不会独立训练一样比较简单。与6.4.1模型来辅助训练召回模型。一个简单的想法是,训练数据,,以及一个知识库。针对每个,利用召回模型从知识库中召回若干个知识片段,生成模型基于问题片段可以计算出真实的似然概率,进一步通过这个概率反向优化召回模型。接下来以经典模型练。根据输入,召回模块可以从数据索引中召回相应的候选图6-3REPLUG根据步骤4)在2020年的“REALM:Retrieval-AugmentedLanguageModelPre-Training”论文中提到了这种图6-4REALM异步更新索引的训练方法中有一个重要的超参数是在训练过程中每隔步更新一次索引。引会影响到训练效果。在的研究工作中,500。研究人员还做了一个实验,如果把放慢30倍,最终的测试表现从38.2降低到了28.7。在同样使用异步更新索引训练的研究工作中,研究人员对比发现在维基百科数据上异步索引更新大约会带来30的额批近似策略最早在nngngugeodshoyugnon一文中被提出。普通的系统由于更新向量模型导致索引频繁更新而使训练成本大幅增加。异中动态构建临时索引,从而就不必考虑整个大规模知识库建立索引导致的成本问题。12-与标准的语言模型训练相比,训练在训练过程中会从同一个训练批次中动态构建编码模块。训练目标如下:图6-5TRIME那如何构造每个批次的训练数据呢?我们现在有一个大规模的知识库,表示为,包含大量的onx,g的对。正常需要通过相似度策略召回op的候选,但作者发现,检索用25将具有大量词汇重叠的片段放到一个批次中来构建训练记忆,实时构建的临时索引包含相同批次中的不同样本,同时也包含当前解码okn之前的部分,如图66所示。图6-6通过BM25异步更新索引和批近似这两种模式可以实现端到端的系统的训练,使得每个模块能构造等给整个训练框架的工程设计带来了挑战。Chapter第7基于LangChain实现RAG大模型应用开发框架nghn被开发者广泛应用。本章将介绍nghn中与相关的组件,并利用nghn构建一个可视化的大模型应用,用于回答指定中的相关问题。LangChainnghn是一个用于开发由语言模型驱动的应用程序的编程框架,仅需要几行代码,就能运行一个相对简单的应用程序。组件和链是nghn的两个核心概念。组件是具有明确功能的单元,例如调用单元、文本切块单元、文本召回单元等。单个组件并不能完成复杂任务,例如,如果要实现一个基于的聊天机器人应用,那么就需要将多个组件连接起来。在nghn体系中,将各种组件连接在一起,进而实现复杂功能的接口被称作链。除了提供基础的组件和链外,nghn也与时俱进,不断地将最新的、数据库、应用工具等做成官方组件,纳入nghn体系中,以确保开发者能够在一个开放且友好的环境中轻松进行先进的应用开发。如果开发者有特殊需求,也可继承nghn提供的基类,进行定制化组件或链的开发。由于nghn功能完善、体系庞大,因此代码封装相对复杂,基于nghn进行复杂功能的深度开发也是有一定难度的。LLMChatGLM、Qwen等。在LangChain中,LLM调用组件分为LLMs和ChatModels两大类,实输出为文本格式,而ChatModels类型的组件使用“聊天消息”作为输入和输出的接口。ChatModels类型组件的主要目的是调用具有聊天功能的LLM,使用“聊天消息”作为输入表7-1LangChain提供的“聊天消息”本。对于请求频率较高的场景,LLM调用组件还支持异步模式,以提高调用LLMAPI的nghn提供了、、、、kdon、等多种文档格式的加载器组件。加载后的文档统一保存到oun类中,包含文档内容以及元数据信息。文档加载器组件还支持延迟加载大模型流程中的文本召回环节主要依赖于向量检索。在候选文本向量化和用户查询向量化时都需要用到文本向量化模型。nghn提供了pn、oh、、uggng等机构的文本向量化模型调用组件。uggng开源社区提供的一些文本向量化模型(例如)效果比闭源且调用的向量化模型效果好,并且向量化模型参数量小,在进行微调,进一步提

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论