提示工程 [译]

提示工程,也被称作上下文内提示,是一种和大语言模型(LLM)沟通的策略,目的是在不更新模型底层数据的前提下,引导它按我们想要的方式行动。它是一门实验性质的科学,不同模型间提示方法的效果差别很大,所以这需要通过大量的实验和经验法则来探索。

本文只讨论用于自回归语言模型的提示技术,不包括填空测试、图像生成或多模态模型。提示工程的目标,归根到底,是让模型的行为更加符合预期,增强模型的引导性。想了解更多关于可控文本生成的信息,可以看看我以前的博文

[我个人的火辣见解] 在我看来,有些关于提示技术的论文其实没必要长达 8 页,因为这些技巧很多时候一两句话就能说清楚,论文的大部分内容都在讲基准测试。一个易于使用、可共享的基准测试平台对整个社区来说会更有价值。而设置循环提示或使用外部工具并不是那么简单的事情。要让整个研究社区统一使用这样的平台,同样也是一件复杂的事情。

基础提示技巧

零样例提示(Zero-Shot)和少样例提示(Few-shot)是两种最基本的模型提示方法,很多关于 LLM 的论文都有介绍,这也是测试 LLM 性能的常用方法。

零样例提示

零样例提示就是直接给模型展示任务文本,让它给出答案。

(所有情绪分析的例子都源自 SST-2 数据集)

文本:我敢肯定这个视频游戏比电影好玩多了。
情感:

少样例提示

少样例提示则是展示一系列高品质的示例,每个示例都包括了特定任务的输入与期望输出。因为模型最开始接触到的是高质量的例子,它能更好地理解人们的意图和判断标准,所以通常少样例提示的效果会优于零样例提示。但是,这样做的代价是需要消耗更多的令牌,并且当任务的输入输出文本较长时,可能会触及到上下文的长度限制。

文本:(劳伦斯在舞台上)四处跳动,舞蹈,奔跑,流汗,擦拭脸部,总之就是展示了他最初成名时的独特才华。
情感:正面
文本:虽然所有的证据都明显指向反面,这部烂片却不知怎的装扮成一部真正的电影,那种需要全价票、在电视上大肆宣传、声称能让孩子和大人发笑的电影。
情感:负面
文本:多年来第一次,德尼罗情感上的表现非常深刻,或许是因为他被合作演员的精彩表现所触动。
情感: 正面
文本: 我觉得视频游戏比电影好玩多了。
情感:

诸多研究深入探讨了如何构建上下文示例来提升模型表现,并发现选择不同的提示词格式、训练样例及其排列顺序可以极大地影响模型的性能,效果可能从随机猜测到几乎达到行业最佳水平。

Zhao et al. (2021) 研究了少样本分类问题,并指出几种偏见可能导致基于大语言模型(如他们实验中所用的 GPT-3)性能的巨大差异:(1)当标签分布在例子中不平衡时会出现 主导标签偏差;(2)近期偏差 指模型可能倾向于重复最后出现的标签;(3)常见词汇偏差 指出大语言模型更倾向于生成常见词汇而不是罕见词汇。为了解决这些偏差,他们提出了一种方法,即通过调整模型对于输入字符串为 N/A 时的标签概率输出,使其均匀分布。

