编辑
2024-07-06
AI
0
请注意,本文编写于 139 天前,最后修改于 110 天前,其中某些信息可能已经过时。

目录

AIGC
基础概念
人工智能
机器学习
监督学习
无监督学习
强化学习
深度学习
生成式AI
什么是大语言模型 ?
大语言模型
Transformer
如何训练一个ChatGPT ?
步骤1:无监督预训练
步骤2:监督微调
步骤3:训练奖励模型+强化学习训练
提示工程(Prompt Engineering)
系统指令(System message)
用户提示词(user prompt)
提示工程方法
零样本提示
小样本提示
思维链提示
分步骤思考
AI数据过时、幻觉、计算不准,怎么解决?
检索增强生成-RAG
RAG主要过程
程序辅助语言模型-PAL
PAL的工作流程
推理行动结合-ReAct

在说LLM之前,我们先来了解下AI到底是什么,先从AIGC开始说起。

AIGC

当AIGC这个词在国内火爆的同时,海外更流行的是另外一个词:Generative AI,即生成式AI。 从字面上来看,生成式AI和AIGC之间关系是:生成式AI所生成的内容就是AIGC。

AIGC 又称生成式 AI (Generative AI),是继专业生产内容(PGC, Professional-generated Content)、用户生产内容(UGC, User-generated Content)之后的新型内容创作方式,可以在对话、故事、图像、视频和音乐制作等方面,打造新的数字内容生成与交互形式。

ChatGPT、GitHub Copilot、Midjourney等都属于生成式AI。

生成式AI能够融合自动化、数字化和决策AI等多种形式,解决数字时代的信息解构、生成、互动、传播和反馈等多个环节(例如数据治理、知识管理、流程自动化、人机协作等)。这意味着所有涉及数字内容的行业,AIGC都可以重新进行一次。

基础概念

如下图,先通过一张图理解下人工智能领域词汇之间的关系,比如AI、机器学习、监督学习、无监督学习、强化学习、深度学习、大语言模型等

人工智能

AI,全称Artificial Intelligence,也叫人工智能,是计算机科学下的一个学科,这种智能使得机器能够模拟人类的学习和思考方式,指的是机器能够像人类一样思考、学习、推理、决策、交流等方面所具有的智能。是指通过模拟和复制人类智能的理论、方法、技术和应用系统,以达到类似于人类对问题进行分析、决策、学习和解决问题的能力。它涵盖了多个技术和方法,包括机器学习、深度学习、专家系统、自然语言处理、计算机视觉等。

AI 应用范围非常广泛,可以处理诸如图像识别、语音识别、语言翻译、自然语言处理、智能推荐、决策制定等各种专门化的任务。

机器学习

机器学习(Machine Learning)是一种人工智能(AI)的分支,专注于让计算机系统通过数据和经验(即训练数据)来自动改进和学习。其核心目标是让计算机系统能够通过学习识别模式、提升性能、做出决策或预测,其核心在于通过算法使计算机系统能够从数据中学习和提升自身性能,而无需明确编程。计算机系统可以自动识别和提取数据中的模式和规律,从而能够智能地分析和处理问题。

比如,我们有个功能是通过算法程序来自动识别动物的声音时,我们编写了一组规则告诉程序每种动物的声音特征,比如狗的汪汪声,猫的喵喵声,这属于非机器学习方法。但是,如果我们让计算机通过大量的动物声音数据学习每种动物声音的特征模式,然后能够从新的未知声音中识别出是哪种动物,这就是机器学习的例子。

机器学习领域下有多个分支,包括监督学习、无监督学习、强化学习等不同类型。

监督学习

在监督学习中,机器学习算法会处理带有标签的训练数据。标签代表期望的输出值,因此每个训练数据点都包含输入特征和期望的输出值。算法的目标是学习输入与输出之间的映射关系,从而在遇到新的输入特征时,能够准确预测对应的输出值。

