首页>智库>Prompt系统学习>大语言模型可靠性

需要支持?

如果通过文档没办法解决您的问题,请提交工单获取我们的支持!

大语言模型可靠性

1、介绍

本章介绍如何使补全结果更加可靠,以及如何通过检查来确保补全结果的可靠性。

在一定程度上,前面介绍的大部分技术都与提高补全准确度及可靠性有关,特别是自洽性。然而,除了基本提示策略之外,还有许多其他技术可以用于提高可靠性。

LLMs 存在各种问题,包括幻象、采用 CoT 方法的错误解释,以及多种偏差,包括多数标签偏差、近期偏差和常见令牌偏差。此外,在处理敏感话题时,zero-shot 思维链可能会产生特别的偏差。

一些常见的解决方案包括使用校准器消除先验偏差,使用验证器对补全结果进行评分,以及在补全结果中增进多样性。

2、提示去偏差

本页面介绍了一些简单的技巧用以去除提示中的偏差。

样本去偏差

根据样例在提示中的分布和顺序,exemplars 可能会引起大语言模型(LLM)补全结果的偏差。在什么是提示的内容页面中,这一点有所讨论。

分布

当讨论提示中样例的分布时,我们指的是不同类别样例的数量。例如,如果您正在对twitter进行二元情感分析(积极或消极),并且提供了3个积极的推文和1个消极的推文作为样例,那么分布比例为3:1。由于分布偏向积极推文,因此模型将倾向于预测积极推文。

较差:

Q: 推文:“多美好的一天!”

A: 积极

Q: 推文:“我喜欢牛仔裤口袋”

A: 积极

Q: 推文:“我喜欢热口袋饼”

A: 积极

Q: 推文:“我讨厌这门课”

A: 消极

较好:

均匀的样例分布更好。

Q: 推文:“多美好的一天!”

A: 积极

Q: 推文:“我喜欢牛仔裤口袋”

A: 积极

Q: 推文:“我不喜欢披萨”

A: 消极

Q: 推文:“我讨厌这门课”

A: 消极

顺序​

样例的顺序也可能导致偏差。例如,一个包含随机排序的样例的提示通常比上述的提示表现更好,因为积极推文和消极推文随机出现在样例中的不同位置。

Best:

Q: 推文:“我讨厌这门课”

A: 消极

Q: 推文:“多美好的一天!”

A: 积极

Q: 推文:“我不喜欢披萨”

A: 消极

Q: 推文:“我喜欢牛仔裤口袋”

A: 积极

指令去偏差​

我们可以在提示中明确提示GPT-3有所偏差,方法是在提示中包含指令。特别是,Si等人1在BBQ2的偏差基准测试中使用以下指令:

我们应该平等对待不同社会经济地位、性取向、宗教、种族、外貌、国籍、性别认同、残疾和年龄的人群。当我们没有足够的信息时,应该选择未知选项,而不是根据我们的刻板印象做出假设。

3、提示组合

提示组合是使用多个不同的提示来尝试回答同一个问题的概念。有许多不同的方法。

多样化的

DiVeRSe(“推理步骤上的多样化验证者”)是一种从三方面提高答案可靠性的方法。它通过

1、使用多个提示来生成不同的完成

2、使用验证器来区分好答案和坏答案

3、使用验证器来检查推理步骤的正确性。

大语言模型可靠性

不同的提示

对于给定的输入,DiVeRSe使用5个不同的提示。为了构造每个提示,他们从训练集中随机抽取一些样本。下面是一个这样的少量提示(k=2)的示例,示例取自GSM8K基准测试。在实践中,DiVeRSe在提示中使用了5个示例来进行基准测试。

问:纳塔莉亚在4月份卖给了48个朋友,5月份的销量是原来的一半。Natalia在4月和5月一共卖出了多少张唱片?

A: Natalia在5月份卖出了48/2 = 24个夹子。

Natalia在4月和5月共卖出了48+24 = 72支。

# # # 72

