过去一年多,说实话现在关于大模型的介绍和说明的文章已经非常多了,大部分人其实也已经有了一些基础的认知,但是我自己的感受是,这些信息实在是太碎片化了,称不上系统化的认知,并且市面上暂时也没有看到能够一口气全面的讲清楚大模型到底是什么这样的文章;
为了缓解自己的认知焦虑,我想亲自做一下信息的汇总者,把过去一年理解到的关于大模型的知识点,整理成一篇文章,希望通过一篇文章理解清楚大模型,也算是对自己大量学习那么多内容的一个交代;
我将分享哪些内容?
本篇文章将分享15个关于大模型相关的话题,本来有20个,我删减了一些可能更加偏技术的内容,修改为更加聚焦在普通人或者产品经理应该关注的问题点,目标是希望作为AI小白用户,我们只需要掌握和理解这些内容就够了;
适合什么人群?
本篇文章比较适合以下几类朋友:
- 适合想要了解大模型到底是怎么回事的小白和入门朋友;
- 适合有意愿转型从事AI相关的产品和岗位的朋友,包括产品经理,运营人员;
- 适合已经初步了解AI,但是想要进阶学习AI,减少AI认知焦虑的朋友;
内容声明:整篇内容均为个人在广泛的阅读和消化大量的专家文章、大模型相关的书籍以及和行业内的专家们请教和学习之后汇总的结果,个人更多的是作为一个知识消化和整合者的作用,如果有描述不正确的,欢迎友善的告知我!
第1讲:大模型常见的概念理解
在开始了解大模型之前,我们先理解一些基础概念,掌握这些专业名词的概念,以及概念之间的关系,会有利于你后续阅读和学习任何AI和大模型相关的内容,个人花费了挺多时间去梳理他们之间的关系,所以这部分一定要好好阅读;
1. 常见的AI术语
1)大模型(LLM):现有所有的大模型,指的都是大语言模型,并且指的都是生成式的大模型,可以联想到的实际案例包括GPT4.0,GPT4o等;
- 深度学习:深度学习是机器学习的一个子领域,专注于应用多层神经挽留过进行学习,深度学习擅长处理复杂的数据如图像、音频、文本,因此在AI中的应用非常有效;
- 监督学习:监督学习是机器学习的一种方法,通过训练数据集来学习从输入到输出的映射关系。训练数据集包含输入-输出对,模型使用这些已标记的数据进行训练,学习如何从输入预测输出。常见的监督学习算法包括线性回归、逻辑回归、支持向量机、K近邻、决策树和随机森林等。
- 无监督学习:无监督学习是机器学习的一种方法,在没有标签数据的情况下从数据中发现模式和结构,它主要用于数据聚类和降维等任务。常见的无监督学习算法包括K均值聚类、层次聚类、DBSCAN、主成分分析(PCA)和t-SNE等。
- 半监督学习:半监督学习结合少量标记数据和大量未标记数据进行训练。它利用未标记数据的丰富信息和少量标记数据的准确性来提高模型性能。常见的方法包括生成对抗网络(GANs)和自编码器。
- 强化学习:强化学习是一种通过与环境交互,并基于奖励和惩罚机制来学习最优策略的方法。强化学习算法通过试错法来优化决策过程,以实现最大化累积奖励。常见算法包括Q学习、策略梯度和深度Q网络(DQN)等。
- 模型架构:模型的架构代表了大模型的主干采用了什么样的设计方式,不同的模型架构会影响大模型的性能、效率、甚至是计算成本,也决定了模型的可拓展性;例如很多大模型的厂商会通过调整模型的架构的方式来缩减模型的计算量,从而减少对计算资源的消耗;
- Transformer架构:Transformer是目前主流的大模型采用的模型架构,包括GPT4.0以及国内大部分的大模型,都是采用这个架构,Transformer架构之所以被广泛的使用,主要的原因是这个架构类型让大模型具备了理解人类自然语言、上下文记忆、生成文本的能力;常见的模型架构,除了Transformer架构,还有卷积神经网络(CNN)架构,适用于图像处理,以及生成对抗网络(GAN),适用于图像生成领域;详细关于Transformer架构的介绍可后面部分内容;
- MOE架构:MOE架构表示混合专家网络架构,表示混合多种专家模型,形成一个参数量巨大的模型,从而能支持解决多种复杂的专业问题;MOE架构的模型里面可能包含Transformer架构的模型;
- 机器学习技术:表示实现AI的一大类技术,包括大家经常听到的深度学习、监督学习、强化学习,这些都属于机器学习的一种技术,具体是啥作为产品经理而言不需要过分深究,只需要知道这些xx学习之间的关系就好,别被技术人员们带沟里去了;
- NLP技术(自然语言处理):NLP是AI的一个应用领域,专注于计算机理解、解释、生成人力语言,用于文本分析、机器翻译、语音识别和对话系统等应用场景,简单一点讲,就是把很多信息转换成人类自然语言能够理解的信息的一种技术;
- CV计算机视觉技术:如果说NLP处理的是文本,那么CV相当于是解决视觉内容相关的技术,CV技术包括常见的图像识别技术、视频分析技术、图像分割技术等,都属于CV技术,CV技术也是大模型应用中常见的技术,特别是后面会讲到的多模态大模型技术;
- 语音识别和合成技术:包括语音转换为文本技术,以及语音合成技术,例如文本合成语音技术(简称TTS技术);
- 检索增强生成技术(RAG):表示大模型基于搜索引擎和知识库检索的内容生成内容的技术,RAG是大部分AI应用落地的时候都会涉及的技术;
- 知识图谱 (Knowledge Graph):知识图谱是一种把知识关联起来的技术,通过知识图谱技术,可以让知识之间建立联系,帮助模型更好、更快的获取到最相关的知识,从而提升模型处理复杂关联信息,以及AI推理能力;
- Function Call:是指在大型语言模型(如GPT等)中,通过调用模型内置的或外部的函数,使其能够完成特定的任务或执行特定的操作。这一机制让模型不仅仅是一个生成文本的工具,而能够通过指定调用不同的功能,执行更多样化、具体的操作。Function Call 让大模型能够和多种API能力结合,从而让大模型的应用更好的落地,比如大模型要支持内容检索、文档识别等能力,就需要基于Function Call 的能力来实现;
2)大模型训练与优化技术相关术语
- 预训练 Pre-training:表示在大量数据集上训练模型的过程,预训练的数据集通常比较大,种类也比较多,训练后获得的是一个通用能力比较强的大模型,就好像一个人通过义务教育和上大学学习了多种通用知识,具备解决通用问题的哪里;
- 模型微调 Fine-tuning:模型微调表示大模型在特定任务或小数据集上进一步训练模型以提高模型解决针对性问题的表现,与预训练阶段不同的是微调阶段使用的数据量相比更小,且主要使用垂直领域的数据,通过微调获得的是一个垂直模型和行业模型,模型微调,就好像入职支持的毕业生,开始接受企业的专业技能的培训;
- 提示词工程Prompt Engineering:用产品经理的语言理解,就是使用大模型更容易理解的提问方式,让大模型更好的输入用户想要的结果,所以提示词工程就是一门学会提问题的技巧;
- 模型蒸馏:模型蒸馏是一种通过将大模型(称为教师模型)的知识传递给一个小模型(称为学生模型)的技术。学生模型通过学习教师模型输出的知识来提高其性能,保持与大模型相近的精度。
- 模型剪枝:模型剪枝表示去除大模型不需要的参数,把整体的参数规模降低下来,从而降低模型的计算量和成本消耗;
3)AI应用相关术语
- 智能体Agent:Agent简单理解就是具备某一项能力的AI应用,如果互联网时代的应用叫APP,AI时代的应用叫Agent;
- Chatbot:Chatbot表示AI聊天机器人,表示一类以聊天的方式为应用交互的AI应用,包括像ChatGPT这类的产品,都属于Chatbot类应用;
4)大模型表现相关的术语
- 涌现:指的是当大模型的参数规模达到一定的规模之后,大模型能够展现出更多超出预期的能力;
- 幻觉:表示大模型在生成内容的过程中出现了胡说八道的情况,错误的把一些不正确的事实当做真实的情况处理,从而导致生成结果不真实的现象;
- 失忆:表示当对话轮次和长度达到一定限度之后,模型突然变傻,开始出现重复和失忆的情况,大模型的记忆主要受模型的上下文长度等影响;
2. 如何理解AI、机器学习、深度学习、NLP等概念关系
如果你关注AI和大模型,“AI”“机器学习”“深度学习”“NLP”等这几个关键词基本在未来的学习中一定会遇到,所以我们最好先理解清楚这几个专业名词的概念和定义,以及他们之间的逻辑关系,方便你更加容易理解它们;
概括起来讲,这几个概念之间的关系如下:
1.机器学习是AI的一种核心技术,AI的核心技术除了机器学习,还有专家系统、贝叶斯网络等(不需要过多深究这些是什么),其中深度学习是机器学习中的一种;
2.而NLP是AI的应用任务类型中的一种技术,用于自然语言的处理,除了NLP,AI的应用技术还包括CV计算机视觉技术、语音识别和合成技术等;
3. 如何理解Transformer架构?
谈到大模型,就不能不提Transformer架构,如果说大模型是一棵树,Transformer架构就像是模型的主干,ChatGPT这类产品的出现,主要还是得益于Transformer架构的设计,让模型具备理解上下文、记忆能力、预测生词等能力;同时,Transformer的出现,也让大模型不需要像以前一样需要依赖大量的有标注数据做训练,而是能够基于无标注数据做训练,这个突破的意义在于,以前做一个模型需要投入大量的人力去对数据做清理、标注分类,但是现在只需要将碎片化、零散的数据扔给模型,模型也能够处理,我们通过如下几点具体了解这些概念:
Transformer架构和深度学习技术的概念关系Transformer架构属于深度学习技术领域的一种神经网络架构,也就是说属于深度学习技术里面的一种实现和设计形式,深度学习领域,除了Transformer架构,还有传统的递归神经网络(RNN)和长短期记忆网络(LSTM)架构;
4. 如何理解Transformer架构和GPT之间的关系
GPT的的英文全称是,生成式预训练 Transformer(Generative Pre-trained Transformer,GPT),因此GPT就是基于Transformer架构的而开发出来的一种大语言模型,由OpenAI开发。
GPT的核心思想是通过大规模预训练和微调,来增加生成和理解自然语言的能力,可以理解为,Transformer架构出来之后,相当于解决了理解上下文、处理大量数据、预测文本的能力,但是openai首次采用预训练+微调这种形式来改进和使用Transformer架构,使它具备了chatgpt这类产品的理解自然语言和生成自然语言的能力;
GPT之所以能具备生成和理解自然语言的能力,是因为预训练阶段通过大规模未标注文本语料库学习广泛的语言模式和知识,且预训练任务通常是语言模型任务,即给定一个序列的前部分,预测下一个词,这种方式使模型能够理解语言的结构和上下文关系,具体的差异点如下:
1)能力差异上:Transformer架构是让模型具备理解上下文、处理大量数据、预测文本的能力,但是还不具备理解自然语言、生成自然语言的能力;而GPT在增加了自然语言的预训练之后,具备了理解和生成自然语言的能力;
2)架构基础上:
- Transformer:原始的Transformer模型由一个编码器和一个解码器组成,编码器处理输入序列,生成中间表示,然后解码器基于这些表示生成输出序列。这个架构特别适用于序列到序列任务,如机器翻译。并且编码器在处理输入序列时采用的是双向处理的机制,可以使用双向注意力,即每个词可以考虑序列中所有其他词的信息,不论它们是前面的词还是后面的词。
- GPT:GPT主要使用Transformer的解码器部分,只关注生成任务。它在训练和生成过程中是单向的,即每个词只能看到它前面的词(单向注意力)。这种架构更适合文本生成任务。编码器采用的是单向处理的机制,在生成下一个词时,GPT只能考虑之前的词,这与语言模型的自然形式一致。
3)解决特定问题的实现方式上:
- Transformer用于解决特定任务类型(比如机器翻译等)的问题的时候,它的实现方式是通过训练的方式来实现的,并且Transformer的编码器和解码器同时训练,以优化特定任务的表现。
- 而GPT在解决特定任务类型问题的时候,是通过有监督微调的方式实现的,也就是说,不需要针对特定任务类型做训练,只需要提供一些特定任务的数据,就可以实现;需要理解的是,训练和微调是不同的实现成本的实现方式;
4)应用领域上:
- 传统Transformer框架可以应用于多种序列到序列任务,如机器翻译、文本总结、语音识别等,由于包含编码器和解码器,Transformer能够处理多种输入和输出格式的任务;
- GPT主要用于生成任务,如文本生成、对话系统、问答系统等。它在生成连贯且有创意的文本方面表现出色。
5. 如何理解MOE架构
除了Transformer架构,最近还流行的另一种架构是MOE架构(Mixture of Experts),它用于动态选择和组合多个子模型(即专家)以完成任务。MOE的关键思想是,通过组合多个专家模型来解决一系列的复杂任务,而不是所有的任务都交给统一的大模型来解决;
MOE架构的主要优势在于能够在大规模数据和模型参数的情况下仍保持计算效率,且能够在保持模型能力的同时显著减少计算成本。
Transformer和MOE可以结合使用,这种结合通常被称为MOE-Transformer或Sparse Mixture of Experts Transformer。在这种架构中:
- Transformer用于处理输入数据,利用其强大的自注意力机制捕捉序列中的依赖关系;
- MOE用于动态选择和组合不同的专家,从而提高模型的计算效率和能力。
第2讲:大模型和传统模型的区别
通常当我们谈到大模型的时候,指的是LLM 大语言模型,或者说更具体一点指的是GPT类的模型(基于Transformer架构的生成式预训练模型),首先它是一个语言模型,解决的是自然语言任务方向的问题,而不是图片、视频、语音等领域的问题(同时具备语言、图片、视频、语音等多个模态的模型,后来称之为多模态大模型,与LLM不是同一个概念);其次LLM是一个生成式的模型,也就是说它的主要能力是生成,而不是预测或者决策等;
区别于传统的模型,大模型概括起来具备如下的特点:
- 具备理解和生成自然语言的能力:很多以前我们接触的传统模型,可能并不能够理解人类的自然语言,更不用说生成人力能理解的自然语言;
- 能力强大,通用性强,可以解决很多问题:传统的模型,大部分是一个模型解决一个或者一部分问题,专业性比较强,而无法解决通用问题,而大模型的通用能力很强,可以解决各种各样的问题;
- 具备上下文记忆的能力:大模型具备记忆能力,能够关联上下文对话,而不是一个失忆的机器人,这个是区别很多传统模型的差异点之一;
- 训练方式上,基于大量的无标注文本,通过无监督的方式预训练,和很多传统模型需要依赖大量的标注数据的方式不同,无标注数据的方式大大的节省了数据清理和准备的成本;且预训练需要大量的训练数据,这些数据用于调整模型的参数,使其能够准确地执行任务,GPT3.5的训练语料高达45T;
- 参数规模巨大,大部分大模型的参数规模基本都在千亿级别以上,比如GPT3.5的参数规模已经达到1750亿,而GPT4.0据说可能是万亿级别参数,这些参数在模型训练过程中会学习并调整,以更好地执行特定的任务;
- 训练需要消耗大量的计算资源:由于其规模和复杂性,这些模型还需要显著的计算资源来进行训练和推理,通常需要使用专门的硬件,如GPU或TPU,调研称,要训练像ChatGPT这样的生成式AI,至少需要1万张英伟达A100加速卡的支持,GPT3.5这种参数级别达到1750亿规模的模型,训练需要的费用高达900万美元;
第3讲:大模型的演变历程
1. 大模型的生成能力的演变历程
了解LLM的演变历程,可以帮助大家了解大模型是如何一步一步的具备如今的能力的,也更加容易理解LLM和Transformer之间的关系,如下的历程为大模型的演变历程:
- N-gram:N-gram是大模型具备生成能力的最早期阶段,它主要解决了预测下一个词的能力,这个是文本生成的基础,但是它的局限性在于理解上下文和语法结构的能力比较有限;
- RNN(循环神经网络)和LSTM(长短期记忆):这个阶段,这两个模型解决了模型上下文理解长度的问题,具备了相对更长的上下文窗口,但是局限性在于难以处理大量的数据;
- Transformer:兼具了前面两个模型中预测下一个词、记忆长度的问题的同时,支持在大型的数据集上训练,但是不具备自然语言理解和生成的能力;
- LLM大模型:采用GPT预训练和监督微调的方式,使得模型具备理解和生成自然语言的能力,所以叫大语言模型,可以说,预训练和监督微调这种方式的出现,把Transforemer带到大模型的发展阶段;
备注:以上内容引用自《大模型应用开发极简入门》
2. GPT1到GPT4的发展历程
GPT1:首次引入了无监督的训练步骤,解决了以前模型训练需要大量的标注数据的问题,无监督的训练方式,可以允许GPT基于大量的无标注数据做训练;但是局限性在于,在因为GPT1的参数规模比较小(参数规模只有1.17亿),所以一旦遇到复杂任务的时候,如果没有经过监督微调,便无法解决,所以需要针对很多复杂任务做很多的微调后才能使用,比较麻烦;
GPT2:参数规模提到到15亿,训练文本大小扩大四倍,增加到40G,通过增加参数规模和提高训练数据的规模,可以提高模型的能力,但是依然存在解决复杂问题的局限问题;
GPT3:参数规模拓展到1750亿,该阶段GPT3已经在文本生成和语言理解方面达到非常强的表现,并且取消了微调的步骤,也就是会说不需要微调也能解决复杂问题了;但是GPT3存在的局限,是因为模型是在很多互联网数据上语序连的,预训练数据中可能会包含虚假和错误的文本,包括种族歧视、性别歧视等,所以导致模型会说错话,存在安全问题;
InstructGPT:为了解决GPT3的局限性问题,GPT3在预训练之后,增加了监督微调(SFT)、和通过人类反馈强化学习(RLHF)的步骤,调整优化模型的出错的问题,这样的模型成为InstructGPT;该过程的原理是,首先先提供一些真实的”标准答案“的数据给模型让模型完成监督微调;第二步,构建一个生成结果的评分模型(构建的方式同样需要人为提供一些打分数据),用于对生成结果做评分;第三步,用评分模型自动给模型生成的结果评分,然后将评分结果应用于模型的策略优化,让模型越来越好;所以,现在很多大模型厂商解决幻觉率的问题,关键还是在于监督微调阶段提供的数据质量和数量情况,以及评分模型是否更强大;
GPT3.5:2022年3月份,openai发布了GPT3的新版本,它的训练数据截止到2021年6月份,训练数据规模更大达到45T,11月openai称之为GPT3.5;
GPT4.0:2023年4月份,OpenAI发布了GPT4.0,整体的推理能力上大幅提升,并且支持了多模态能力;
GPT4o:2024年5月份,发布GPT4o,增强了语音聊天等能力;
O1:2024年9月份,openai推出O1模型,主打思维链能力,提升模型的思考能力;
备注:以上内容引用自《大模型应用开发极简入门》
第4讲:大模型生成文本的原理
1. GPT是如何生成文本的?
大模型生成文本的过程,概括起来包括如下5个步骤:
- 模型收到提示词之后,首先将输入的内容做分词处理,拆分成多个token;
- 基于transformer的架构理解token之间的关系,从而理解提示词的整体含义;
- 基于上下文预测下一个token,预测的时候,可能会有多种结果,每种结果会有相应的概率值;
- 根据概率值选择概率最高的token作为下一个词的预测结果;
- 重复第4步骤的任务,循环至整个内容生成完成;
备注:以上内容引用自《大模型应用开发极简入门》
第5讲:LLM大模型的分类有哪些?
1. 按照模态类型划分
按照模态划分,目前市面上的大模型,大概可以概括为文本生成模型(例如GPT3.5)、图像生成模型(例如DALL-E)、视频生成模型(例如Sora、可灵)、语音生成模型、多模态模型(例如GPT4.0)等;
2. 按照训练的阶段划分
按照训练的阶段可以划分为基础语言模型和指令微调的模型
- 基础语言模型(Basic Language Model) 基础语言模型是指只在大规模文本语料中进行了预训练的模型,未经过指令和下游任务微调、以及人类反馈等任何对齐优化,比如GPT3就是openai公开的基础语言模型;
- 指令微调模型(Instruction-Finetuned Language Model):这里的指令是指基于自然语言形式的对任务进行描述,经过指令微调的大模型,他们几乎都是在基础语言模型基础上进行指令微调、人类反馈、对齐等优化操作,例如GPT3.5就是在GPT3的基础上训练得到的;
3. 按照通用模型和行业模型划分
市面上的大模型也可以划分为通用大模型和行业大模型两类,通用大模型在广泛的任务和领域中虽然表现良好,但是某些行业或领域有特定的数据、术语和任务,通用大模型可能无法充分理解和利用这些领域特定的信息,因此不一定能解决特定行业和场景的问题;行业大模型则是基于通用大模型通过专门的训练和调整,行业大模型可以在特定领域内实现更高的性能和精度,它们能解决特定问题;
第6讲:LLM大模型的核心技术是什么?
该部分可能有比较多的技术术语,比较难理解,不过对于产品经理而言,我们可能不太需要去深究其技术细节,只需要知道其关键概念的能力即可,AI产品经理对于技术术语的理解是有必要的,这可以帮助自己在后续和研发和技术沟通的时候降低沟通难度;
1. 模型架构:关于Transformer架构,前面已经有比较多的描述,这里便不赘述了,但是Transformer架构是大模型最基础的核心技术之一;
2. 预训练与微调
- 预训练(Pre-training):基于大规模无标注数据进行预训练,是大语言模型的关键技术之一,预训练技术的出现,让模型的需求,再也不需要基于大量的标注数据,这极大的降低了人工标注数据的成本;
- 微调(Fine-tuning):微调技术,是进一步使用大模型的技术,预训练后的模型在处理特定任务的时候表现比较一般,所以需要再特定的数据集上进行微调,以适应具体的应用,微调可以显著提升模型在特定任务上的表现。
3.模型压缩与加速
- 模型剪枝(Pruning):通过剪除不重要的参数,可以减少模型大小和计算复杂度;
- 知识蒸馏(Knowledge Distillation):训练一个较小的学生模型,使其模仿大模型(教师模型)的行为,从而保留大部分性能的同时减少计算开销。
第7讲:大模型开发的6个步骤
根据OpenAI公布的相关信息,大模型的开发,通常会经过如下6个步骤,基本上,目前这套流程应该也是行业内大部分大模型的开发的过程:
- 数据收集与处理:这个阶段,需要收集大量文本数据,这可能包括书籍、网页、文章等,然后对数据做清洗,移除无关或低质量的内容,然后对数据进行预处理,如分词、去除敏感信息等。
- 模型设计:确定模型的架构,比如GPT-4采用的是ransformer架构,然后设定模型的大小,包括层数、隐藏单元数、参数总量等。
- 预训练(Pre-training):模型在这个阶段就像一个学生在上学,通过阅读大量书籍(比如网页、文章等)来学习语言和知识。或者说像一个“海绵”,吸收尽可能多的信息,学会基本的语言规则,比如怎样组成一个句子,单词之间是怎样关联的等。此时的模型模型已经能理解基本的语言结构,但还没有针对特定任务的专业知识;预训练阶段通常需要的数据量非常大,对计算资源的消耗也最大,花费的时间最长;以GPT3为例,完成一次预训练的计算量是3640P浮点计算,需要将近1000块GPU;
- 指令微调(Fine-tuning with Instructions):也称为有监督微调,微调的过程其实就是通过投喂给模型一些带有问题和相应理想输出的问答对数据,在此基础上进行再训练,从而得到一个有监督微调模型;这个阶段的模型更像是在进行“职业培训”,学习如何根据特定的指令或任务来调整自己的反应,模型可能会在这个阶段学习如何更好地回答问题、写作或做翻译,对特定类型的问题或任务也有更好的表现。指令微调阶段只要提供相对少数的高质量的数据,模型的训练时间和消耗相对比较小;
- 奖励(Reward):这个阶段就像给模型设置了一个“激励机制”,通过奖励来让模型知道什么是好的回答或行为,通过这种方式,模型学会了更好地满足用户的需求,从而让模型更加专注于提供有价值、准确的回答,能够更好地适应用户的具体需求;这个过程需要训练模型的人员大量的对模型的响应结果做检测和反馈,逐步的调整其响应的质量,该过程也需要相对较高的数据,需要的时间为天级别;
- 强化学习(Reinforcement Learning):最后这个阶段,模型就像在进行“实战演习”,通过不断的尝试和错误来学习怎样做得更好,在这个阶段,模型会在真实世界的复杂情境中尝试各种策略,找出最有效的方法。模型在这个阶段变得更加聪明和灵活,能够在复杂和不确定的情况下做出更好的判断和回答。
第8讲:如何理解大模型的训练和微调?
1. 理解大模型训练相关内容
1)大模型训练需要哪些数据?
- 文本数据:主要用于训练语言模型,如新闻文章、书籍、社交媒体帖子、维基百科等。
- 结构化数据:如知识图谱,用于增强语言模型的知识。
- 半结构化数据:如XML、JSON格式的数据,便于提取信息。
2)训练数据来源
- 公开数据集:如Common Crawl、Wikipedia、OpenWebText等。
- 专有数据:公司内部数据或付费获取的专有数据。
- 用户生成内容:社交媒体、论坛、评论等用户生成的内容。
- 合成数据:通过生成对抗网络(GAN)或其他生成模型合成的数据。
3)大模型训练需要哪些成本?
- 计算资源:GPU/TPU的使用成本,主要取决于模型的规模和训练时间。大模型通常需要数千到数万小时的GPU计算时间。
- 存储成本:用于存储大规模数据集和模型权重。数据集和模型文件可以达到TB级别。
- 数据获取成本:购买专有数据或数据清洗和标注的人工成本。
- 能源成本:训练大型模型消耗大量电力,增加运营成本。
- 研发成本:包括研究人员、工程师的薪资,以及开发和维护模型的费用。
2. 理解大模型微调相关内容
1. 大模型微调的2个阶段:监督微调(SFT)、强化学习(RLHF),两个阶段存在的差异如下:
2)大模型微调的2种方式:lora微调,SFT微调
目前模型的微调方式有2种,一种是lora微调,一种是SFT微调,这两种方式的区别在于:
- Lora微调的方式,是对模型的部分参数做微调,不需要微调整个模型,适用于资源有限,或者定向聚焦的微调场景,让模型具备解决单一场景任务;
- SFT微调的方式,是对模型的所有参数做微调,微调整个模型,使得模型能够解决更多的特定任务;
第9讲:影响大模型的表现的主要因素是什么?
大家都知道,市面上虽然后很多的大模型,但是不同模型之间的成立差异是存在的,像openai的模型,在行业内占据领先地位,为什么大模型之间会存在能力差异,具体影响大型模型表现的五个最重要的因素如下:
- 模型架构:模型的设计,包括层数、隐藏单元的数量和参数总数,对其能力进行复杂任务处理有着显著影响。
- 训练数据的质量和数量:模型性能极大地依赖于其训练数据的覆盖范围和多样性,高质量和广泛的数据集有助于模型更准确地理解和生成语言,目前大部分模型主要还是使用公开的数据为主,拥有更丰富的优质的数据资源的公司,将拥有更优越的优势;对于国内而言,目前不利的因素是开源数据集中主要以英文数据集为主,中文数据集相对较少;
- 参数规模:参数越多,模型通常能够更好地学习和捕捉复杂的数据模式,但同时也增加了计算成本,因此拥有强大的算力资源的企业,将拥有更高的优势,对于算力,核心取决于计算量(GPU的数量)、网络、存储三个维度的情况;
- 算法效率:训练和优化模型所使用的算法,比如优化器的选择和学习速率调整,对模型的学习效率和最终性能有重要影响。
- 训练次数:确保模型有足够的训练次数以达到最优性能,同时避免过度训练导致的过拟合问题。
第10讲:如何衡量大模型的好坏?
从大模型的应用端的角度上看,如何去衡量一个大模型的好坏,其评估的框架是什么样的,通过这部分,你可以大概知道,市面上的测评机构,都是从哪些维度,去评估大模型的能力的,同时,如果你面临大模型的选型问题的时候,应该如何去选择,建立自己的判断体系;
在阅读和参考了多个关于大模型衡量的参考文献之后,个人将大模型的评估维度概括为3个方面:
- 应用层产品表现;
- 大模型基础能力;
- 安全和合规情况;
完整的评估体系,通过一张图概括如下:
1. 如何衡量大模型的产品表现能力
通常衡量一个大模型的产品表现能力,主要从如下几个维度去评估:
1)语义理解能力:语义理解能力首先包括语义、语法、语境这几个基础维度,它基本决定了你能否正常和模型对话,以及模型说的是不是人话;特别是中文语义理解能力;再者就是除了中文理解之外,能否支持多语言理解能力;
2)逻辑推理:包括模型的推理思考能力、数值计算能力和上下文理解能力,这是大模型最核心的能力之一,直接决定的模型的聪明程度;
3)生成内容准确性:包括幻觉的情况和陷阱识别的能力
4)幻觉率:其中包括模型回复内容和结果的准确性,有的时候模型会胡说八道,而你还信以为真,这就很坑爹;
5)陷阱信息识别率:所以侧面的我们也会看模型对于陷阱信息的识别和处理能力,识别人力差的模型,经常会出现你给了一些错误的信息,然后模型基于错误信息前提还侃侃而谈;
6)生成内容质量:在保证生成内容真实准确的前提下,衡量生成质量的维度包括:
- 生成内容的多样性:是否能支持多样、多角度内容的输出;
- 专业度:垂直场景能否输出专业内容;
- 创造性:生成内容是否有足够的创造性;
- 时效性:生成结果的更新时效;
7)上下文记忆的能力:代表模型的记忆能力和上下文窗口长度;
8)模型性能情况:包括回复速度、资源消耗、鲁棒性和稳定性(针对异常和未知信息的处理能力及可靠性);
9)拟人性:这个维度就是评估模型是不是真的”通人性“,达到智能的程度,其中包括情感分析的能力;
10)多模态能力:最后则是看模型在跨模态处理和生成上的能力,包括文本、图片、视频、语音等;
2. 如何衡量大模型的基础能力
大家都知道衡量大模型的基础能力最重要的3个要素是:算法、算力、数据;更具体一点,则主要包括如下几部分:
- 参数规模:衡量算法强大程度的维度可能比较多,简单一点我们就通过参数规模来衡量,参数规模是衡量一个模型的复杂度和能力的量化指标,参数规模越多,代表模型能支持越复杂问题的处理,可以考虑的维度更多,简单讲就是越强;
- 数据量级:模型是运行在数据基础上的,模型背后的数据量级越大,模型的表现可能越好;
- 数据质量:数据质量包括数据本身的价值,以及业务对数据的清洗情况;数据本身在质量是有层级的,比如用户消费的数据就是比用户普通社会属性信息价值更高,数据的价值越高,模型的表现效果越好;其次是业务对数据的清洗情况,这个体现在数据的标签化的精细度等方面;
- 训练次数:模型的训练次数越多,代表模型的经验更丰富,表现越好;
3. 如何评估模型的安全性
除了对大模型的能力考量之外,大家也非常重视模型的安全性的考量,因为即使能力再强,安全问题没有得到很好的解决,大模型也无法迅速发展,我们主要从如下几个维度评估模型的安全性:
- 内容安全性:包括生成内容是否符合安全管理规范、社会规范、法律规范等;
- 伦理道道规范:包括生成内容是否包含偏见和歧视,是否符合社会价值观和伦理道道等;
- 隐私保护和版权保护:包括对个人隐私、企业隐私的包括,以及是否遵守版权保护法要求;
第11讲:大模型的局限性有哪些?
1. “幻觉”问题
幻觉问题指的是模型生成看似合理但实际上是错误或虚构的信息。在自然语言处理中,这可能表现为模型生成的文本或回答在表面上看起来合理,但实际上却缺乏真实性或准确性;从目前大模型的表现看,幻觉问题,是大部分用户对于大模型应用产生质疑,以及大模型生成结果难以直接使用的主要原因之一,目前也是较难解决的问题;对于AI应用层而言,也是最头疼的问题;
大模型为什么会出现幻觉的情况?主要来源于如下几个原因:
- 过拟合训练数据:模型在训练时可能过度拟合了训练数据中的噪声或错误信息,导致模型在生成时产生虚构的内容。
- 训练数据本身包含虚假信息:如果训练数据中未能充分覆盖各种真实场景,模型可能会在未见过的情况下产生虚构的信息。
- 对信息可信度的不足考虑:模型未能有效地考虑生成信息的可信度,而是过于自信地产生表面上合理但实际上虚构的内容。
是否有缓解幻觉问题的解决方案?目前看,可能能通过如下几个方式缓解幻觉问题,至于根本性的解决,目前行业似乎并没有看到特别好的方法:
- 使用更丰富的训练数据:引入更多多样性和真实性的训练数据,以减少模型过度拟合错误信息的可能性。
- 信息可信度建模,增加鉴伪机制:引入模型组件来估计生成信息的可信度,以过滤或降低虚构信息的生成概率;
- 外部验证机制:使用外部的验证机制或信息源来验证模型生成的内容,确保其与真实世界一致。
2. “失忆”问题
失忆问题是指模型在长对话或复杂语境中可能遗忘先前提到的信息,导致生成的内容缺乏一致性和上下文完整性;导致失忆的主要原因包括:
- 模型上下文记忆限制:模型可能受到上下文记忆能力的限制,无法有效地保持和利用长期依赖的信息。
- 训练数据中的缺失信息:如果训练数据中缺乏长对话或复杂语境的例子,模型可能未能学到正确的信息保持和检索方法。
- 对话偏移:在长对话中,模型可能逐渐偏离初始话题,导致遗忘先前提到的关键信息。
目前行业内似乎对于失忆问题,已经可以有一定的缓解,据了解,相应的解决方法包括:
- 增加上下文长度,从而提升记忆容量:通过持续的提升大模型的记忆长度,从而提高模型对长期信息的保持和检索能力。
- 多样性训练数据:引入更多包含长对话和复杂语境的训练数据,使模型能够学到更好的信息管理策略。
- 对话管理技术:引入先进的对话管理技术,确保模型在长对话中能够保持一致性,并有效地利用先前提到的信息。
3. “生成不当内容”问题
生成不当内容问题指的是模型在生成文本时可能产生不适当、有害或歧视性的内容,引发道德和社会责任问题。导致失忆的主要原因包括:
- 训练数据中的偏见:模型可能在训练数据中学到了不适当的观点、偏见或刻板印象,导致生成不当内容。
- 过度拟合负面样本:如果训练数据中包含大量负面样本,模型可能过度拟合这些负面情况,导致生成负面内容的可能性增加。
- 缺乏伦理约束:模型训练时未考虑伦理和社会责任问题,缺乏对不适当内容的抑制;
对于以上的关于生成内容的安全、伦理、道德等相关的问题,目前国内大部分的厂商似乎也得到了一定的解决,包括对模型的输入和输出内容经过安全引擎做过滤和处理,避免了对用户直接输出不恰当的内容;
4. 难以解决专业问题和垂直场景问题
尽管大模型在许多领域表现出色,但是他更像是一个什么都会的通才,在特定领域的表现可能不佳,特别是在需要专业知识和细致推理的任务中,大模型可能无法提供最佳解决方案;当然这个问题,市面上存在较多解决方案可以解决该问题,包括训练和微调行业大模型、包括结合工作流和思维链的Agent设计、抑或是最简单的通过提示词工程解决;
至此,对于入门阶段对大模型的认知和理解,我先分享到这里,后续我将单独输出一篇“大模型20讲,从产品经理的角度看大模型”,从我自己的角度深度理解大模型
5. “复读机”问题
复读机问题是指在大语言模型在面对相同或相似的问题时,产生与先前看到的答案相似或重复的输出,这使得模型似乎陷入了一种“复读机”式的行为;导致模型复读机问题的原因主要包括如下:
- 训练和微调的数据太少,导致生成结果的多样性缺乏,导致高频生成重复内容,这个问题的主要原因之一是训练数据的偏见和重复性。大型语言模型通常是在互联网上大规模爬取的文本数据集上进行训练的,而这些数据中存在大量的重复和偏见。模型通过学习这些数据的统计规律,往往会倾向于生成频繁出现的模式和答案。
- 记忆长度限制和上下文长度限制,导致模型出现遗忘,从而出现重复;
- 训练和微调阶段导致过度拟合,导致模型泛化能力缺失;
- 温度参数过低,导致模型倾向选择生成概率较高的内容,从而导致重复;
解决复读机问题的主要包括引入更多多样化的训练数据,增加上下文长度和记忆长度,以及通过调整温度参数等提高创造性;
第12讲:如何理解大模型需要的训练数据?
1. 训练数据对大模型发展的重要性
前面提到过,算法、算力、数据是大模型发展的三大基石,高质量、更丰富的数据是大模型的关键驱动力,以GPT为例,GPT1到GPT4的模型架构上其实基本相似,但是训练数据的情况却大有不同,带来明显不同的模型能力:
- GPT1 用的是4.8G没有过滤的原始数据;
- GPT2 用的是人工过滤过的40G训练数据;
- GPT3 用的是从45T原始数据中过滤出来的570G训练数据;
- GPT4 在GPT3的技术上诸如了更多高质量的人类标注数据;
2. 训练大语言模型的数据要求
1)不同阶段需要的数据要求不同
大语言模型所需要的数据内容与质量将根据训练的阶段有所不同,包括预训练(Pre-training)、监督微调(SFT)、基于人类反馈的强化学习(RLHF)三个阶段,三个阶段分别需要的语料特征可以概括为“广”、“齐”和“专”。
2)训练多模态模型的数据
多模态模型则模拟人类大脑处理信息的方式,把各种感知模态结合起来,以更全面、综合的方式理解和生成信息,其在训练阶段更多地需要大量图像-文本对、视频-文本对等有标注数据集。
3)训练数据的来源
基于开源数据集:开源数据集是其中一个方案,但是目前的开源数据集中,中文数据的规模比较少,并且开源数据集也需要经过过滤处理才能真正使用;
合成数据:根据是否基于实际数据集生成,合成数据生成方法主要分为基于真实数据集构建,和通过使用现有模型或者人类专业背景知识来创建等两类;
4)中美训练数据的现状差异
美国的现状:
美国在获取大模型数据方面的现状体现了政府与社会力量的紧密合作。美国联邦政府发挥了AI训练数据“汇聚融合”的角色,而美国社会力量则整合了政府数据与网络公开数据,并形成高质量训练语料。
中国的现状:
目前国内的数据发展情况相比美国还有一些差距,一方面我国尚未形成对大模型提供有效供给的数据资源生态;其次我国的公共数据覆盖范围比美国更广,但在开放共享和开发利用程度上仍有不足;再者,我国的数据资源主要通过结合海外优质开源数据集翻译为中文语料,产出训练数据集;
第13讲:大模型应用的三种方式:提示词工程、RAG、微调
1. 如何理解这三种方式的区别?
对于将大模型应用于具体的应用场景的时候,为了让大模型能更好的解决你的应用问题,除了训练一个单独的大模型,目前可以支持3种成本相对更低的方式:
- 提示词工程
- RAG增强检索生成
- 微调
怎么理解这三种方式,具体形象的例子,模型有的时候回答质量一般可能会存在如下几个原因:
- 用户没有把问题问清楚,模型自然无法很好的回答用户的问题;
- 模型具备解决这个问题的能力,但是缺乏该领域的相关信息的知识,给相关的信息和知识,就可以很好的解答问题;
- 模型不具备解决该问题的技能,需要接受一些技能培训,提升自己的技能;
提示词工程就相当于解决第一个问题,让用户的问题问的更清楚;RAG则是通过检索输入一些专业的知识和信息,帮助模型解决问题;微调则相当于提升模型自身的能力,让模型通过一些技能培训具体解决该专业问题的能力;
2. 如何选择合适的方式?
那么这三种方式,到底选择什么方式比较合适,这个主要要根据具体的业务情况:
第一,个人觉得如果能通过提示词解决的,肯定第一优先级用提示词工程的方式解决
这个是实现成本最低的方式,并且有的时候,只是提示词的优化,便能带来很好的效果改善,其优化效果甚至由于微调和RAG;但是提示词存在的局限在于一旦提示词太长,超过模型的上下文的时候,模型会出现混乱的情况,或者不理解提示词内容的问题,会影响效果;
至于RAG和微调,到底用什么方式,可以基于如下几个考量因素具体评估:
- 从数据实时性的角度:如果需要使用比较多实时性的数据,最好的方式是使用RAG,微调要求在模型准备阶段提前提供数据,在时效性方面肯定是无法保障的,而RAG可以提供比较实时的数据;
- 从成本的角度:RAG的实现成本是相对更低的,微调的成本更高;
- 从可解释性的角度:RAG的可解释性更高,可以追溯到参考依据和来源,微调是一个黑盒,充满了不可解释性;
- 从幻觉优化效果的角度:RAG和微调对于缓解幻觉效果方面都是有帮助的,但是RAG在应对幻觉方面是更好的,微调的效果会相对差一些;
- 从模型的通用能力的角度:如果你想尽可能的保证模型解决通用问题的能力,采用RAG的方式也更好,因为微调会导致模型的能力受限,可能在解决一些专业问题上的能力提升了,但是会损伤模型解决通用问题的能力,所以如果想要优先保证模型的通用能力,RAG的方式更合适;
- 从模型能力定制化的角度:想要让模型具备某一项特定的能力,比如表达的风格等,这个需要通过微调的方式实现;
- 从延迟的要求的角度:若对于应用相应的低延迟要求比较高,使用微调的方式是比较合适的,RAG的方式因为涉及检索和内容处理等流程,必然会导致整个处理的链路比较长,所以在实时性和延迟方面,是比较有损的;
第14讲:什么是提示词工程?
提示词工程是AI产品经理的必备技能,熟练的掌握提示词工程可以让你在优化自己的AI产品的时候获得更好的输出;此外,个人认为,未来的AI产品在面向普通用户端的时候,一定是弱化提示词的设计要求的,用户只需要一句简单的需求,就可以获得自己想要的效果,但是其背后的输出逻辑的设计是需要AI产品经理来设计的,而这一个背后的实现方式,其实概括起来就是“提示词+研发工程”,所以部分我们从概念到实操深度了解提示词工程;
1. 什么是提示词工程?
前面我们已经大概介绍了提示词工程是什么,简单一点讲,就是通过更好的设计提示词,让模型获得更好的输出结果,因此我们把利用不同的提示词策略优化大模型性能从而获得更好的生成结果的工程成为提示词工程;
2. 提示词工程对于AI产品经理为什么非常重要?
提示词工程是AI产品经理的入门必修课很多人可能会觉得,要让AI生成好的结果,可能需要给模型投喂更多的数据,或者训练微调一个专门解决该问题的模型出来,但是实际上目前通过有效的优化一下提示词,就可以获得原来需要微调才能做到的效果,因此提示词的优化是一种更低成本的方式,所以对于未来的AI产品应用的落地实现,首先应该先通过提示词设计来实现,然后再考虑通过研发工程弥补提示词做不到的事情;
产品经理未来的工作是封装工程,让用户直接获得结果短期而言,大模型对于提示词的依赖程度还是比较高,但是我们不能指望所有的用户都懂得设计提示词,产品经理的工作,是理解用户的需求之后,封装隐藏背后的实现工程,让用户直接获得结果,而封装工程的其中一部分就是提示词工程,然后才是传统的产品研发工程;
未来的产品经理是先向模型提需求,再向研发提需求我们都知道,产品经理的本质工作,是发现需求,然后设计解决需求的解决方案,和传统的互联网的产品经理的工作稍微不同的是,以前产品经理是向研发提需求,让研发实现,而未来产品经理的工作,是首先先向模型提需求获得解决方案,然后再向研发提需求;
3. 提示词工程可以/不可以解决哪些问题?
概括起来,提示词工程能够做的事情,就是通过提示词设计,诱导模型输出更好的结果,所以是充分的调用模型自身的能力;但是提示词无法解决大模型本身的局限性问题,包括模型无法联网检索、存在幻觉和失忆等问题;同时,提示词也受限于模型上下文长度的问题,面对一些输入较长的场景,提示词会失效,需要通过一些其他的方式解决,包括提示词的分拆等;
4. 如何更好的设计提示词?
1)提示词的组成部分
- 上下文(Context):提供与任务相关的背景信息,帮助模型理解任务的整体情况。
- 任务描述(Task Description):明确说明需要完成的任务,包括任务目标、模型扮演的角色、工作流等;
- 约束条件(Constraints):限定输出的范围或特征,例如字数限制、风格要求等。
- 示例(Examples):提供示例输入输出对,帮助模型更好地理解任务要求。
- 输出格式(Output Format):指定输出的格式或结构,例如要求输出列表、段落、对话等。
2)提示词设计案例
以下以我自己设计的一个用于自动针对某一个概念关键词,让AI生成提问问题,从而帮助自己加深对概念的认知的提示词设计,将该段提示词提交给ChatGPT类产品,便可执行AI程序,以下只是提供一个结构示范,具体的效果需要持续的调整提示词才能获得更好的输出;
## Profile
- Author: luzhuanghua
- Version: 0.1
- Language: 中文
- Description: 自动针对概念关键词设计提问框架
## 角色(role)
你现在是一个擅长通过提问学习的专家,你会为了了解某一个概念关键词而输出一个提问框架,帮助别人按照这个提问框架学习便可以系统的了解这个概念;
## 目标(target)
每当我给你一个关键词概念的时候,你需要帮助我建立一个快速理解关键词概念的提问框架,帮助我通过这个框架可以快速的理解一个关键词概念;
## 背景(context)
每当我想要了解一个陌生的概念的时候,我在梳理概念理解的框架的时候,需要花费很多的时间,现在我想要设计一个提示词可以快速的建立一个概念关键词的提问框架;
## 工作流(workflow)
执行这个工作,你需要按照2个步骤走:
第1步:提醒我输入我要输入的目标关键词,当我输入关键词之后,请执行下一步;
第2步:当我输入关键词之后,请你围绕该关键词,设计一个提问列表,这个列表是为了方便我理解这个关键词的概念而设计的;举个例子,当我输入”大模型“这个关键词的时候,请你帮我输出类似如下的问题列表:
1.什么是大模型?
2.大模型和传统的模型有什么区别?
3.大模型的特点是什么?
4.大模型的原理是什么?
5.大模型的核心技术是什么?
6.大模型有什么用?
第3步:请跟我确认问题框架是否有问题,当我回复你”没有问题“的时候,接下来往第4步走;
第4步:请你针对以上的问题框架做解答,生成具体的问题的答案,然后询问我是否满意,当我回复你”满意“的时候,我们回到第1步提醒我输入新的关键词,然后重新开始寻这个循环;
##约束条件
1.提问内容不要重复;
2.不要提问超出角色理解范围的内容;
## Initialization
请输入你想要了解的关键词概念
3)提示词设计的8个基本技巧
以下概括总结几个具体写提示词时需要遵守的基本原则,该部分也基本上是openai官方对外公开的对于提示词设计的建议:
- 提供清晰的指示:包括提供明确的目标、上下文背景、减少隐藏信息;
- 给模型一个角色设定并指定用户回答问题的口吻:让模型扮演一个专家、导师等等角色,这个对于回复质量会有很大的帮助,有利于改变回答内容的专业程度,也让模型了解对于回复内容,你的期望程度如何; 其次,引导模型用某种口吻回复,例如专家的口吻回答的内容和新闻发言人回答的内容,专业度自然是不一样的,通过引导口吻要求,可以让其撰写的内容更接近你想要的角色的语言;
- 提供获得答案的任务步骤:围绕着我们想要的目标结果,可以适当的给模型一些提示,告诉他获得你想要的答案需要经过几个步骤这个在一些涉及逻辑和计算的场景会很有用;有时模型会有自己的思路,得到的结果不一定是你想要的,告诉它你的思路,会让它生成的结果更接近你想要的;
- 提供参考案例、事实信息:给模型提供一些参考案例示范,可以让模型学习参考案例输出自己想要的内容要求;另外,模型有的时候回答的内容可能是并不准确的,如果我们能够提供一些信息输入和参考,有数据和信息依据,模型会回答的更好,比如最近发生的事件、真实的行业数据等等;
- 给模型一些反馈:对生成结果提供正反馈或负反馈,告诉模型你对生成的结果是否满意,这样有利于模型知道其思路是否正确,正向反馈会让模型回复质量越来越好;负向反馈也可以让模型及时纠正自己的思路;
- 提醒模型检查结果:经常提醒模型对回复的内容做检查,包括检查是否有遗漏、检查回复内容的准确性等等;一反面是让模型的回复内容更加的系统,另外一反面也避免模型一本正经的胡说八道;
- 多次重复提问:有的时候,模型因为不是非常确认你的问题,可能给你的不一定是你想要的,或者说不知道,但是通过重复的提问,并明确输出的内容,重复之后,模型反而会给你你想要的内容所以遇到模型答非所问的时候,重复几次问题,它会给你你想要的内容;
- 使用分隔符号,以及提示词参数:合理的使用分隔符号,可以让模型理解内容分隔,例如前面的提示词案例里面我们会用##等符号分割内容;其次,使用temperature(温度值)等参数调节输出内容的随机性和创意性等;
4)高阶提示词设计的策略
AI产品经历在设计提示词的时候,除了注意提示词设计的基本原则,也可以借鉴一些比较好的设计策略或设计思想,这是对提示词工程的高阶应用,以下总结几个行业内的高手分享过的一些提示词设计策略如下:
- 思维链策略:面对一些比较复杂、专业或者场景化的问题,模型可能没有办法一下子生成非常好的结果,通过让大模型不要急于一次性的完成整个任务,而是一步步的通过分解,推理来完成任务,可以很好的解决这个问题,这就是Chain of Thought(思维链),简称COT,它能够使大型语言模型解决算术推理(arithmetic Arithmetic)、常识推理(commonsense Reasoning)和符号推理( symbolic reasoning)等类型的复杂任务。事实上,除了自己提供拆解步骤,让模型在生成之前先思考解决的问题的任务拆解和步骤也非常管用,甚至最简单的,在提示词中增加prompt片段“Let’s think step by step” 也能够强制大模型生成推理步骤!
- 类比推理策略,让大模型自己生成参考示例和知识:我们都知道,想要让大模型生成出符合自己需求的内容,一个比较好的方式是提供一个参考范例给模型,让它知道你想要的是什么并以此类比,但是有的时候提供范例本身就比较困难,因此我们可以切换一下思路,让大模型自己生成与之相似的例子,同时从这些例子中总结生成的经验和方法,然后通过它自己总结的方法再次生成;在研究中也发现,让大模型生成示例并不是越多越好,数量为3或者5是一个最佳的数量。
- 自一致性思维链策略:另一种提升生成结果质量的策略是让模型生成多个方案,最后根据多次输出进行加权投票(模型自行投票)的方式选择一种最靠谱的答案。相较于普通COT,由于大模型生成的随机性本质,并不能保证每一次生成都是正确的,如何提高其鲁棒性,提升其准确率,成了一个大问题。比如:文心一言在回答刚才题目时,第一次回答结果就是错误的。但多生成了几次,文心一言就回答出了正确答案。基于这样的思路,研究者提出了自一致COT的概念, 利用”自一致性”(self-consistency)的解码策略,以取代在思维链提示中使用的贪婪解码策略,也就是说让大模型通过多种方式去生产答案, 这种策略存在一个明显的缺陷就是太慢且耗费资源,因为要生成多套方案,意味着完成一项生成任务需要生成多套方案;
- 拆解子问题然后逐一解决策略:在解决复杂问题时,先引导模型把问题拆分成多个子问题;然后再让大模型逐一解决子问题,并把子问题的回答作为下一个问题回答的上文,直到给出最终答案,这是一种先拆解问题,然后每个子问题独立解决的策略;与前面第一点思维链策略不同的是,思维链策略拆解步骤之后,一次性按照步骤逐一生成,只完成1次执行任务;但是拆解子问题的策略是把每个子问题当成1次执行任务,分多个任务依次执行,最后生成完整的结果;就好像很多人写文章,AI一次性生成的结果可能没法让自己满意,但是拆分大纲之后,对每个模块单独生成,最后拼凑成一篇文章;这种策略的复杂之处在于需要定义每一个子问题的处理细节,需要投入的研究精力比较多,并且提示词会非常长,但是生成的结果必然会更好;
- 元提示策略:这个是最偷懒的策略,连提示词都不自己写,让大模型帮忙写提示词,用大模型提供的提示词生成;
- 知识生成增强策略:这个策略的核心思想是,在解决具体的问题之前,先让模型生成解决该问题需要的知识,建立好支持储备之后,让模型做更有针对性的问答;
产品经理在设计提示词的时候,可以综合以上多种策略思路,尝试调整和优化自己的提示词;
5)不断的尝试和调试提示词,才是发掘提示词工程和经验的关键
虽然前面我们分享了很多关于提示词工程相关的策略和技巧,不过从个人实践下来,并不是所有的技巧和策略均百分百有效,目前我们通过提示词对大模型能力的探索,还存在非常多的未知和随机,有的时候很多你头疼不已的难题,可能只是在不经意间的一个小调整,哪怕是修改了一个符号,问题就被莫名其妙的解决了,所以我们常常觉得,大模型的能力是个充满神秘的未知领域,需要自己在实践中多尝试和摸索,可能就又会发现更多的新的技巧和经验;
其次就是需要耐心,调整提示词的过程挺枯燥的,不要一下子获取不到目标结果就放弃,多尝试一些思路,耐心调试,才能获得想要的效果;
第15讲:什么是RAG?
1. 从产品经理的视角理解RAG
RAG的全称是「Retrieval-Augmented Generation」,检索增强生成,现在是生成式AI问答中非常常见的一种技术,包括应该于AI搜索、基于知识库的对话问答等;
RAG实现检索问答的整个过程和原理如下,我们以用户输入的查询为:“奥运会历史背景是什么,2024年巴黎奥运会在哪里举办?”这个问题为例:
- 用户问题输入:当用户输入问题的时候,首先技术层面需要将问题通过embedding算法转换成一个模型可以理解的向量,这个过程称为向量化;
- 信息检索:获得用户的输入之后,首先需要结合这个问题,从向量数据库(向量数据库存储了很多检索需要的内容,这些内容包括来自提前准备好的文档、网页等内容通过向量化处理后,以模型能理解的向量存储起来)中获取跟这个问题相关的一些段落信息,例如基于这个问题,可能我们能够获得的相关片段如下:片段1(奥运会的历史背景相关段落描述)、片段2(巴黎奥运会相关的段落文本描述);其中,信息检索使用的向量数据库,其背后搭建的过程如下:
- 构建知识库:知识库的内容可能包括文档、网页、视频、音频、图片等等所有相关的资料,这些资料可以是业务自己收集整理自建的知识库,也可以是实时联网检索获取的;
- 内容提取和切割分段:业务自己构建的这些资料,需要通过内容识别提取出其中的内容,必要的话还可以将内容结构化,然后将内容切割分段处理;
- 向量化:切割分段后的内容,通过embedding算法做向量化处理之后,存储到向量数据库中;
- 将检索到的片段和问题合并,形成一个Prompt(提示词):检索获得的片段会作为提示词的context字段,用户的问题会作为query信息,将两者合并之后,就可以形成一个Prompt(提示词);
- 将提示词内容交给大模型,通过大模型执行问答:大模型接收到相应的提示词内容之后,根据提示词要求,根据用户的query,从context内容中,找到相应的答案,并且通过自然语言的方式输出回答结果;
2. RAG实操的过程中会遇到的具体问题
用户输入问题环节:需要对用户的问题做进一步的信息补充和改写,让用户的问题更加的清晰和详细;
把问题补充的更清晰:因为用户提交问题的时候,事实上是可能存在很多隐藏信息没有被写出来的,大模型不一定能够理解背后的隐藏信息,所以需要产品经理或者技术,将其中的隐藏信息提现到提交给模型的问题上;通常这可能需要一个类似于意图识别的模型来完整的实现该能力,其中包括,通过获取用户的画像标签,并结合问题和上下文,推测用户问题背后的目的和用途,或者控制输出内容的专业程度,又或者是设计输出的角色和口吻等;举个例子,比如一个用户输入的问题是”北京有什么好玩的?“这个问题:可以理解用户目前可能是一个旅客,要去北京旅游,需要的可能是一份北京的旅游攻略,并且结合其用户画像比如可能是个学生,因此其消费力可能不一定很强,需要一些性价比高的攻略,可以以导游的身份输出相关的内容;由此最后我们梳理给模型的更加完整的问题可能是”用户是一个学生,目前要去北京旅游,需要输出一份北京的旅游攻略,这个旅游攻略需要比较有性价比,用户的消费力可能不太强,你的输出方式需要以一个耐心的导游的方式,输出一个完整的旅游攻略“
对问题做联想扩充:其次,用户有的时候可能只是问了一个问题,但是其背后可能是想要了解更多的内容,所以我们需要对问题做扩充,尽量给用户完整的答案,既能回答用户在提问的问题,又能回答用户想问但是没有写清楚的问题,而不是傻瓜式的问啥的就回答啥;例如前面的问题,用户问的是”北京有什么好玩的?“其背后可能想要了解北京的吃喝玩乐的所有内容,而不是只有”玩“,我们需要帮用户把问题扩充;
对检索结果的筛选:基于用户的问题搜索的结果,我们可能需要对其做一层筛选和排序,选择有限的一部分内容,而不是把所有的结果都呈现给用户,这个过程称为ranking的过程,该过程主要涉及到检索结果的排序算法;
搜索结果的内容识别、提取、分段:检索结果可能包含PDF等格式的文档、网页等,我们需要识别和提取其中的内容,其中识别和提取内容可能涉及的技术包括OCR、文档结构化、大模型自身的识别能力等技术;提取之后,需要对内容做分段处理,因为大模型上下文长度的限制,我们不可能一下子把所有的内容都提交给模型,这里涉及到一些分段的方式和算法;
提示词的设计:结合前面的问题整理,还有检索的结果,我们需要设计一个好的提示词出来,因为好的提示词会获得好的输出结果;
模型的微调:最后将提示词交给模型的时候,可能需要通过一个微调的模型来完成结果的输出,当然不微调,只使用GPT4.0等现成的模型,也可以,只是可能一些专业问题,处理效果不太好;
结尾
OK,以上即为我关于大模型的系统化的理解,希望能帮到大家。