大模型指令调优领域,斯坦福的Alpaca项目贡献了一套单轮指令数据集,为后续研究打下了基础。但说到ChatGPT真正让人眼前一亮的能力,还得数它的多轮对话——用户可以追问、纠正、甚至引导模型修正自己的错误。那么,怎样让模型学会处理这种多轮交互?这就有了ChatAlpaca——一个面向大模型的多轮对话指令数据集。简单说,它利用ChatGPT在Alpaca数据集的基础上模拟用户追问,把单轮指令扩展成了更自然的多轮对话。
ChatAlpaca数据集
目前,ChatAlpaca数据集包含10,000个对话组,累计95,558条对话语句。每个对话组的第一轮对话直接来自Alpaca数据集:用户给指令,ChatGPT给回答。之后,模拟用户会根据前一轮的回答展开追问,让对话持续下去。来看一个例子:

数据集构建过程
整个构建流程其实很清晰:以Alpaca数据作为对话的起点,再通过“生成追问”的方式来扩展每一轮。每一轮对话的生成都可以拆成两步:先造用户问题,再产模型回复。
用户问题生成
这一步使用的是ChatGPT(GPT-3.5-turbo)。输入由两部分组成:一个指导prompt,加上当前对话的历史记录。这个prompt让ChatGPT扮作真实用户,可以继续深入提问,也可以在模型回答有漏洞的时候给出提示。举个具体的例子,根据下面的聊天历史:

ChatGPT生成了这样的用户问题:

另外,为了避免生成不符合用户身份的问题(比如“作为AI语言模型,我来帮助你”之类的话),ChatAlpaca还用了关键词过滤机制,把这些痕迹明显的AI口吻筛掉。
回复生成
拿到上一步生成的用户问题后,把它作为下一轮对话的起始,再和整个对话历史拼在一起,交给ChatGPT去生成回复。还是用上面那个例子,ChatGPT看到下面这样的输入:

然后生成新一回合的回复,再追加到对话记录中。重复这个过程,直到对话达到设定的最大轮数(ChatAlpaca设置为最多5轮),或者用户问题里出现了“GoodBye”。
目前ChatAlpaca已经发布了10,000组对话的数据集。后续还会推出包含20,000组对话的版本,以及由机器翻译生成的中文对话数据。除此之外,用ChatAlpaca数据集训练过的LLaMA-LoRA模型和LLaMA微调模型也计划一起放出来,那将是另一个话题了。