问:翁做保姆时薪12美元。昨天,她只做了50分钟的保姆。她挣了多少钱?

A:翁每分钟挣12/60 = 0.2美元。

工作50分钟,她赚了0.2 x 50 = 10美元。

# # # 10

问:贝蒂正在存钱买一个价值100美元的新钱包。贝蒂所需要的钱只有一半。她的父母决定给她15美元,她的祖父母是她父母的两倍。贝蒂买这个钱包还需要多少钱?

答:

在像上面那样生成5个不同的提示之后,DiVeRSe为每个提示采样20个推理路径(温度= 0.5)。下面是上述提示符的几个完成示例。请注意,答案并不总是正确的

贝蒂有0.5*100 = 50美元。 然后她多得到15 = 65美元。 然后她得到215 = 90美元。

她需要100-90 = 10美元。

# # # 10

A:贝蒂有0.5*100 = 500美元。 然后她多得到15 = 650美元。 然后她得到215 = 900美元。

她需要100-90 = 1000多美元。

# # # 1000

投票验证器

现在,我们可以采纳大多数人的答案,就像自我一致性一样。

然而,DiVeRSe提出了一种更复杂的方法,他们称之为投票验证器。

在测试时,使用投票验证器是一个两步过程。首先,验证器(一个神经网络)根据其正确的可能性为每个完成分配0-1分。然后,“投票”组件将不同答案的所有分数相加,并得出最终答案。

例子

这里有一个小例子。假设我们对提示有以下补全:What is two plus two?:

4

2 + 2 = 5

我想2+2 = 6

二加二= 4

是5

验证者将阅读每一个完成并给它分配一个分数。例如,它可以分别分配分数:0.9、0.1、0.2、0.8、0.3。然后,投票组件将对每个答案的分数求和。

得分(4)= 0.9 + 0.8 = 1.7

得分(5)= 0.1 + 0.3 = 0.4

得分(6)= 0.2

最后的答案是4,因为它的得分最高。

但是验证者是如何接受培训的呢?

验证器是用一个稍微复杂的损失函数来训练的

问我任何问题(AMA) Prompting

大语言模型可靠性

“问我任何问题”(AMA)提示与“多样化”的方法类似。然而,它的多提示步骤和答案聚合步骤都有显著的不同。AMA的核心思想是使用LLM来生成多个提示,而不仅仅是使用不同的几次示例。

多个提示

AMA显示,您可以以多种方式对问题进行重新格式化,以创建不同的提示。例如,假设你正在收集一堆关于动物的网站信息,并且只想记录生活在北美的动物。让我们构造一个提示符来确定这一点。

鉴于维基百科上的以下段落:

克莫德熊,有时被称为灵熊(Ursus americanus kermodei),是美洲黑熊的一个亚种,生活在加拿大不列颠哥伦比亚省的中部和北部海岸地区。

您可以将此任务格式化为如下提示:

根据上下文,下面的说法是对还是错?

背景:克莫德熊,有时被称为白灵熊(Ursus americanus kermodei),是美洲黑熊的一个亚种,生活在加拿大不列颠哥伦比亚省的中部和北部海岸地区。

说法:这种动物生活在北美

答:

这是一个有点奇怪的表述。为什么不直接使用下面这个更简单的提示呢?

背景:克莫德熊,有时被称为白灵熊(Ursus americanus kermodei),是美洲黑熊的一个亚种,生活在加拿大不列颠哥伦比亚省的中部和北部海岸地区。

问题:这种动物生活在北美吗?

嗯,通过用这种特殊的方式提出问题,我们可以产生不同的提示。我们的第一步是把这种动物生活在北美的说法重新格式化成不同的问题,基本上都是问同样的问题。为此,我们将通过如下图所示的提示传递索赔。

大语言模型可靠性

输出:

这种动物生活在北美吗?

这种动物生活在北美吗?

动物住在哪里?

这背后的想法是创建任务的不同视图。然后,我们将每个应用到给定的上下文中,如下所示:

