大语言模型开启了应用元年,各行各业各信息化公司均在探索相关的技术及应用场景,整体架构如下:
一、语言模型的发展历程
语言模型旨在对于人类语言的内在规律进行建模,从而准确预测词序列中未来(或缺失)词或词元(Token)的概率,主要分为四个阶段:
1.统计语言模型
根据词序列中若干个连续的上下文单词来预测下一个词的出现概率,即根据一个固定长度的前缀来预测目标单词。广泛应用于信息检索和自然语言处理等领域的早期研究工作。
2.神经语言模型
使用神经网络来建模文本序列的生成,用于文本表示学习,在自然语言处理领域产生了重要影响。
3.预训练语言模型
自注意力机制(Self-Attention)的Transformer模型,通过自注意力机制建模长程序列关系,进一步扩展预训练语言模型BRET,通过在大模型无标注数据上使用专门设计的预训练任务来学习双向语言模型。Transformer模型的可扩展性非常强,对于硬件并行优化的支持也比较友好。编码器架构被认为更适合去解决自然语言理解任务(如完形填空等),而解码器架构更适合解决自然语言生成任务(如文本摘要等)。预训练旨在通过大模型无标注文本建立模型的基础能力,而微调阶段则使用有标注数据对于模型进行特定任务的适配,从而更好地解决下游的自然语言处理任务。
4.大语言模型
通过规模扩展(如增加模型参数规模或数据规模)通常会带来下游任务的模型性能提升,大模型具备小模型不具有的“涌现能力”。
早期的语言模型主要面向自然语言的建模和生成任务,以信息检索、文本分类、语言识别等任务为主,而最新的语言模型则侧重于复杂任务的求解,能够不再依靠下游任务数据的微调进行通用任务的求解。
数据工程主要包括三个方面:首先,需要对于数据进行全面的采集,拓宽高质量的数据来源;其次,需要对收集到的数据进行精细的清洗,尽量提升用于大模型训练的数据质量;第三,需要设计有效的数据配比与数据课程,加强模型对于数据语义信息的利用效率。
二、数据准备
1.通用文本数据
绝大多数的大语言模型都选用了网页、书籍和对话文本等通用语料作为预训练数据,现有大语言模型预训练数据中各种数据来源的比例分布如下图所示:
2.专用文本数据
专用数据集有助于提升大语言模型解决特定下游任务的能力,一般包括多语文本、科学文本、代码。预训练数据预处理流程如下:
三、模型架构
Transformer是由多层的多头自注意力(Multi-head Self-attention)模块堆叠而成的神经网络模型。原始的Transformer模型由编码器和解码器两个部分构成,如下图所示:
四、模型预训练
在进行模型的大规模预训练时,需要设计合适的自监督预训练任务,使得模型能够从海量无标注数据中学习到广泛的语义知识与世界知识,分为三类,包括语言建模、去噪自编码以及混合去噪器。
1.语言建模
语言建模任务是绝大部分大语言模型广泛采用的预训练任务,核心在于“预测下一个词元”,并且经常被用于训练基于解码器的大语言模型。
2.去噪自编码
去噪自编码任务是另一种常见的语言模型预训练任务,输入文本经过一系列随机替换或删除操作,形成损坏的文本,模型的目标是根据这些损坏的文本恢复出被替换或删除的词元片段。
语言建模和去噪自编码的输入输出对比如下:
3.混合去噪器
混合去噪器,又称UL2损失,通过将语言建模和去噪自编码的目标均视为不同类型的去噪任务,对于预训练任务进行了统一建模。
五、指令微调
指令微调是指使用自然语言形式的数据对预训练后的大语言模型进行参数微调。一个经过指令格式化的数据实例包括任务描述(也称为指令)、任务输入-任务输出以及可选的示例。3种构建格式化指令数据的方法:
基于现有的NLP任务数据集构建
基于日常对话数据构建
基于合成数据构建
LoRA微调示意图:
六、人类对齐
大语言模型在下游任务中表现出优秀的性能,但有时会出现错误或具有危害性的行为,例如无法正确遵循指令、生成虚假信息、以及产生有害、有误导性以及带有偏见的表达。在大语言模型的预训练和有监督微调的过程中,主要训练目标是根据上下文内容来预测下一个词元。但这一过程并未充分考虑人类的价值观或偏好,可能导致大语言模型从数据中学习到不符合人类期望的生成模式。为规避这些潜在风险,提出了“人类对齐”的概念,旨在保证大语言模型的行为与人类期望和价值观相一致。
对齐标准:有用性、诚实性、无害性。
基于人类反馈的强化学习的工作流程如下:
基于人类反馈的强化学习旨在利用收集到的人类反馈数据指导大语言模型进行微调,从而使得大语言模型在多个标准(例如有用性、诚实性和无害性)上实现与人类的对齐。RLHF首先需要收集人类对于不同模型输出的偏好,然后使用收集到的人类反馈数据训练奖励模型,最后基于奖励模型使用强化学习算法(如Proximal Policy Optimization,PPO)微调大语言模型。PPO在策略模型和奖励模型的基础上,还引入了参考模型和评价模型。
七、提示学习
经过预训练、指令微调和人类对齐后,则通过提示学习方法来有效地使用大语言模型解决实际任务。任务提示的设计主要依靠人工设计和自动优化两种策略来实现。
1.人工提示设计
针对特定任务设计合适的任务提示,被称为“提示工程”(Prompt Engineering)。提示设计,考虑四个关键要素,即任务描述、输入数据、上下文信息和提示策略。
(1)任务描述
展示了大语言模型应当遵循的具体指令,即用清晰的、具体的表达来描述任务目标,某些特定任务还需要对于输入或输出的格式进行更详细的说明,可以使用关键词或特殊符号来强调特殊设置以指导大语言模型更好地完成任务。如下:
(a)知识问答的任务描述:请使用所提供的以三个井号(###)分隔的文章回答问题。如果在文章中找不到答案,请回答“无法找到答案。”
(b)代码补全的任务描述:你是一名程序员。给你一个代码片段,你的目标是完成这段代码,确保它能实现描述的功能。
(c)对话推荐的任务描述:推荐10个符合用户偏好的商品。推荐列表可以包含对话框之前提到的商品。推荐列表的格式为“商品ID标题(年份)。请勿在推荐列表中提及商品标题以外的任何内容。
(2)输入数据
用户可能直接使用自然语言描述输入数据的内容。对于特殊形式的输入数据,则需要采用合适的方法使其能够被大语言模型读取与理解。如对于结构化数据(如知识图谱、表格等),通过使用线性化方法将其转换为易于处理的文本序列。
(a)线性化后的表格数据:
###学号 姓名 成绩#01278 张三 89.0#03813 李四 92.5#06714 王五 79.0###
(b)代码格式的图数据:
Graph[name="Knowledge-Graph"]{
entity_list=["James Cameron","Ontarion",…],
triple_list=[("James Cameron"->"ontario")[relation="born in"],…],
}
(3)上下文信息
上下文信息对某些特定任务也非常重要。如搜索引擎可以为开放问答任务提供参考文档,可以通过将检索到的参考文档以上下文信息的形式引入提示作为大语言模型的输入。在引入外部信息时,需要对于这些信息进行合适的格式化,以加强大模型对它们的利用。大模型可以通过这些示例数据学习任务目标、输出格式以及输入和输出之间的映射关系。
(a)基于任务示例回答问题:
示例问题:罗杰有5个网球,他又买了2罐网球,每罐有3个网球。他现在有多少个网球?
示例回答:罗杰一开始有5个球,2罐每罐3个网球就是6个网球。5+6=11。答案是11。
用户输入:袋子里有16个球,其中一半是高尔夫球,并且所有高尔夫球中有一半是蓝色的球。请问有多少个蓝色高尔夫球?
模型输出:袋子里有16个球,其中一半是高尔夫球。因此有16/2=8个高尔夫球。一半的高尔夫球是蓝色的。因此有8/2=4个蓝色高尔夫球。答案是4。
(4)提示策略
针对不同的大语言模型设计合适的提示策略对于激发模型解决特定任务的能力非常重要。在某些情况下,添加特定的前缀或后缀有助于引导大模型解决复杂任务。如使用前缀”让我们一步一步地思考“可以激发大模型逐步推理能力,使用前缀”你是这项任务(或领域)的专家“可以提高大模型在特定任务(或领域)中的表现。此外,对于对话式的大模型,由于使用了大量对话数据进行训练,因此更合适的做法是将提示拆分为多个子任务提示,以多轮对话的方法逐步输入给大模型。
(a)解答数学问题:
用户输入:袋子里有16个球,其中一半是高尔夫球,并且所有高尔夫球中有一半是蓝色的球。请问有多少个蓝色高尔夫球?
模型输出:让我们一步一步地思考。
袋子里有16个球,其中一半是高尔夫球,也就是有16/2=8个高尔夫球。一半的高尔夫球是蓝色的,也就是有8/2=4个蓝色高尔夫球。答案是4。
(2)推荐旅游景点:
用户输入:你是一名旅行向导。我会把我的位置告诉你,你需要向我推荐附近的旅游景点。我的第一个请求是”我在我在伊斯坦布尔,我只想参观博物馆”。
模型输出:当然,以下是一些您可以考虑参观的博物馆:
1.伊斯坦布尔考古博物馆:这个博物馆位于苏丹艾哈迈德广场,是土耳其最重要的考古博物馆之一。它展示了来自不同历史时期的珍贵文物,包括古代近东古希腊和古罗马的艺术品。
2.伊斯坦布尔现代艺术博物馆:位于博斯普鲁斯海峡畔的卡拉库埃斯梅斯地区这个博物馆致力于展示当代土耳其和国际艺术。它拥有丰富的永久收藏和临时展览,涵盖绘画、雕塑、摄影、视频艺术和装置艺术等多个领域。
3.圣索菲亚博物馆:这座博物馆位于伊斯坦布尔历史中心的圣索菲亚大教堂内展示了拜占庭和奥斯曼帝国时期的艺术和文物。您可以在这里欣赏到壮丽的拜占庭建筑和壁画,以及众多的历史文物。
(5)设计原则
清晰地表达任务目标
分解为简单且详细的子任务,每个子任务都对应原始任务的某个方面或步骤,并将子任务按编号列出
提供少样本示例
采用模型友好的提示格式,从模型预训练的数据集中学习语言表达模式,并利用这些语言表达模型帮助我们更有效地使用大模型完成特定任务
2.上下文学习
上下文学习成为使用大模型解决下游任务的一种主流途径。
作为一个重要特点,上下文学习在提示中引入了示例数据,示例设计的三个关键因素,包括示例样本选择、样本格式化函数、以及示例排序策略。其中,人工标注的示例格式如下:
3.思维链提示
思维链提示是一种高级提示策略,旨在增强大语言模型在各类复杂推理任务上的表现。常见的推理任务包括算术推理、常识推理以及符号推理等多种任务。与上下文学习方法仅使用<输入,输出>二元组来构造提示不同,思维链提示进一步融合了中间的推理步骤来指导从输入到输出的推理过程。思维链提示技术的演化过程如下:
大语言模型使用思维树方法解决24点游戏如下:
大模型使用思维图方法解决数组排序:
八、规划与智能体
规划旨在为目标任务制定包含一系列动作的解决方案,是大语言模型解决复杂问题能力的重要体现,也是自主智能体最重要的核心能力。自主智能体作为大模型的关键应用方向之一,被视为实现通用人工智能的极具潜力的技术路径。通过感知环境、规划解决方案以及执行相应动作,自主智能体能够有效完成既定目标任务。基于制定的任务的解决方案,自主智能体在环境中执行相应的动作,最终完成目标任务的求解。
1.基于大语言模型的规划
为解决几何数学求解、游戏、代码编程、日常生活任务等复杂任务时,可使用基于大语言模型的规划(Planning),核心在于将复杂任务分解为若干相关联的子任务,并围绕这些子任务制定包含一系列执行动作(Action)的解决方案,从而将复杂任务的求解转换为一系列更为简单的子任务依次求解,进而简化任务难度。
(1)整体框架
基于大模型的规划方法主要由三个组件构成,包括任务规划器、规划执行器以及环境。大模型作为任务规划器,主要职责是生成目标任务的解决方案;该方案包含一系列执行动作,每个动作通过合适的形式进行表达。对于长期任务,任务规划器还可以引入存储机制,用于解决方案与中间执行结果的存储与检索。规划执行器则负责执行解决方案中所涉及到的动作。环境是规划执行器实施动作的具体场景,不同任务对应着不同的执行环境。
大语言模型通过基于提示的规划解决复杂任务的流程:
(2)方案生成
方案生成主要是基于大模型的综合理解和推理能力,通过合适的提示让大模型生成目标任务的解决方案。解决方案可以采用自然语言表达或代码表达的形式。自然语言的形式较为直观,但由于自然语言的多样性与局限性,不能保证动作被完全正确执行,而代码形式则较为严谨规范,可以使用外部工具如代码解释器等保证动作被正确执行。
任务规划器主要采用一次性的方案生成和迭代式的方案生成,两种方式。一次性方案生成方法要求任务规划器直接生成完整的解决方案,实现较为简单但容错性较低,一旦中间某个步骤出错就容易导致最终执行结果出错。迭代式方案生成方法则通过与环境进行交互,逐步地生成下一步动作计划,能够根据环境反馈对中间执行步骤进行修正与调整。示例如下:
(3)获取反馈
在执行动作后,规划执行器会将环境反馈信号传递给任务规划器。这些反馈信号可以用于完善整体解决方案或规划下一步动作。环境反馈分为外部反馈和内部反馈。
外部反馈:外部对象为任务规划器提供重要的反馈信号,包括物理工具、人类、虚拟环境,如在游戏领域,虚拟环境能够为任务规划器提供实时的动作执行反馈,从而协助其更加高效地完成后续的游戏任务。
内部反馈:大模型本身也能够对任务规划器提供反馈信息。首先大模型直接判断当前动作是否规划正确,将历史动作序列及对应的反馈输入给大模型,通过相关指令,让大模型检查当前动作的正确性,并给出反馈结果。在得到完整的解决方案后,规划执行器可以在环境中执行该方案,并且获得相应的外部反馈信息。
2.基于大语言模型的智能体
智能体(Agent)是一个具备环境感知、决策制定及动作执行能力的自主算法系统。在游戏、自动驾驶等领域取得显著成果,在自然语言理解、图像识别、推理决策等方面展现前所未有的性能。
(1)大语言模型智能体的构建
智能体的构建过程,将围绕三个基本组件进行,包括记忆组件(Memory)、规划组件(Planning)、执行组件(Execution)。
记忆组件:构成了智能体的核心存储单元,用于存储智能体与环境的历史交互记录,并能够随时检索使用,这些信息可以是文本形式、图像、声音等多模态形式。如,聊天机器人利用记忆组件来存储用户的偏好,进而提供更具个性化的服务体验。大模型智能体通过特殊设计的读写操作,将相关信息分别存储在短期记忆和长期记忆中,面对不同类型的需求时,能够灵活地调用长短期记忆,以支持其复杂的认知和推理过程。
短期记忆对应模型内部的上下文窗口(即输入窗口),只会使用一次。长期记忆,在不常访问的情况下也稳定保留。
规划组件:引入了人类解决任务的思考方式,将复杂任务分解为一系列简单的子任务,进而逐一解决。
执行组件:主要职责是执行由规划组件制定的任务解决方案。通过设置执行组件,智能体可以产生具体的动作行为,进而与环境进行交互,并获得实际的执行效果反馈。
工作流程:遵循如下步骤:首先,智能体对当前状态进行理解和分析,可能会从记忆组件中检索相关的历史信息或知识。接下来,规划组件通过综合考虑长短期记忆组件中已存储的信息,生成下一个行动策略或计划,涉及对多个执行方案进行预测与评估,以选择最优的行动路径。随后执行组件负责根据规划组件生成的任务解决方案执行实际行为,并与当前环境产生交互。在执行过程中,智能体可能会借助外部工具或资源来增强自身的执行能力。最后,智能体通过感知单元或系统接口从环境中接收反馈信息,并将这些信息暂时存储于短期记忆中。智能体会对短期记忆中的新获取到的信息进行处理,如舍弃掉和未来规划无关的观察。
(2)多智能体系统的构建
多智能体系统着重强调智能体间的协同合作,以发挥集体智慧的优势。在多智能体系统中,可以从相同或不同类型的大模型中实例化出多个智能体,每个智能体均扮演特定角色并承担着对应功能。通过智能体间的交互与协作,智能体系统的灵活性和适应性得到显著增强。
(3)大语言模型智能体的典型应用
WebGPT
WebGPT是由OpenAI开发的一款具有信息检索能力的大语言模型部署在一个基于文本的网页浏览环境,用以增强大语言模型对于外部知识的获取能力。作为一个单智能体系统,WebGPT具备自主搜索、自然语言交互以及信息整合分析等特点,能够理解用户的自然语言查询,自动在互联网上搜索相关网页。根据搜索结果,WebGPT能够点击、浏览、收藏相关网页信息,对搜索结果进行分析和整合,最终以自然语言的形式提供准确全面的回答,并提供参考文献。WebGPT在基于人类评估的问答任务中,获得了与真实用户答案准确率相当的效果。
MetaGPT
MetaGPT是一个基于多智能体系统的协作框架,旨在模仿人类组织的运作方式,模拟软件开发过程中的不同角色和协作。相关角色包括产品经理、架构师、项目经理、软件工程师及测试工程师等,并遵循标准化的软件工程运作流程对不同角色进行协调,覆盖了需求分析、需求文档撰写、系统设计、工作分配、代码实现、系统测试等软件开发全生命周期,最终满足特定软件开发项目的需求。
【一个小目标】88/365,关注行业关注趋势,多看多想多反思,做一个讲故事的人,讲一个好故事。