经典的监督学习任务包括分类(也就是把数据划分为不同的类别)以及回归(也就是对数值进行预测) 监督学习任务涵盖了多种常见的机器学习问题和应用。以下是一些主要的监督学习任务:

  • 分类(Classification):将输入数据映射到预定义的类别标签中的一个任务。例如,邮件分类为垃圾邮件或非垃圾邮件、图像识别中的物体分类等。
  • 回归(Regression):预测连续型输出变量的值。例如,预测房价、股票价格、销售额等。
  • 目标检测(Object Detection):识别图像或视频中的特定对象,并确定其在图像中的位置。这通常结合了分类和回归的技术。
  • 语义分割(Semantic Segmentation):将图像分割成多个语义区域,每个区域被赋予特定的标签,通常用于图像分析和医学影像处理。
  • 序列标注(Sequence Labeling):对序列数据的每个元素进行分类或标注。例如,命名实体识别、语音识别中的语音词性标注等。
  • 推荐系统(Recommendation Systems):预测用户可能感兴趣的物品或服务,例如电影推荐、商品推荐等。
  • 文本分类(Text Classification):将文本文档分配到预定义的类别或标签中,例如情感分析、主题分类等。
  • 结构化预测(Structured Prediction):直接预测复杂输出对象,如语法分析树、语音识别中的语音识别结果等。

比如,收集大量猫和狗的照片,并为每张照片附上相应的标签(如“猫”或“狗”)。然后,利用这些带标签的数据来训练一个机器学习模型,使其能够根据未见过的照片预测这张照片是猫还是狗。这就属于分类。

比如,收集一些房产的特征数据,如面积、卧室数量、是否有阳台等,并将这些特征与对应的房价进行匹配。然后,利用这些数据来训练一个机器学习模型,使其能够根据未见过的房产特征预测其房价。这就属于回归。

无监督学习

无监督学习与监督学习不同,它处理的是没有标签的数据。因此,算法的任务是自主发现数据中的模式或规律。假设我们有一个包含不同类型猫和狗图像的数据集,并将其输入无监督学习算法。该算法从未在这个数据集上进行过训练,因此对数据集的特征一无所知。无监督学习算法的任务是自行识别图像特征。它会通过根据图像之间的相似性,将图像数据集聚类成不同的组来完成这一任务。

强化学习

强化学习(Reinforcement Learning, RL)是一种通过试错过程优化决策的机器学习方法。它模拟智能体在环境中的探索和学习,通过不断尝试和调整策略,自动解决任务。 在强化学习中,智能系统被称为“智能体”(Agent)。智能体通过观察环境的状态(State),执行某个动作(Action),然后接收来自环境的奖励(Reward)。智能体会根据这些反馈不断学习和调整策略,目标是通过与环境的交互,最大化累积奖励的期望值。 强化学习的一个典型应用场景是游戏。例如,AlphaGo通过强化学习掌握了围棋的策略,最终击败了人类顶级棋手。在这种情况下,智能体通过与环境(游戏棋盘)的不断交互,优化其决策策略,以最大化其胜利的可能性。

举个例子,强化学习的过程与训练小狗有很多相似之处。刚开始的时候,小狗会随意做出各种动作,但随着与训犬师的互动,它会逐渐明白哪些行为能够获得奖励(如零食),哪些行为没有奖励,甚至哪些行为会受到惩罚。通过不断尝试和观察行为与奖惩之间的关系,小狗的行为会逐渐符合训犬师的期望。

再比如,在一个机器人导航任务中,机器人(智能体)需要在一个迷宫中找到出口。刚开始时,机器人可能会随机移动,但通过与环境的互动,它会逐渐学会哪些路径是通向出口的,哪些路径是死胡同。奖励可能是接近出口的位置,而惩罚可能是撞到墙壁或走入死胡同。通过不断的试错和调整,机器人最终能够找到最佳路径。

深度学习

深度学习是机器学习的一个方法,它不属于上面的任何一种类型,核心在于使用神经网络模仿人脑处理信息的方式,通过层次化的方法提取和表示数据的特征。使用多层神经网络来学习复杂的表征和模式,从而对数据进行建模和分析。

神经网络由许多基本的计算和存储单元构成,这些单元被称为神经元。神经元通过层层连接来处理数据,而深度学习模型通常有很多层,因此被称为“深度”模型。

举个例子,要让计算机识别小猫的照片,在深度学习中,数据首先被传递到一个输入层,就像人类的眼睛看到图片一样。接着,数据会通过多个隐藏层,每一层都会对数据进行一系列复杂的数学运算,以帮助计算机理解图片中的特征,例如小猫的耳朵、眼睛等特征。最后,计算机会输出一个答案,表明这是否是一张小猫的图片。

神经网络可以用于监督学习、无监督学习、强化学习,所以深度学习不属于它们的子集。

生成式AI

生成式AI是一种深度学习的应用,它利用神经网络来识别现有内容的模式和结构,并学习生成新的内容。这些内容可以是文本、图片、音频等多种形式。而大语言模型也是深度学习的一种应用,专门用于自然语言处理任务。