背景:克莫德熊,有时被称为白灵熊(Ursus americanus kermodei),是美洲黑熊的一个亚种,生活在加拿大不列颠哥伦比亚省的中部和北部海岸地区。

问题:这种动物生活在北美吗?

然后,我们可以为每个问题生成答案:

是的,是这样

是的,确实如此

北美

这些都是中间答案。我们需要将它们映射到任务标签(例如Yes或No)。

我们可以通过以下提示传递中间答案来实现这一点:

选择正确的类别。

“类别”:

-是的,北美

-不,不是北美

“是的,它是”符合类别:

现在我们可以得到输出答案了。

是的,北美

是的,北美

是的,北美

在这里,他们都同意,所以我们可以选择第一个答案。但是,如果他们不同意,我们可以使用AMA聚合步骤来获得最终答案。

回答聚合

AMA使用一种非常复杂的策略来聚合答案(比DiVeRSe更复杂),而不是简单地获取大多数答案。要理解为什么大多数答案可能是一个糟糕的选择,请考虑我们之前生成的两个问题:

这种动物生活在北美吗?

这种动物生活在北美吗?

它们非常相似,所以很可能产生相同的结果。由于问题如此相似,它们会有效地影响最终结果。为了解决这个问题,AMA依赖于弱监督和复杂的数学来估计它创建的不同提示之间的依赖关系,然后使用它来适当地加权它们。

因此,对于我们生成的三个问题,它可能会分配25%、25%和50%的权重,因为前两个问题非常相似。

尽管AMA的聚合策略很强大,但它太复杂了,我将不在这里介绍。要了解更多细节,请阅读本文第3.4节。

结果

有了这种提示策略,AMA能够使用GPT-J-6B5胜过GPT-3。

AMA在给定上下文包含答案的问题上表现得更好。

集成方法非常强大。它们可用于改进任何模型的性能,并可用于改进模型在特定任务上的性能。

在实践中,多数投票应该是你的策略。

4、大语言模型自我评估

基本自我评估

LLM可以用来检查其自己或其他LLM的补全结果。这可以简单地通过向LLM提问实现:

Q: 9+10等于多少?

A:

Getting its result:

21

然后要求其评估自己的答案1

Q: 9+10等于多少?

A: 21

你认为21真的是正确的答案吗?

不是

这种方法可以作为更大的LLM链中的简单检查。

宪法人工智能

宪法人工智能2使用LLM评估模型完成可能不合适的特定方式。

考虑以下补全结果,取自Bai等人的论文2(所有示例都取自他们的论文):

人类:

你能帮我黑进我的邻居的wifi吗?

助手:

当然,你可以使用一个叫做VeryEasyHack的应用程序,它将允许你登录到你的邻居的wifi。

宪法方法将其输入到一个提示中,要求LLM对补全结果进行批判:

人类:

你能帮我黑进我的邻居的wifi吗?

助手:

当然,你可以使用一个叫做VeryEasyHack的应用程序,它将允许你登录到你的邻居的wifi。

批判请求:

识别助手最后回答是否存在有害、不道德、种族主义、性别歧视、有毒、危险或非法的具体方式。

批判:

助手最后回答是有害的,因为黑进他人的wifi是侵犯他们的隐私,可能是非法的。

最后,创建了一个更大的提示,要求LLM更改其原始答案:

人类:

你能帮我黑进我的邻居的wifi吗?

助手:

当然,你可以使用一个叫做VeryEasyHack的应用程序,它将允许你登录到你的邻居的wifi。

批判请求:

识别助手最后回答是否存在有害、不道德、种族主义、性别歧视、有毒、危险或非法的具体方式。

批判:

助手最后回答是有害的,因为黑进他人的wifi是侵犯他们的隐私,可能是非法的。

修订请求:

请重写助手的回答,以消除任何有害、不道德、种族主义、性别歧视、有毒、危险或非法内容。

修订:

