大规模语言模型微调技术——Instruction和Question的区别和联系

1. 引言

在ChatGPT的时代,每个人都能够轻松使用这一强大的语言模型。这一切的实现速度比我之前所想象的要快得多。这得益于大规模语言模型微调技术,其实并没有引入太多新颖的元素。特别是有了ChatGPT作为引路人,许多事情变得更加容易和简单。尤其是借助LLaMA开源项目为基础,许多模型都是以LLaMA作为基座模型,并通过微调特定的指令数据集来实现与ChatGPT的对齐。

2. 微调数据的形式

复现ChatGPT有两种主要方法。第一种方法是Claude的方法,基本上是按照ChatGPT的路线进行复现。这种方法的优势在于,由于他们都是OpenAI的前员工,所以复现率在当前各项评测中确实是最完美的。然而,这种方法的积累和成本无法做到人人都能轻松实现。另一种方法是依赖ChatGPT的快速复现法,其中Alpaca和Vicuna是代表性的模型。虽然它们都以LLaMA作为基座模型,但Vicuna模型的性能比Alpaca更强。这其中的原因涉及多个方面。

首先,Alpaca试图从源头模拟ChatGPT的生成过程,并通过指令微调来达到与ChatGPT相似的性能。它在数据集创建上借鉴了ChatGPT的能力。Alpaca的微调数据主要是通过自我指导生成的合成指令数据集。与之相反,ChatGPT的指令数据集完全来自真实的人类用户,这使得ChatGPT的指令质量更高,更符合用户意图的分布。而Alpaca只是模拟了这种指令数据集的生成过程。

另一方面,Vicuna直接蒸馏了用户和ChatGPT之间的对话。这一方法一方面获得了用户真实意图分布的信息,另一方面训练和测试场景更加一致,因为它是基于多轮对话的。此外,就数据量而言,Vicuna使用的数据集大小远大于Alpaca使用的数据量。

此外,还有许多模型遵循这两种训练范式,甚至将它们结合起来。有关更多信息,可以参考LLMZOO。然而,通过观察许多其他大规模语言模型复现的数据集,可以发现它们的格式并不是非常统一。特别是那些以Alpaca为基准的模型,它们的数据集形式各不相同。

有些模型的训练集就是原始的问答数据集,其数据格式是问答形式,只是在更大的模型上进行微调而已。有些模型的训练集包含Instruction和Input两个部分,但实质上并没有本质上的改变,因为它们的Instruction在整个数据集上都是一模一样的。这种方式也存在一些问题。而有些模型的训练集则遵循了Alpaca的方式,确实包含Instruction和Input两个部分。然而,关于问答和指令之间的区别和联系,一直困扰着我。它们对整个模型训练的影响究竟有何区别?

3. Question和Instruction的区别

问答(QA)和指令(Instruction)是人机交互中最常见的形式之一。QA是指一问一答的形式,通常是用户提问,模型给出回答。而Instruction则源自于Prompt Engineering,将问题拆分为两个部分:Instruction用于描述任务,Input用于描述待处理的对象。以下是两种形式的例子:

问答(QA)格式用于训练模型在给定问题下提供答案。一般而言,QA训练数据包含一系列问题和相应的答案。例如:

Q: 什么是人工智能?
A: 人工智能是指由人造出来的系统表现出的、原本被认为只有人类才会表现出的智能行为。

这种格式适用于训练问答系统,或者任何需要模型理解问题并提供准确答案的任务。

指令(Instruction)格式用于训练模型按照给定指示执行任务。例如:

I: 将以下句子翻译成英文:我爱学习人工智能。
O: I love learning artificial intelligence.

这种格式的训练数据适用于训练生成模型,尤其是在需要模型执行具体任务(如翻译、写作、代码生成等)时。

因此,问答(QA)格式的训练数据通常用于训练模型回答基于知识的问题,而指令(Instruction)格式的训练数据更适用于训练模型执行具体任务。

4. Question和Instruction的联系

然而,这并非是一个强制性规定,因为许多任务可以被表述为问题或指令。例如,你可以将"将以下句子翻译成英文:我爱学习人工智能"表述为一个问题,比如"我爱学习人工智能"这句话的英文是什么?反之,你也可以将"什么是人工智能?“表述为一个指令,比如"解释下面名词的含义:人工智能”。

将问题转化为指令可能有助于模型更好地理解任务的目标,尤其是在任务需要执行特定操作时。例如,对于问题"请解释VC银翘片和双黄连口服液之间的区别",我们可以将其拆分为以下两部分:

指令(Instruction):请解释下面两个药品之间的区别。
输入(Input):VC银翘片和双黄连口服液。