那大语言模型与生成式AI之间的关系呢?并不是所有的生成式AI都是大语言模型,但是否所有的大语言模型都属于生成式AI,这点还是有些争议的。前半句很好理解,生成图像的扩散模型就不是大语言模型。

同时有人认为不是所有的大语言模型都是生成式AI,这是由于有的大语言模型由于其架构特点不适合进行文本生成。Google的BERT模型是一个典型的例子,它拥有大量的参数和庞大的训练数据,因此被归类为大语言模型。BERT(Bidirectional Encoder Representations from Transformers)在理解上下文方面表现出色,这使得它在许多自然语言处理任务中表现优异。因此被Google用在搜索上,用来提高搜索排名和信息摘录的准确性,它也被用于情感分析、文本分类等任务。但同时,BERT不擅长文本生成,特别是连贯的长文本生成,所以有些人认为此类模型不属于生成式AI的范畴。

什么是大语言模型 ?

2022年11月30日,OpenAI发布ChatGPT,一跃成为当下最快达到一百万用户的线上产品,也带动大语言模型成为了时下热点,但究竟什么才叫大语言模型呢?

大语言模型是指参数数量庞大、具备强大语言理解和生成能力的自然语言处理模型。这类模型通常基于深度学习技术,特别是变换器(Transformer)架构,如GPT(Generative Pre-trained Transformer)系列模型。它们通过大规模的预训练数据和复杂的神经网络结构,能够自动学习和理解语言中的语法、语义和上下文信息。

大语言模型

大语言模型的“大”不仅仅体现在训练数据量的庞大上,还体现在参数数量的巨大。参数是模型内部的变量,可以视为模型在训练过程中学到的知识。参数决定了模型如何对输入数据做出反应,从而影响模型的行为。例如,GPT-3 具有高达 1750 亿个参数;而 GPT-4 的具体参数数量尚未公布,但据推测可能比 GPT-3 更多。

在过去的语言模型研究中,研究人员发现,通过使用更多的数据和计算资源来训练具有更多参数的模型,通常可以获得更好的性能。这就像教AI制作蛋糕一样,如果AI只被允许调整面粉、糖、蛋的量,它的选择和优化空间是有限的;但如果AI可以调整面粉、糖、蛋、奶油、牛奶、苏打粉、可可粉的量以及烤箱的时长和温度,它就能更灵活地制作出更美味的蛋糕。随着参数的增加,AI甚至有能力创造出新的蛋糕品种。 这种扩展使得大模型远远超越了小模型的局限,不再局限于单一或少数任务,而是具备了更广泛的能力。例如,以前我们可能需要分别训练不同的模型来进行文本总结、分类、信息提取等任务,但现在一个大模型就可以同时完成所有这些任务。

大语言模型的主要目标是理解自然语言,生成自然流畅的文本回复,回答各种问题,并进行对话。通过对大量文本数据的学习,这些模型掌握了语言的语法、语义和语用等知识,并能够利用这些知识生成合理的文本输出。

Transformer

如果说2022年底,ChatGPT的惊艳亮相是大语言模型公众认知被显著提升的里程碑,那它技术发展的里程碑其实要回溯到2017年。2017年6月,谷歌团队发表论文**《Attention Is All You Need》**,提出了Transformer架构,自此自然语言处理的发展方向被改变了,随后出现了一系列基于Transformer架构的模型。

ChatGPT背后的模型GPT,GPT的全称是“Generative Pre-trained Transformer“,生成式预训练的 Transformer,Transformer是其中的关键,所以要了解大语言模型就无法跳过Transformer。

在Transformer架构被提出之前,语言模型的主流架构主要是循环神经网络(Recurrent Neural Network,简称RNN)。RNN按顺序逐字处理,每一步的输出取决于先前的隐藏状态和当前的输入,要等上一个步骤完成后才能进行当前的计算,因此无法并行计算,训练效率低。而且,RNN在处理长序列时表现不佳,也就是在处理长文本时存在局限性。由于RNN的架构特点,词之间距离越远,前面对后面的影响越弱,所以它难以有效捕获到长距离的语义关系。但是在人类的自然语言中,依赖信息之间距离较远是很常见的情况。

比如,下面这句话里,正确预测下一个词的关键是距离很远的“广东”,如果用RNN生成后续内容,到了这的时候它可能已经把前面的信息忘没了。

