avatar

Toolformer:LLM时代的一种知识外挂方案

最近以ChatGPT为代表的LLM方向很是火热,但不得不说的是,虽然LLM很惊艳,依然存在很多局限性,例如:数学计算能力有待提升、知识库虽然很庞大了但依然不够全面等。转念一想,我们人就很厉害吗?其实并不是。虽然普通人很难进行高位数的加减乘除计算、无法上知天文下知地理,但人类最智能的地方在于我们会使用工具。

你说让我快速算出五位数的乘法?抱歉,我不会,但我有计算机。

你问我明天的天气、明朝第二代皇帝是谁?抱歉,我不知道,但我有搜索引擎。

同样地,我们需要对一个语言模型如此严苛吗?有局限性,没关系,让模型学会使用外部工具即可

最近,由Meta AI Research(FAIR)团队发布的一项新工作——Toolformer,就是一种让LLM学会使用外部工具的方案。

原文链接:https://arxiv.org/pdf/2302.04761.pdf

1. 记号说明

将一个API调用操作($APICall$)标记为$c = (a_c,i_c)$,其中$a_c$是API名称、$i_c$是该API对应的输入。

对于一个$APICall$——$c$,及其对应的调用结果$r$,我们用下面两个式子分别表示不包含结果与包含结果的情况:

其中<API></API>是三个特殊token。

2. Toolformer

Toolformer的主要工作在于基于LLM构造增强数据集,并让模型进行微调训练。究竟要怎么增强数据集呢?主要涉及三个操作:采样、执行、过滤。

2.1 采样

熟悉HTML的朋友应该能看出来上述的三个特殊token中,<API></API>分别表示数据增强部分的起始与结束。此处的采样,便是要从数据集的原始文本中利用上下文学习(in-context learning)采样出潜在的API调用操作及其在原始文本中的位置。如下图中的红框部分所示

阅读paper到这里的时候,难免会产生一个疑问——会存在采样位置错误的情况吗?比如采样到“然后”两个字中间,岂不是毫无意义?对于这个问题,FAIR团队使用阈值法进行了处理。

我们知道,语言模型的本质就是概率分布。对于一个语言模型$M$, $p_M(z_{n+1}|z_{1},...,z_{n})$ 表示已知前$n$个token时,第n+1个token为 $z_{n+1}$ 的条件概率。那么对于一个长度为n的文本,任意一个可采样位置$i$的采样概率为

其中 $P(\textbf{x})$ 表示一句关于$APICall$的prompt。

我们从原始文本中采样$k$个位置,并利用公式(3)计算出对应位置的采样概率,只保留概率大于预设阈值$\tau_s$的位置,即$I = {i|p_i \ge \tau_s}$。

到这里,根据事先准备的API个数$m$,我们对于每一个有效的采样位置$i$可以获得最多$m$条增强数据,每条增强数据以 $[P(\textbf{x}),x_{1},...,x_{i-1},<{\rm api}>]$ 为前缀、以$<{\rm /API}>$为后缀。

2.2 执行

执行API,获得结果$r_i$。

2.3 过滤

回想最初的任务,我们期望语言模型能够在工具的帮助下更好地生成回复文本。所以,能调用API并不代表万事大吉,毕竟工具也是会犯错的,所以模型还需要学会对API返回的结果进行过滤、甄别。

从结果来看,操作可以分为两类:

  • 操作一:使用了$APICall$结果

  • 操作二:未使用$APICall$结果

其中对于第2类操作,又可以分为:

  • $APICall$结果为空——没有调用API

  • $APICall$结果不为空——调用了API,但没有使用API返回的结果

显然,上述的几个操作对于语言模型的增强作用是不一致的,这就需要对这种“增强作用”进行量化。若用$\varepsilon$表示一段空序列,则Loss有三种形式:

其中,$L_i(\textbf{z})$表示加权交叉熵,给定一组权重$(w{i}|i \in \mathbb{N})$,语言模型$M$对于以$\textbf{z}$为前缀的序列$x{1},…,x_{n}$的加权交叉熵为

根据上述划分,我们分别用$L_i^+$、$L_i^-$来表示操作一、操作二。具体地,有

作为训练目标,我们当然希望调用了API、并使用了其调用结果的操作能对提升语言模型的生成能力有显著帮助。也就是说,使用增强后的数据进行训练时,应当满足$L_i^+ \leq L_i^- - \tau_f$(或者说$L_i^- - L_i^+ \geq \tau_f$),其中$\tau_f$是一个预设的阈值。

2.4 微调

基于上述三个操作处理得到的增强数据集训练模型,此处与其他的语言模型训练任务并没有什么不同。

2.5 推理

推理时,Toolformer模型先与其他生成式语言模型一样进行正常解码,直到输出token时(假设这是第$i$个token),模型暂停输出,此时模型已经输出的序列记为$x_{1:i}$ 。调用API并获取调用结果$r$,与$x_{1:i}$ 进行拼接后,继续执行解码任务。

FAIR团队在原文中还附上了一部分样例供读者进行参考,如下图所示

3. 后记

OpenAI的GPT-3、GPT-3.5系列模型秉持着“参数量即是正义”的理念,但Toolformer等知识外挂工作却为这一理念打上了一个小小的问号。技术仍在进步,诸君且拭目以待。

Author: Qin Yue
Link: https://qinyuenlp.com/article/78fc090d5136/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.

Comment