在这个例子中,模型需要解释两种药品之间的区别。通过将问题转化为指令,模型可能更容易识别任务的关键部分,比如在这个例子中,需要解释的是两种药品的名称。

此外,指令的形式可能使模型具有更好的泛化能力,因为它强调了任务的性质,而不仅仅是特定的输入。例如,在"请解释下面两个药品之间的区别。VC银翘片和双黄连口服液"这个例子中,模型可能会学会对任何给定的两种药品进行类似的比较和解释,而不仅仅是针对VC银翘片和双黄连口服液。

当然,选择使用哪种格式通常取决于具体需求,包括任务类型、模型的预期行为,以及训练数据的可用性。对于某些任务,混合使用这两种格式的训练数据可能会产生最佳结果。

5. 现有模型的一些想法

随着越来越多的"速成"chatGPT模型的出现,指令微调的方法逐渐变得普遍,并且越来越多的人开始尝试在下游任务上应用这种方法进行评测。接下来有几个问题需要进一步验证:

  1. 指令微调的方法是否适用于下游任务?
  2. 是否需要在之前的一些自然语言理解任务上评测现有的大模型性能?
  3. 通过指令微调的方法到底提升了模型的哪些性能方面?

关于第一个问题,指令微调的方法未必适用于所有下游任务。正如之前的分析所述,指令微调的目的是完成特定任务,而不是更好地完成任务。真正能够完成任务的能力仍然需要通过语言建模任务来学习。事实上,从本质上来说,目前的大模型和之前的模型并没有太大区别,即使它们展现出非常高级的自然语言理解能力,最终还是通过语言建模来实现的,只是表现得更像真正理解文本的能力。因此,指令微调对于完成特定任务是有效的,但是对于提升特定任务的性能而言,则取决于具体任务的形式。如果是自然语言生成任务,例如摘要、续写、翻译,甚至生成式信息抽取等,那么其实和语言建模没有太大区别,持续的训练对于模型性能的提升是有帮助的。如果是一些判别任务,例如分类、选择题等,可能只需要少量的样例训练就可以让模型输出特定格式的结果,但增加训练样本数量未必能增强模型的性能,这取决于任务是否更接近生成任务。当然,如果只想追求解码上的固定格式,可以使用引导(Guidance),前提是能够获取整个模型的输出概率分布。

对于第二个问题,我认为评测的方式取决于模型是基于chat化的还是非chat化的,评测的角度是考虑知识还是交互。个人而言,如果关注的是知识方面,更重要的是评测基座模型,即非chat化的模型,因为chat本身只是让模型按照用户指令进行交互,并不能代表任务的好坏。当然,如果有强化学习和人类反馈的训练,这可能会提升性能,前提是用户的反馈具有指导性,而不仅仅是价值观和偏好性的对齐。对于chat化的模型,我认为应该从交互或对话等方面进行评估,纯粹的题目解答评估可能对chat系列模型不利。目前,我也在这个问题上进行研究。

对于第三个问题,指令微调到底提升了模型的哪些性能方面。通过前面的讨论,我初步得出的结论是,指令微调显著增强了模型按照指令执行任务的能力。然而,对于任务的执行质量,可能需要继续使用语言建模的方式进行训练才能得到。当然,关于上述三个问题,我相信关于Instruction的研究已经有一些结论了,只是在复现ChatGPT系列模型下,这些问题可能变得更加尖锐。

至于其他的研究方式,你可以查看最近ACL和EMNLP等会议上录用的论文,了解当前的研究进展。

6. 小结

在ChatGPT时代的指令微调技术正迅速发展,为我们提供了一种更加精确和有效的方式来训练模型执行特定任务。虽然仍然存在一些待验证的问题,比如指令微调在下游任务中的应用性、对现有大模型性能的评测需求以及指令微调对模型性能的具体提升,但这些问题也为我们提供了更多的研究和探索的机会。

通过不断的实践和研究,我们可以更好地理解指令微调的本质和潜在局限性,并进一步探索其在不同任务和场景下的适用性。这种探索将推动我们对语言模型的理解和应用的进一步深化,为构建更智能、更灵活的模型打开新的可能性。

在未来的研究中,我们还可以关注其他方式和方法,例如最新的论文和会议上的研究成果,以获取关于指令微调的最新进展和创新思路。这将有助于我们推动指令微调技术的发展,并在语言模型领域取得更大的突破和进步。

总之,指令微调技术在ChatGPT时代为我们带来了新的机遇和挑战。通过持续的研究和探索,我们将更好地理解和应用这一技术,为语言模型的发展和应用开辟更广阔的前景,进一步推动人机交互和自然语言处理的进步。

猜你喜欢

转载自blog.csdn.net/qq_35082030/article/details/130727016