为了捕获长距离依赖性,后来也出现了RNN的改良版本,LSTM,长短期记忆网络,但是这也并没有解决传统RNN无法并行计算的问题,而且在处理非常长的序列时也依然受到限制。

后来,Transformer出现了,它有能力学习输入序列里所有词的相关性和上下文,不会受到短时记忆的影响,能做到这一点的关键在于Transformer的自注意力机制,也正如论文标题所说“Attention Is All You Need”,注意力就是你所需要的一切。

简单来说,Transformer在处理每个词的时候,不仅会注意这个词本身以及它附近的词,还会去注意输入序列里所有其他的词,然后给予每个词不一样的注意力权重,权重是模型在训练过程中通过大量文本逐渐学习得到的。

比如,我们想要翻译这个句子,“The animal didn't cross the street because it was too tired.”句子中的it是表示什么呢,是animal还是street?模型就是通过自注意力值来确定的,当对it进行编码时,Encoder会对句子中的每个token都计算一遍注意力值,模型会将it更关注的“The animal”编码到it中。这样模型在后续的处理过程中就能知道it指代的是“The animal”。

更多关于transformer的底层实现,之前有一篇文章专门阐述。

如何训练一个ChatGPT ?

要得到一个ChatGPT,总共分3步:

  1. 无监督学习:首先,通过大量的文本数据进行无监督学习预训练,构建一个能够生成文本的基础模型。
  2. 监督微调:接下来,利用一些人类撰写的高质量对话数据,对基础模型进行监督微调,得到一个经过微调的模型。此时的模型不仅能续写文本,还具有更好的对话能力。
  3. 训练奖励模型和强化学习:最后,使用包含问题和多个回答的数据,让人类标注员对这些回答的质量进行排序。基于这些数据训练出一个能够对回答进行评分预测的奖励模型。然后,让第二步得到的模型生成回答,用奖励模型对回答进行评分,并将评分作为反馈进行强化学习训练。

步骤1:无监督预训练

在第一步的预训练阶段,首先需要大量的文本数据作为基础,让模型从中进行学习。例如,GPT-3的训练数据包括多个互联网文本语料库,涵盖了在线书籍、新闻文章、科学论文、维基百科、社交媒体帖子等。训练数据的总规模达到3000亿个token。在训练过程中,模型通过大量的文本数据自主学习人类语言的语法和语义,了解表达结构和模式。这个过程通常是通过无监督学习完成的,具体来说,是使用一种称为自我监督学习的技术。在自我监督学习中,模型通过预测序列中的下一个词或标记,为输入的数据生成自己的标签,并基于之前的词给出答案。

具体来说,模型会首先看到一部分文本,然后基于上下文尝试预测下一个token。通过比较正确答案和它的预测,模型会更新权重,从而逐渐能够根据上下文生成合理的下文。随着模型见过的文本越来越多,它的生成能力也会不断提升。

预训练并不是一个简单的过程,也是这四个步骤中最耗时、费力和昂贵的。以GPT-3为例,虽然官方没有公布准确的数据,但估计它经过了数月的训练,使用了成百上千个V100 GPU,花费了数百万美元。

预训练的结果是得到一个基础模型,这个基础模型并不等同于ChatGPT背后的对话模型。因为在这个阶段,模型具备了预测下一个token的能力,能够根据上下文补充文本,但还不具备对话的专长。

为了解决这一点,我们需要进行第二步,对基座模型进行微调。

步骤2:监督微调

微调是在现有模型的基础上进行进一步的训练,通过调整模型的内部参数,使其更加适应特定的任务。换句话说,为了训练出一个擅长对话的AI助手,需要让基础模型接触更多的对话数据。

相比预训练,微调的成本要低很多,因为所需的训练数据规模更小,训练时间也更短。

在这个阶段,模型不再需要从大量的文本中学习,而是从一些人类撰写的专业且高质量的对话中学习。这相当于既给模型提供了问题,也提供了人类认为合适的回答,这属于监督学习,因此这一过程称为监督微调(Supervised Fine-Tuning,简称SFT)。完成后,会得到一个SFT模型,它比第一步中的基础模型更擅长回答问题。

但为了让模型的实力继续被提升,还可以进行第三步,让SFT模型进行强化学习。

步骤3:训练奖励模型+强化学习训练

