【toollearning论文系列3】ToolkenGPT: Augmenting Frozen Language Models with Massive Tools via Tool Embedd

ToolkenGPT: Augmenting Frozen Language Models with Massive Tools via Tool Embeddings

为了使得LLM具有使用工具的能力,现有的方法主要有两种:上下文学习和微调。微调计算成本高且对新工具适应性低;上下文学习有token长度的限制(超过了的信息就会被大模型遗忘),因此无法在上下文中演示大量的工具,展示少量示例效果又不好。因此,本文推出ToolkenGPT,与先前方法的对比如下表:

可以看出,它无需微调、可以使用大量工具、即插即用、能够使用大量数据。下面介绍他的架构。

架构

符号化:通常,LLM 将单词标记序列 s=(t_1,_2,...,t_n)的概率建模为 P(s)=\sum_{i}^{n}P(t_i|t_<i),其中每个单词标记都来自 LLM 的词汇表,即 t_i ∈ V 和 t_<i 表示第 i 步之前的部分单词标记序列。在实践中,用户通常会设置序列的前缀(称为提示)来引导 LLM 生成所需的内容,例如,回答问题。更深入地说,下一个标记的分布被预测为 P(t_i|t_<i)=softmax(W_v\cdot h_{i-1} ),其中 h_{i-1} ∈ Rd 是当前上下文的最后一个隐藏状态,W_v\in \mathbb{R}^{​{|v|\times d}}是单词标记(也称为语言模型 head)的嵌入矩阵。

给定一组有用的工具 T=\{\tau_1,\tau_2,...\},我们的目标是使 LLM 能够调用这些工具的子集来解决复杂问题。要在生成过程中调用工具,LLM 首先需要选择一个工具,然后输入参数。在图 1 所示的运行示例中,在推理过程中,选择了Math Toolkens中的square【计算平方】作为工具,并在“工具模式”中生成一个操作数 16 作为参数。一旦外部工具收到调用,它就会执行该工具并返回结果 256,返回“推理模式”。

那么思路就很清晰了,我们不需要微调所有的模型参数,相反,我们修改最后一层的维度,原来gpt思路是根据概率分布去预测单词,现在不仅仅预测单词,还预测tool。概率公式如下:

一旦 toolken 被预测为下一个标记,LLM 就会切换到 “工具模式” ,旨在为工具生成参数。具体来说,LLM 会暂停生成,并将当前生成的上下文附加到另一个提示。工具模式下的提示由预测工具的上下文演示组成,然后 LLM 可以按照演示中的模式来完成当前工具调用的参数。最后,将参数发送到指定的工具执行,并将返回的值发送回推理模式下的文本。【看图一】

作为一种高效微调的方式,其实和prompt tuning 和 prefix tuning差不多,prompt tuning 和 prefix tuning是在改第一层,toolken是在改最后一层,不同的是,改第一层梯度反向传播的时候需要计算后面的所有层,而改最后一层就没有这么大的计算量了。

那具体是怎么训练W_\tau的呢?这里用图 1 中的相同示例来展示如何训练。具体来说,“面积为 256 平方英尺......”可以被标记成单词标记序列 s = (“the”, “area”, “is”, “2”, “5”, “6”, “square”, “feet”, ...)。为了指示何时预测 toolkens,我们需要一个混合了词元和 toolkens 的平行序列,即 s′ = (“the”, “area”, “is”, “[square]”, “[N/A]”, “[N/A]”, “square”, “feet”, ...)。s 中 (“2”, “5”, “6”) 的子序列是返回的工具结果应该填写的地方,我们在 s′ 中选择概率最高的token组为toolken。因此,给定一个由配对序列 D = {(s, s′)} 组成的数据集,ToolkenGPT 的训练目标是:

具体看这个式子,指示函数代表在训练时,不考虑[N/A],LLM的工作是,预测一个toolken,并将返回的值填充回文本中。对于整个数据集的配对序列的损失求和,求最小值。【其实我不太理解,这里还是用的是单词作为损失,但需要选工具的话,不应该还需要考虑toolken预测出来的值与真实值差距最小,比如在这个例子里,真实值是256,toolken1预测出来的是15,toolken2预测出来的是257,也许在语义上选择toolken1的概率大,但是toolken2预测出来的结果更接近真实值,此时应该选择toolken几呢?我现在想到的解释是:更关注过程正确而非结果正确,因此用语义去判断而非tool返回的结果去判断。】

实验

用GSM8K-XL和FunQA(作者自己合成的数据集,one-hop和multi-hop指是否需要串行调用多次工具),结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值