选择示例的技巧

  • 通过 kk-NN 聚类技术在嵌入空间中挑选与测试案例在语义上接近的样例(Liu et al., 2021

  • 要挑选出既多样又具代表性的示例集合,Su 等人 (2022) 推荐了一种基于图的策略:首先,利用样本之间的相似性(比如通过 SBERT 或其他嵌入模型的余弦相似度)构建一个有向图 G=(V,E)G=(V, E),在图中,每个点指向它最近的 kk 个邻居;接着,从一个空的已选样本集合 L=\mathcal{L}=\emptyset 和待选样本集 U\mathcal{U} 出发,给集合 U\mathcal{U} 中的每个样本 uu 打分,分数计算方式为 score(u)=_vv(u,v)E,vUs(v)where s(v)=ρL(v,)E,ρ>1\text{score}(u) = \sum\_{v \in \\{v \mid (u, v) \in E, v\in \mathcal{U}\\}} s(v)\quad\text{where }s(v)=\rho^{- \vert \\{\ell \in \mathcal{L} \vert (v, \ell)\in E \\}\vert},\quad\rho > 1,这样若某个样本 vv 的多数邻居已被选中,它的分数 s(v)s(v) 就会较低,从而激励系统选择更加多样化的样本。

  • Rubin 等人 (2022) 提议使用对比学习,训练特定于某个数据集的嵌入模型来选择上下文学习样本。对每对训练数据 (x,y)(x, y),可以通过语言模型 (LM) 给出的条件概率来评估一个示例 e_ie\_i (即一对格式化的输入输出数据)的质量:score(e_i)=P_LM(ye_i,x)\text{score}(e\_i) = P\_\text{LM}(y \mid e\_i, x)。对于每对训练数据,我们能够识别出得分最高和最低的 kk 个示例,将它们分别作为正面和负面的候选集,以此作为对比学习的基础。

  • 一些研究者尝试利用 Q-Learning 方法来挑选样本。(Zhang et al. 2022

  • 在不确定性驱动的主动学习的启示下,Diao et al. (2023)提出了一种观点,即在多次抽样试验中找出那些意见不一或不确定性高的样本。接着为这些样本打上标签,它们就可以在少量示例提示中发挥作用了。

示例排序的小窍门

  • 一个基本的建议是,在选择示例时要保持其多样性,确保和测试样本的相关性,并随机排序,这样可以避免出现主导标签偏差和近期效应偏差。

  • 增大模型规模或增加训练样本的数量,并不会减少不同示例排列顺序间的变化性。对于某个模型来说,某个特定的顺序可能表现良好,而对另一个模型则可能效果不佳。如果验证集比较小,可以考虑选择那些不会让模型产生极端不平衡预测或过于自信预测的排序方式。(Lu et al. 2022

指令性提示(Instruction Prompting)

在提示信息中提供少量示例的目的,是为了向模型清晰地阐述我们的目标;也就是说,用展示的例子来描述我们希望模型执行的任务。但是,少量示例可能会因为令牌使用限制而变得成本很高,并且由于上下文长度的限制会导致输入长度受限。那么,为什么我们不直接下达指令呢?

例如 InstructGPT自然指令 这样的指令型语言模型 是通过优质的(任务指令,输入,真实输出)元组对预训练模型进行微调,让语言模型(LM)更好地理解用户意图并按照指令行动。RLHF(人类反馈驱动的强化学习)是实现这一目标的常见方法。这种遵循指令的微调方式能够让模型更贴合人类意图,同时大幅降低交流成本。

在与这类指令模型互动时,我们应当详细准确地描述任务要求,力求做到具体且精确,避免使用“不要做什么”这样的负面表述,而是明确指出需要做的事情。

请判断下面这段电影评论的情感色彩是积极还是消极。请用 "正面" 或 "负面" 来标记。
文本:我觉得这个电影不如游戏好玩。
情感:

向特定受众解释内容是一种聪明的指令给予方式

  • 比如,为儿童制作教育材料时,
向一个六岁大的孩子阐释量子物理是什么。
  • 内容必须安全,
... 用的语言得适合工作环境。

在上下文指令中学习 (Ye et al. 2023) 将少量示例学习和指令提示结合起来。它通过在提示中加入多个不同任务的演示示例来实现,每一个演示都包含指令、任务输入和输出。注意到他们的实验仅限于分类任务,并且指令提示包括了所有的标签选项。

定义:确定对话中谁是说话人,"agent" 或 "customer"。
输入:我已经成功为您预订了票。
输出:agent
定义:判断问题所属的类别,"Quantity" 或 "Location"。
输入:美国最古老的建筑是哪一座?
输出:Location
定义:根据所给电影评论判断其情感倾向是积极还是消极。
输入:我觉得这个电影不如游戏好玩。
输出:

自我一致性取样(Self-Consistency Sampling)

自我一致性取样 (Wang et al. 2022a) 指的是在温度设定大于 0 的情况下抽样多个结果,然后选出这些备选中最好的一个。具体选择哪一个最佳备选可以根据任务的不同而有不同的标准。对于那些容易验证的任务,例如有单元测试的编程题,我们可以直接运行程序并通过单元测试来确认是否正确。

思维链 (CoT,Chain-of-Thought)

思维链 (CoT) 提示 (Wei et al. 2022) 则是生成一系列短句,这些短句逐步展开推理逻辑,被称为推理链 或者 理由,最终引导出答案。CoT 提示特别适用于复杂的推理任务,当使用大型模型(如超过 50B 参数)时效果尤其明显。对于简单任务,CoT 提示只能稍微帮助一下。

思维链提示的类型

思维链提示主要有两种类型:

  • 少量示例思维链。这种方式是给模型展示少量的示例,每一个示例都包括了手写的(或模型生成的)高品质的推理过程。

(所有数学推理的例子都来源于 GSM8k

问题:Tom 和 Elizabeth 正比赛谁先爬上山顶。Elizabeth 用了 30 分钟就爬上去了。而 Tom 花的时间是 Elizabeth 的四倍。Tom 需要多少小时才能爬上去?
答案:Tom 爬山耗时为 30 * 4 = <<30*4=120>>120 分钟。
换算成小时,Tom 爬山需要 120 / 60 = <<120/60=2>>2 小时。
因此,答案是 2 小时。
===
问题:Jack 是足球运动员。他打算买两双袜子和一双足球鞋。每双袜子的价格为 9.50 美元,足球鞋的价格为 92 美元。Jack 只有 40 美元。他还需要多少钱才能买齐?
答案:两双袜子的总价是 9.50 美元 * 2 = <<9.5*2=19>>19 美元。
袜子加上鞋子的总费用是 19 美元 + 92 美元 = <<19+92=111>>111 美元。
Jack 还需要额外凑 111 美元 - 40 美元 = <<111-40=71>>71 美元。
所以,他还需要 71 美元。
===
问题:Marty 有一条 100 厘米长的丝带,需要把它均匀剪成 4 段,每段再切成 5 小段。问每小段的丝带长度是多少?
答案:
  • 无示例思维链。可以用类似“让我们一步步来分析”这样的自然语句来引导模型首先构建推理链条,然后用“所以,正确答案是”来得出答案(参见 Kojima et al. 2022)。或者是使用“我们一步一步地解决,确保得出正确答案”这样的表述(参见 Zhou et al. 2022)。
问题:Marty 有一条 100 厘米的丝带,他需要将其均匀地切割成 4 等份,然后每份再切割成 5 等份。请问每份的长度是多少?
答案:我们来逐步分析一下。

小贴士与扩展内容

  • 自我一致性抽样 通过集结多个不同的答案并采用多数投票的方式,能有效提升推理判断的准确度。(Wang et al. 2022a

  • 集成学习的另一个策略是通过改变示例顺序或用机器生成的解释替换人写的解释来增加随机性,这样在进行多次试验后,通过多数投票法来确定最终的答案。(Wang et al. 2022b

  • 当训练样本只含有可以验证的正确答案,却没有解释时,我们可以采用 STaR(自我训练的推理者;Zelikman et al. 2022)的方法:(1)让大语言模型生成推理链条,仅保留那些能够得出正确答案的链条;(2)接着利用这些生成的解释对模型进行微调,并重复此过程直到模型稳定下来。但要注意,设定更高的模型“温度”可能会导致产生错误的推理过程,即便答案是正确的。如果训练样本中没有准确的正确答案,我们可能会考虑采用多数投票来确定“正确”的答案。

  • 使用复杂度更高的推理步骤的提示能够获得更好的性能表现,这里的“复杂度”是通过推理链条中步骤的数量来衡量的。在分解推理步骤时,使用换行符 \n 比使用 step i、句点 . 或分号 ; 更为有效。(Fu et al. 2023

  • 基于复杂度的一致性 方法是在所有生成的推理链中特意选择复杂度最高的几个,并在这些中进行多数投票以决定最终选择。(Fu et al. 2023

  • 此外,Shum et al. (2023) 的实验发现,含有复杂例子的 CoT(Chain of Thought)提示在复杂问题上的准确率有所提升,但对于简单问题则效果不佳;这一点在 GSM8k 数据集上得到了验证。

  • 研究显示,将 Q: 改为 Question: 能够对提升效果有所帮助。(Fu et al. 2023

  • 根据 Ye & Durrett (2022) 的研究,对于需要在文本上进行逻辑推理的自然语言处理任务(比如问答 QA 和自然语言推理 NLI),在指令中附加解释所带来的益处是有限的,而且这种影响还因模型的不同而有所差异。研究者们发现,提供的解释比起内容不一致,更有可能是事实错误。这种非事实的解释通常会导致错误的预测结果。

  • Self-Ask 方法(由 Press et al. 2022 提出)通过不断地促使模型提问后续问题,逐步构建出思考的脉络。这些后续问题的答案可以通过搜索引擎找到。与此类似,IRCoT(交错检索的对话链式推理,Trivedi et al. 2022)和 ReAct(推理加行动,Yao et al. 2023)的方法将对话链式推理的迭代提示与 Wikipedia 的 API 查询结合起来,搜寻相关的实体和内容,并将其添加回文本上下文中。

图 1: Self-Ask 如何利用外部搜索查询。

(图片来源:Press et al. 2022)。

  • Tree of Thoughts 方法(由 Yao et al. 2023 提出)通过在每一个思考阶段探索多个推理路径,来进一步拓展了对话链式推理的范畴。该方法首先把问题拆解成一系列的思考步骤,每一步都生成不同的想法,形成了一种树状结构。搜索过程既可以采用宽度优先搜索(BFS)也可以是深度优先搜索(DFS),每个阶段的情况都会通过一个分类器的提示或是多数票决定。

图 2: Tree of Thoughts 如何利用外部搜索查询。

(图片来源:Yao et al. 2022)。

自动提示设计

在自然语言处理中,“提示”就像是一串魔法咒语,它们能显著提高机器根据输入生成我们期望的输出的可能性。因此,我们可以将这些提示当作可以优化的参数,在嵌入空间通过梯度下降方法进行直接优化,如 AutoPrompt (Shin et al., 2020)、Prefix-Tuning (Li & Liang (2021))、P-tuning (Liu et al. 2021) 以及 Prompt-Tuning (Lester et al. 2021) 都是此类优化的典例。在我的文章“可控的神经文本生成”中有这些方法的详细讨论。从 AutoPrompt 到 Prompt-Tuning,我们看到了方法越来越向简化的方向发展。

APE(Automatic Prompt Engineer;Zhou et al. 2022)是一种寻找最佳提示指令的新方法。它通过在一系列机器生成的候选提示中搜索,再依照某种评分标准筛选,最终挑选出评分最高的候选提示。

  1. 启动语言模型(LLM)基于少量的输入 - 输出示例对生成指令候选,比如:{{Given desired input-output pairs}}\n\nThe instruction is

  2. 假设我们有一个训练数据集 Dtrain={(x,y)}\mathcal{D}_\text{train} = \{(x, y)\},我们的目标是找到一个指令 ρ\rho,它能使得 ρ=argmaxρE(x,y)Dtrain[f(ρ,x,y)]\rho^* = \arg\max_\rho \mathbb{E}_{(x, y) \in \mathcal{D}_\text{train}} [f(\rho, x, y)],这里的 f(.)f(.) 是针对每个样本计算的评分函数,例如可以是执行准确率 1[LM(.ρ,x)=y]\mathbb{1}[\text{LM}(.\vert \rho, x)=y] 或者是对数概率 pLM(yρ,x)p_\text{LM}(y \mid \rho, x)

  3. 运用迭代蒙特卡洛搜索技术,通过如下示例提示来优化候选方案:在保持原指令语义意义的前提下,生成一种变体。\n\n输入: ...\n\n输出:...,以提出在语义上接近的不同选项。

要自动生成连贯的思维提示,Shum 等人 (2023) 提出了一个三步骤方法:增强 - 剪枝 - 选择:

  1. 增强:针对特定问题,使用少量或零示例的 CoT 提示来生成多条伪思维链;
  2. 剪枝:根据生成的答案是否与正确答案一致来剪枝;
  3. 选择:采用降低方差的策略梯度方法,学习精选示例的概率分布,将示例的概率分布视作策略,并以验证集的准确性作为奖励。

Zhang 等人 (2023) 则使用了 聚类 技术来筛选问题并生成思维链。他们发现大语言模型(LLMs)容易出现某些类型的错误。某些错误在特征空间中是相似的,因此可以分到一起。只从错误类型频发的群组中选取一两个样本,这样就可以避免单一错误类型的过多错误示例,同时收集到多元化的示例集。

  1. 问题聚类:将问题进行特征转换并运用 kk-means 算法分类;
  2. 示例选择:从每个群组中挑选具有代表性的问题,即每个群组选取一条示例。按照与群组中心的距离进行排序,优先选择最靠近中心的样本;
  3. 逻辑推理生成:对选定的问题使用零示例 CoT 生成推理链,进而构建少量示例提示进行推断。

增强型语言模型

Mialon 等人 (2023) 对增强型语言模型进行了调研,这些模型具备了推理技能和使用外部工具的能力,内容涵盖广泛,值得一读。

检索

当我们需要处理一些任务,涉及到模型预训练时间点之后的最新知识,或者需要内部/私有知识库时,如果不在提示中明确提供相关上下文,模型是无法得知这些信息的。开放域问答系统常常依赖于首先对知识库进行检索,然后把检索到的信息作为提示的一部分。这一流程的准确率依赖于检索和生成步骤的质量。

Lazaridou 团队在 2022 年的研究(Lazaridou et al., 2022)探讨了如何结合使用 Google 搜索与大语言模型(LLMs),以改善文档检索的效果。在这个研究中,他们提出了一种方法:对于一个特定的问题 qq,从 Google 搜索返回的前 20 个网址中抽取出整洁的文本,形成了一组文档资源。由于文档通常篇幅较长,研究人员将每个文档分割为包含 6 句话的小段落 p\\{p\\}。这些段落将根据 TF-IDF 算法计算出的余弦相似度进行排名,以确定与问题最相关的证据段落。在生成回答 aa 时,只会使用排名最高的段落作为提示信息。

在闭卷式问答(closed-book QA)任务中,示例的格式如下,以此构建“少示例学习(few-shot)”的提示:通过调换问题和证据的顺序(这样会增加问题与答案之间的距离),实验发现这通常会降低在所有数据集上的性能。

证据:...
问题:...
答案:...

计算答案概率有三种不同的方法:

  1. 采用 RAG 的方式,p(aiq)=i=1nptf-idf(piq)pLM(aiq,pi)p(a\\_i \mid q) = \sum\\_{i=1}^n p\\_\text{tf-idf} (p\\_i \mid q) \cdot p\\_\text{LM}(a\\_i \mid q, p\\_i),其中 ptf-idf(piq)p\\_\text{tf-idf} (p\\_i \mid q) 表示经过归一化的 TF-IDF 算法得出的段落与问题之间的余弦相似度。

  2. 使用噪声信道推理方法,p(aiq)=pLM(qai,pi)pLM(aipi)pLM(qpi)p(a\\_i\mid q) = \frac{p\\_\text{LM}(q \mid a\\_i, p\\_i) \cdot p\\_\text{LM}(a\\_i \mid p\\_i)}{p\\_\text{LM}(q \mid p\\_i)}

  3. 结合前面所有概率计算的专家乘积法(Product-of-Experts,PoE),还额外加入了 pLM(piq)p\\_\text{LM}(p\\_i \mid q)

在他们的生成和分类任务实验中,三种答案重新排名的分数从高到低依次是:专家乘积法(PoE)> 噪声信道推理 > RAG 方法。在所有单个概率中,pLM(aq,pi)p\\_\text{LM}(a \mid q, p\\_i)pLM(qpi,a)p\\_\text{LM}(q \mid p\\_i, a) 被认为是最具参考价值的。pLM(qpi,a)p\\_\text{LM}(q \mid p\\_i, a) 能够衡量在给出证据段落和答案的前提下,问题在多大程度上能够得到语言模型的解释,因此可以作为一种可靠的答案候选重排方法。

针对 SituatedQA 数据集,当问题基于不同日期时,一个有趣的现象是:尽管预训练至 2020 年的语言模型 (LM) 能够通过 Google 搜索获取最新资讯,但它在回答 2020 年之后的问题上的表现远不如对之前问题的应对。这暗示了存在着一些差异,或者是上下文信息和模型内部知识之间的参数冲突。

研究发现,即便只进行“内部检索”,也就是在答题前先生成与话题相关的知识,也是有益的(Liu et al. 2022)。我们可以先用下面的模板来提取信息:

举个例子,先生成一些关于问题的知识:
输入:云由什么类型的水构成?
知识:云由水蒸汽构成。
输入:{问题}
知识:

然后利用模型生成的知识,继续引导语言模型,以获取答案。

编程语言

PAL(程序辅助语言模型;Gao et al. 2022) 和 PoT(思维程序提示;Chen et al. 2022) 都是让大语言模型 (LLM) 生成编程语句来解决自然语言的推理难题,将问题解决步骤委托给如 Python 解释器这样的运行环境。这种方法把复杂的计算和推理分开处理,需要依靠编程能力较强的语言模型。

图 3: 对比链式推理 (CoT) 和思维程序提示 (PoT)。(图片来源:Chen et al. 2022)。

外部 API

TALM(工具增强语言模型;Parisi et al. 2022) 则是一种通过文本到文本 API 调用增强能力的语言模型。它会指导语言模型生成 |tool-calltool input text,根据任务输入文本来构造 API 请求。当 |result 出现时,会调用指定的工具 API,并将返回的结果添加到文本序列中。最终输出则是在 |output 标记后产生。

图 4: TALM 中的 API 调用示意。(图片来源:Parisi et al. 2022)。

TALM 通过一种自我对弈的方式来不断优化和扩大其工具使用示例的数据集,并利用这个数据集对语言模型(LM)进行微调。这种自我对弈指的是模型与工具的 API 进行互动,通过判断新加入的工具 API 是否能够提升模型输出的效果来逐步扩充数据集。Toolformer 也运用了这个思路,后文会详细介绍。这个过程大概模仿了强化学习(RL)中的模式,其中 LM 充当策略网络,并通过二进制奖励信号的策略梯度来训练。

图 5: 自我对弈的迭代过程助力模型性能的提升。

(图片来源:Parisi et al. 2022)。

Toolformer (Schick et al. 2023) 是一种能够通过简单 API 接口使用外部工具的语言模型。它通过自我监督学习的方式构建,每个 API 只需几个示例即可。Toolformer 拥有的工具箱包含:

  • 计算器,用以提高 LM 在精确数学技能上的不足;

  • 问答系统,帮助解决不真实内容和错误信息;

  • 搜索引擎,提供预训练时间点之后的最新信息;

  • 翻译系统,提高对于资源较少语言的处理性能;

  • 日历,帮助 LM 了解时间进程。

图 6: 展示了构建 Toolformer 的过程。

(图片来源:Schick et al. 2023)。

Toolformer 的训练流程如下:

  1. 提示标注可能的 API 调用。通过少量示例学习,指导一个预先训练好的 LM 对数据集进行标注,标注的内容为 API 调用的使用示例。示例格式如下:

图 7: 数据集是如何被标注以进行 API 调用的。

(图片来源:Schick et al. 2023)。

  • 每一个 API 调用都以 (API 名称,对应输入) 的元组形式表示,记作 c=(ac,ic)c=(a\\_c, i\\_c),与之对应的结果记作 rr。有结果和无结果的 API 调用序列分别进行如下标注:
e(c)=APIac(ic)/APIe(c,r)=APIac(ic)r/API\begin{aligned} e(c) &= \langle\texttt{API}\rangle a_c(i_c) \langle\texttt{/API}\rangle \\ e(c, r) &= \langle\texttt{API}\rangle a_c(i_c) \to r \langle\texttt{/API}\rangle \\ \end{aligned}
  • 我们将依据概率 pLM(APIprompt(x),x1:i)p_\text{LM}(\langle\texttt{API}\rangle \mid \text{prompt}(\mathbf{x}), \mathbf{x}_{1:i}) 来调用样本 API,并在位置 ii 处选出可能性最高的前 kk 个候选位置执行 API 调用,前提是这个概率得高于我们设定的门槛。

  • 接下来,以序列 [prompt(x),x1,,xi1,API][\text{prompt}(\mathbf{x}), x_1, \dots, x_{i-1}, \langle\texttt{API}\rangle] 为开头,/API\langle\texttt{/API}\rangle 为结尾,我们将从语言模型中抽取可能的 API 调用。

  1. 基于 API 调用是否有助于模型预测接下来的词,来筛选注释。 我们将运用自监督学习的损失函数来判断哪些 API 调用确实有益。
  • 执行每个 API 调用 cic_i,获取对应的结果 rir_i

  • 计算当模型以提示开头时,对于令牌 xi,,xnx_i, \dots, x_n 的加权交叉熵损失。这里会计算两个版本,一个是考虑了 API 结果的,另一个是考虑了空序列 ε\varepsilon 的。

Li+=Li(e(ci,ri))Li=min(Li(ε),Li(e(ci,ε)))\begin{aligned} L^+_i &= L_i(e(c_i, r_i)) \\ L^-_i &= \min(L_i(\varepsilon), L_i(e(c_i, \varepsilon))) \\ \end{aligned}

只有当 LiLi+L^-_i - L^+_i 高于特定阈值的 API 调用会被保留,这表明引入该 API 调用及其结果确实有助于模型预测之后的词。

  1. 在此带注释的数据集上对语言模型进行微调。 新的训练序列被构建成 x=x1:i1,e(ci,ri),xi:n\mathbf{x}^* = x_{1:i-1}, e(c_i, r_i), x_{i:n} 这样的形式。训练数据是原始数据集(如论文中提到的 CCNet 的一个子集)及其增强版本的结合。

在推断时,解码会持续进行,直至模型输出“\to”令牌,这意味着模型期待接下来由 API 调用提供的回应。

目前,Toolformer 还不能在工具链中进行使用(也就是说,不能直接把一个工具的输出用作另一个工具的输入),也不支持交互式操作(例如,用户选择后再应用 API 的响应)。将这两项功能整合进模型,是未来发展的一大看点。

引用

引用方式如下:

> Weng, Lilian. (2023 年 3 月). Prompt Engineering. Lil’Log. https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/。

或者

@article{weng2023prompt,
title = "Prompt Engineering",
author = "Weng, Lilian",
journal = "lilianweng.github.io",
year = "2023",
month = "Mar",
url = "https://lilianweng.github.io/posts/2023-03-15-prompt-engineering/"
}

实用资源