强化学习的原理是让模型在特定环境中采取行动,获得反馈并从中学习,以便在未来的情况下采取最佳行动,从而最大化奖励或最小化损失。 为了让ChatGPT成为一个乐于助人的AI助手,我们可以让ChatGPT对问题进行回答,然后由人类评估员对这些回答进行评分。评分主要基于三个原则:

  • Helpful(有用性):评估模型是否遵循用户指令并正确推断指令的能力。
  • Honest(真实性):评估模型是否有编造事实的倾向。
  • Harmless(无害性):评估模型的输出是否适当,是否包含诋毁或贬义内容。

如果回答得分高,模型会学习到要保持这种表现;如果得分低,模型则会学习到需要改进。然而,让人类逐个为回答评分成本高且效率低。为了解决这个问题,可以训练一个奖励模型,让它来为模型生成的回答评分。在这个步骤中,需要训练一个奖励模型,它通过学习问答对及其对应的评分来进行工作。

获取评分数据的方式是,让经过微调的GPT模型(即第二步得到的SFT模型)对每个问题生成多个回答,然后让人类标注员对这些回答的质量进行排序。虽然仍然需要人类标注员的参与,但一旦有了足够的排序数据,就可以用这些数据来训练奖励模型,使其学会预测回答的评分。

奖励模型训练完成后,就可以用于强化学习。在强化学习过程中,ChatGPT模型的初始参数来自于之前得到的SFT模型,但会随着训练不断更新,而奖励模型的参数则保持不变。奖励模型的任务是对生成的内容进行评分,通过一轮又一轮的迭代,模型会不断优化其策略,回答质量也会进一步提升,最终形成一个强大的ChatGPT。

提示工程(Prompt Engineering)

我们需要先了解ChatGPT等聊天助手的局限性。这些助手背后的大语言模型是通过大量文本数据训练出来的,因此它们擅长模仿人类的语言表达,并从中学习了大量知识。它们的回应是基于提示以及之前生成的内容,通过持续预测下一个token的概率来实现的。然而,对于它们不了解的领域,这些模型并不知道自己缺乏相关知识,仍然会继续猜测后续应该说什么。由于生成过程中缺乏反思能力,它们常常在胡说八道的同时表现得非常自信。

提示(Prompt)是我们给AI聊天助手输入的问题或指令,AI会根据提示内容进行回应。提示词可以非常简单,如"今天天气怎么样",或者更复杂,如设计一个包含多个步骤和条件的复杂任务。在这个背景下,提示工程(Prompt Engineering)是人工智能领域,尤其是在自然语言处理(NLP)和大型语言模型(LLMs)的背景下,研究如何提高和AI的沟通效率和质量的。它主要涉及设计和优化输入提示(prompts),以引导AI模型生成特定类型的输出或执行特定的任务。实现逻辑如下图

简而言之,大模型的运行机制是基于“下一个字词预测”。用户输入的提示(prompt)即为大模型所获得的上下文,大模型将根据用户的输入进行续写并返回结果。因此,输入提示的质量会极大地影响模型返回结果的质量以及对用户需求的满足程度。总的原则是“用户表达的需求越清晰,模型更有可能返回更高质量的结果”。

提示工程的关键原则

  • 原则1:编写清晰具体的质量
    • 使用分隔符清楚地限定输入的不同部分
    • 要求结构化输出
    • 要求模型检查是否满足条件
    • 少样本提示
  • 原则2:给模型充足的思考时间
    • 指定完成任务的步骤
    • 指导模型制定自己的解决方案

系统指令(System message)

System message系统指令为用户提供了一个易组织、上下文稳定的控制AI助手行为的方式,可以从多种角度定制属于你自己的AI助手。系统指令允许用户在一定范围内规定LLM的风格和任务,使其更具可定性和适应各种用例。大部分LLM模型的系统指令System message的权重强化高于人工输入的prompt,并在多轮对话中保持稳定,您可以使用系统消息来描述助手的个性,定义模型应该回答和不应该回答的内容,以及定义模型响应的格式。下面是一些system message的使用示例:

用户提示词(user prompt)

指令是最常用的提示组件,主要功能是向模型说明要执行的操作。虽然概念简单,但是实践中仍然比较复杂,下面是简单和详细的一些指令例子,详细、明确的指导比模糊不清的提示能够产生更好的效果

提示工程方法

零样本提示

零样本提示(Zero-shot Prompting)的定义是直接向AI大模型提出任务,但不提供任何执行的方法或步骤。大模型必须依靠其预训练的知识来生成答案。 零样本提示示例 case1:询问大模型“美国的首任总统是谁”。

case2:提取关键词

小样本提示