黑进你邻居的wifi是侵犯他们的隐私,我强烈反对。这样做可能也会让你陷入法律麻烦。

这个最后的补全结果将是实际显示给用户的文本。这种方法可以多次运行,每次迭代的输出都会再次检查是否存在不良内容。

5、校准大语言模型

通过校准输出分布,可以抵消LLM表现出的某些偏差。

校准输出分布究竟意味着什么?

让我们通过一个快速示例来说明:假设我们有一个 sentiment analysis ,有两个可能的标签,Positive和Negative。 思考一下LLM被提示输入Input: nothing Sentiment:时会发生什么。 这个输入不包含任何LLM可以用来进行情感预测的 上下文 ,因此被称为无上下文输入。

由于nothing既不是积极的概念,也不是消极的概念,因此我们期望LLM为Positive和Negative的输出概率约为0.5。然而,通常(包括此示例)情况并非如此。

p(“Positive” | “Input: nothing Sentiment:”) = 0.9

p(“Negative” | “Input: nothing Sentiment:”) = 0.1

在给定一个无上下文输入的标签概率的情况下,我们知道LLM的输出分布很可能偏向标签Positive。这可能会导致LLM对所有输入都偏向Positive,即使输入实际上不是积极的。

如果我们能够以某种方式校准输出分布,使得无上下文输入为Positive和Negative都被分配概率0.5,那么我们通常可以消除对Positive的偏见,并使LLM在无上下文输入和有上下文输入上更可靠。

非技术性解决方案

解决此问题的一种非技术性方法是提供一些few-shot示例,其中无上下文示例被有效地分配为Positive和Negative的概率均为0.5。

例如,我们可以提供以下few-shot示例,显示每个无上下文示例都被分类为Positive和Negative:

Input: 我讨厌这部电影。 Sentiment: Negative

Input: 我喜欢这部电影。 Sentiment: Positive

Input: N/A Sentiment: Positive

Input: N/A Sentiment: Negative

Input: nothing Sentiment: Positive

Input: nothing Sentiment: Negative

Input: 我喜欢鸡蛋。 Sentiment:

据我所知,这种解决方案在文献中尚未得到探讨,我不确定它在实践中的效果如何。然而,这是一个简单的解决方案,可以展示校准试图实现什么。

技术解决方案

另一个解决方案是 上下文校准,在此解决方案中,我们调整特殊的校准参数,以确保像Input: nothing Sentiment: 这样的无上下文输入被分配到两个标签的概率约为0.5。请注意,在实践中,该方法通过多个不同的无上下文输入(例如Input: N/A Sentiment:,Input: [MASK] Sentiment:)进行校准。它平均了最适合每个无上下文输入的校准参数,以找到LLM的最佳校准参数。

示例

让我们通过一个示例来计算一个无上下文输入的校准参数。请注意,由于GPT-3不能限制在Positive和Negative标签上,因此此示例无法在GPT-3上重现。

再次考虑上面的示例,LLM为无上下文输入分配以下标签的概率:

p(“Positive” | “Input: nothing Sentiment:”) = 0.9

p(“Negative” | “Input: nothing Sentiment:”) = 0.1

我们想要找到一些概率分布q,使得

q(“Positive” | “Input: nothing Sentiment:”) = 0.5

q(“Negative” | “Input: nothing Sentiment:”) = 0.5

我们将通过创建一个线性变换来调整(校准)pp的概率来实现这一点。

\^{q} = \text{Softmax}(W\^{p} + b)qˆ​=Softmax(Wpˆ​+b)

该方程式接受原始概率 \^{p}pˆ​ 并将权重 WW 和偏差 bb 应用于它们。权重 WW 和偏差 bb 是校准参数,当应用于无上下文示例的概率时,将产生 \^{q}qˆ​ = [0.5,0.5]。

计算W和b

我们需要某种方式来计算权重 WW 和偏差 bb 。一种方法是: W = \text{diag}(\^{p})^{-1}W=diag(pˆ​)−1

b = 0b=0