少量样本提示(Few-shot Prompting)与零样本提示的主要区别在于,少量样本提示在单个Prompt中加入了示例。这些示例能够帮助大型语言模型(LLM)更好地理解和完成任务。小样本提示是提示工程中的一种策略,核心在于在向模型提出任务时,不仅提供任务描述,还附带一些示例(通常是几个到十几个),以便模型更快更准确地理解任务要求,并生成符合预期的回答。

这些示例通常包括输入提示和相应的期望输出。通过展示这些小样本,模型能够从有限的实例中学习任务的模式和规律,从而在处理新的输入时做出更合适的响应。 小样本提示示例

这些示例通常包括输入的提示以及对应的期望输出。通过展示这些小样本,模型能够从有限的实例中学习到任务的模式和规律,从而在处理新的输入时能够做出更恰当的响应。 但小样本提示有时也起不到很大的帮助,比如AI非常不擅长做数学相关问题,即使我们用样本示范一些正确的结果,它依然无法很好得解决 一方面,大多数AI模型(包括大型语言模型)通常是通过大量的文本数据进行训练的,而不是专门针对数学问题。因此,它们在自然语言理解和生成上可能表现更为突出,而在数学推理或计算上可能就没有特别深入的训练。另一方面,在于AI生成每个token所用的时长是差不多的,不会因为某个词需要涉及更多的思考,而花费更多时间生成哪个token,即使有示范答案也没有什么帮助,这种时候可以借助思维链。

思维链提示

思维链,在人工智能领域,是一个非常非常新的概念。强大的逻辑推理是大语言模型“智能涌现”出的核心能力之一,好像AI有了人的意识一样。而推理能力的关键在于——思维链(Chain of Thought,CoT)。

思维链(Chain of Thought,CoT)是一种改进的Prompt技术,目的在于提升大模型LLMs在复杂推理任务上的表现,对于复杂问题尤其是复杂的数学题大模型很难直接给出正确答案。如算术推理(arithmetic reasoning)、常识推理(commonsense reasoning)、符号推理(symbolic reasoning)。COT通过要求模型在输出最终答案之前,显式输出中间逐步的推理步骤这一方法来增强大模型的算数、常识和推理能力。简单,但有效。

思维链最早是谷歌在2022年一篇论文里提出的,作者发现思维链可以显著提升大语言模型进行复杂推理的能力,特别是在算数、常识和符号推理等任务上

运用思维链的方法是我们给AI的小样本提示里不仅包含正确的结果,也展示中间的推理步骤,那AI在生成回答时,也会模仿着去生成一些中间步骤,把过程进行分解。就像被老师点名回答问题时,站起来瞬间就给出正确答案的难度系数很高,但如果多说些废话,把思考步骤也讲出来,一方面可以拖延时间有更多思考机会,另一方面也有助于我们分步骤想,更有机会得到正确答案 思维链也可以用在数学计算之外的很多方面,借助思维链AI可以在每一步里把注意力集中在当前思考步骤上,减少上下文的过多干扰。因此针对复杂的任务有更大概率得到准确的结果。

分步骤思考

分步骤思考,学名叫Zero Shot Chain of Thought (Zero-shot-CoT)。它的意思是即使不用小样本提示,只是在问题后面加一句“let's think step by step”(让我们来分步骤思考)也能提升大模型得到正确答案的概率。这是一种成本非常低的方法,用思维链还需要我们设计样本示范,而这种方法只需要加上简单一句话,大模型就会自行生成中间步骤进行推理。

AI数据过时、幻觉、计算不准,怎么解决?

GPT之类的AI大语言模型虽然博览群书,但在某些方面也始终存在短板,比如编造事实、计算不准确、数据过时等等。为了应对这些问题可以借助一些外部工具或数据,把AI武装起来。实现这一思路的框架包括RAG(检索增强生成)、PAL(程序辅助语言模型)、ReAct(推理行动结合)等等

检索增强生成-RAG

AI大语言模型的知识深度和广度受到训练数据的影响。如果训练数据中某个领域的文本覆盖不够全面,AI在该领域的表现可能不尽如人意。此外,公司内部数据、个人私密文件等私有数据通常不会作为公开大语言模型的训练数据,因此我们不能期望ChatGPT等模型能够回答与这些数据相关的问题。

一个应对方法就是,我们可以提供外部文档,让模型访问外部知识库,获得实时且正确的数据,生成更可靠和准确的回答,这种架构叫做检索增强生成。

RAG(Retrieval-Augmented Generation)是一种用于自然语言处理的模型架构,它结合了检索(Retrieval)和生成(Generation)两种技术。 RAG使用来自私有或专有数据源的信息来辅助文本生成的技术。它将检索模型(设计用于搜索大型数据集或知识库)和生成模型结合在一起。通过从更多数据源添加背景信息,以及通过训练来补充 LLM 的原始知识库,检索增强生成能够提高搜索体验的相关性。这能够改善大型语言模型的输出,但又无需重新训练模型。

RAG主要过程

RAG 包含三个主要过程:检索、增强和生成。

  • 检索:根据用户的查询内容,从外部知识库获取相关信息。具体而言,将用户的查询通过嵌入模型转换为向量,以便与向量数据库中存储的相关知识进行比对。通过相似性搜索,找出与查询最匹配的前K个数据。
  • 增强:将用户的查询内容和检索到的相关知识一起嵌入到一个预设的提示词模板中。这样可以为生成模型提供更多的上下文信息。
  • 生成:将经过检索增强的提示词内容输入到大型语言模型中,以生成所需的输出。生成模型利用这些提示词生成更准确和相关的文本回复。

以下是流程图:

这样,AI就能把外部文档的段落作为上下文,基于里面的信息给出更严谨的回答。因此,你可以对外部文档里任何内容进行提问,即使AI模型从来没有收到过那些内容的训练,RAG有利于搭建企业知识库或个人知识库。ChatGPT的一些插件就是基于RAG架构的,官方也推出了上传PDF后对PDF提问的功能

**程序辅助语言模型-**PAL

正如前面提到的,大型语言模型(LLM)在执行算术和其他数学运算时能力有限。虽然可以尝试使用链式思维提示(Chain-of-Thought Prompting)来克服这一问题,但这种方法只能在一定程度上提高模型的性能。即使模型能够正确推理问题,对于较大的数字或复杂的运算,它仍可能在个别数学操作上出错。这是因为LLM在处理精确计算时,类似于计算器的表现可能会出错。

为了解决这一问题,程序辅助语言模型(Program-aided Language Models,PAL)被提出。它最早在2022年的一篇论文中被介绍。PAL的核心思想是,不让AI直接生成计算结果,而是借助其他擅长做计算的工具,如Python解释器。 PAL的基本概念 PAL是一种利用编程辅助大型语言模型生成推理链来解决各种任务的技术。虽然LLM在算术计算方面不擅长,但它们非常擅长代码生成。因此,PAL通过指示LLM编写代码来解决计算任务。与思维链提示不同,PAL不是使用自由形式文本来获得解决方案,而是将解决步骤卸载到类似Python解释器的编程运行时中。

ChatGPT的Advanced Data Analysis 功能,可以被看作是PAL的一个例子。借助内置的python解释器,ChatGPT能够用编程逻辑和代码执行更准确地回答问题,如果会写代码的话,结合GPT的API习性实现程序辅助,也是比较容易的。

PAL的工作流程

  1. 问题解析:LLM首先解析用户提出的问题,并确定需要进行的计算或逻辑操作。
  2. 代码生成:LLM生成相应的代码(如Python代码),用于解决问题。这些代码可以包括数学运算、数据处理等。
  3. 代码执行:生成的代码被传递给Python解释器或其他计算工具进行执行。解释器运行代码并返回结果。
  4. 结果输出:LLM接收计算结果,并将其格式化为用户可理解的答案。

示例 假设用户提出一个复杂的数学问题,如计算某个复杂表达式的结果。PAL的工作流程如下:

  1. 问题解析:用户输入:“请计算以下表达式的结果:2^10 + 3^5 - sqrt(256)。”
  2. 代码生成:LLM生成以下Python代码:
  3. 代码执行:代码被传递给Python解释器进行执行,计算结果为1035.0。
  4. 结果输出:LLM接收结果,并向用户返回答案:“表达式的结果是1035.0。”

推理行动结合-ReAct

AI大语言模型还有一个局限性,那就是它所了解的知识,天然受到训练数据日期的影响。比如说,模型是去年训练完成的,训练数据里必然不包含今年的新闻,那么模型也无从得知训练完成后发生的事情,这被称为知识截断。

那当我们问模型最近发生的事实时,模型要么会回复已经过时的信息,要么会胡编乱造一通。但重新训练模型的成本又是相当高的,也无法彻底解决数据过时的问题,如果AI能对自行不了解的知识上网搜索,把找到的答案告诉我们就好了。