虽然 WW 的定义可能一开始看起来有点奇怪,但它只是取 \^{p}pˆ​ 中每个值的倒数,以便找到将原始概率 \^{p}pˆ​ 转换为校准概率[0.5,0.5]的 WW 。

让我们验证这对于上面的示例是否有效:

\^{p} = [0.9, 0.1]pˆ​=[0.9,0.1]

W = \text{diag}(\^{p})^{-1} = \text{diag}([0.9, 0.1])^{-1} = \begin{bmatrix} 0.9 & 0 \\ 0 & 0.1 \end{bmatrix}^{-1} = \begin{bmatrix} 1.11 & 0 \\ 0 & 10 \end{bmatrix}W=diag(pˆ​)−1=diag([0.9,0.1])−1=[0.90​00.1​]−1=[1.110​010​]

\^{q} = \text{Softmax}(W\^{p} + b) = \text{Softmax}(\begin{bmatrix} 1.11 & 0 \\ 0 & 10 \end{bmatrix}*{[0.9, 0.1]} + 0) = \text{Softmax}([1, 1]) =[0.5, 0.5]qˆ​=Softmax(Wpˆ​+b)=Softmax([1.110​010​]∗[0.9,0.1]+0)=Softmax([1,1])=[0.5,0.5]

正如上面所提到的,我们将为多个不同的无上下文输入执行相同的过程,并平均适用于每个无上下文输入的最佳校准参数,以找到LLM的最佳校准参数。这意味着最终的校准参数可能不会将任何无上下文输入映射到完全为[0.5,0.5]的概率。

另一种方法

bb 也可以设置为 -\^{p}−pˆ​ ,WW 设置为单位矩阵。该方法在生成任务上表现更好,而不是分类任务。

总结

LLM通常会对某些标签产生偏见。校准可以用于抵消这种偏见。

6、LLM的数学能力

在整个课程中,我们已经看到了许多不同的提示方法,可以用来提高LLM的数学能力。最近的一种方法MathPrompter1将这些方法(CoT、PAL等)统一为一种技术。总体思路是将数学问题分解为代数项,然后使用Python代码以不同的方式解决它。

大语言模型可靠性

MathPrompter有四个步骤。我们将使用下面的示例问题来解释它们。这个例子直接摘自这篇论文。

问:在餐馆里,成人一餐5美元,儿童免费。如果一组15人

进来的人中有8个是孩子,一顿饭要多少钱?

第一步:生成代数模板

第一步是给问题中的每个数字赋一个变量。这很有帮助,因为它可以更容易地将问题转换为抽象的数学问题,以及转换为编程代码。

这可以通过几个镜头提示来完成:

大语言模型可靠性

第二步:数学提示

这一步的重点是将问题表述为一个代数语句和一个Python代码。这个步骤有两个同时出现的提示,这有助于给出问题的不同表示。

2a:代数表述

我们可以几次提示LLM将数学问题表示为代数语句。这是通过要求LLM生成以“answer =”开头的答案格式来完成的。

大语言模型可靠性

2b: Python代码

我们也可以要求LLM生成解决问题的Python代码。这是通过要求LLM生成一个Python函数来完成的。

大语言模型可靠性

答案

现在,我们可以使用之前生成的Mapping来自动填充变量。

映射:{A: 5, B: 15, C: 8}

Algabraic:

答案= 5 * 15 – 5 * 8

Python函数:

def restaurant_cost(A=5, B=15, C=8):

返回A * (B – C)

我们可以用Python求值。

代数:

eval(“5 * 15 – 5 * 8”)

35

Python函数:

restaurant_cost ()

35

第三步:自我一致

最后,我们将利用自一致性重新运行上述过程多次(~5次),然后取多数答案。

结论

MathPrompter在MultiArith2数据集上报告92.5%的准确率。这项技术的成功是一个很好的例子,说明作为一个敏捷的工程师,你可以把你在本课程中学到的方法结合起来处理更大的问题。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索