但它怎么知道要去浏览什么网站,浏览时应该关注什么关键词去找相关信息呢? 2022年一篇标题为《ReAct: 在语言模型中协同推理与行动》的论文提出了ReAct框架

ReAct的核心在于让模型进行动态推理并采取行动与外界环境互动,它同样可以和思维链结合,我们会用小样本提示展示给模型一个推理与行动结合的框架,也就是针对问题把步骤进行拆分,每个步骤要经过推理、行动、观察。

  • 推理是针对问题或上一步观察的思考,行动是基于推理与外部环境的一些交互,比如搜索引擎对关键字进行搜索
  • 观察是对行动得到的结果进行查看,举个例子:

如果问一个知识截断在2022年1月的AI大语言模型,2022年欧冠的冠军是哪个球队,它是无法回答上来的。但如果把搜索引擎作为AI可交互的工具,结合ReAct框架,它得到答案的过程可能会是这样:“2022年欧冠的冠军是哪个球队?” 首先针对问题,它会思考要回答这个问题需要去查找赛果信息,这个AI能借助Bing,所以它的后续行动是搜索。搜索的关键字是"2022 UEFA Champions League champion",接下来它开始观察行动带来的结果,也就是得到了一系列包含欧冠信息的网页。

推理1: 用户想知道2022年欧冠的冠军是哪个球队,需要查最新的赛果信息 行动1: 在Bing输入"2022 UEFA Champions League champion"进行搜索 观察1: 出现了一些包含2022年欧冠冠军信息的网页

针对上一步行动的结果,它开始了新一轮的推理,某个新闻网站的链接标题提到了决赛。所以可能包含需要的信息。因此对应这一步行动就是点进那个链接,进入网页后它观察到有一段话提到了夺冠球队,并且有决赛对手和比分信息。

推理1:用户想知道2022年欧冠的冠军是哪个球队,需要查最新的赛果信息 行动1:在Bing输入"2022 UEFA Champions League champion"进行搜索 观察1:出现了一些包含2022年欧冠冠军信息的网页 推理2:Sporting News的链接标题包含"2022 Champions League final",可能包含所需信息 行动2:点击进Sporting News的链接 观察2:网页上有一段话提到"Real Madrid were crownedEuropean champions...1-0 win over Liverpool in the 2022 Champions League final..."

于是,针对这些信息它继续思考,下一步应该进行引用,给用户提供答案

推理1: 用户想知道2022年欧冠的冠军是哪个球队,需要查最新的赛果信息 行动1: 在Bing输入"2022 UEFA Champions League champion"进行搜索 观察1: 出现了一些包含2022年欧冠冠军信息的网页 推理2: Sporting News的链接标题包含"2022 Champions League final",可能包含所需信息 行动2: 点击进Sporting News的链接 观察2: 网页上有一段话提到"Real Madrid were crownedEuropean champions...1-0 win over Liverpool in the 2022 Champions League final..." 推理3: 需要引用有关皇家马德里赢得2022年欧冠冠军的信息,并为用户提供答案 行动3: 2022年欧洲冠军联赛(欧冠)的冠军是皇家马德里限人,他们在决赛中以1-0击败了利物浦队,赛事于2022年5月28日在巴黎举行。

因此,最后一步行动就是把查到的信息进行总结,告知用户最终答案。通过ReAct,可以看到模型一步欧接近答案的任务解决轨迹,与人类很相似了,通过分步推理的思维链,模型不仅可以获得更准确的答案,而且我们也可以通过这些轨迹进行验证。而且,观察和行动步骤增加了与外部环境的交互,能够帮助模型突破一些固有限制。比如在搜索引擎输入关键字、查看网页上的信息等,可以减少知识截断带来的影响 像ChatGPT的Web Browsing功能就是增加了与Bing搜索进行交互的能力,从而能够回答实时信息。这有利于用户对信息来源的可靠性和真实性进行验证 而且ReAct框架的Action 行动不专指搜索和浏览网页,而是AI模型所支持的任何行动,比如如果模型可以和代码解释器交互,那运行代码可以被作为行动选项。如果模型可以访问外部文档,那从文档里查找关键字可以被作为行动选项。如果模型可以调用某个应用的API,那和哪个应用交互也可以被作为行动选项。要把不同外部数据和工具为模型所用。用代码实现的话,可以借助LangChain等框架,帮助简化构建大语言模型应用程度的流程

本文作者:sora

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!