[THUDM/ChatGLM-6B][Feature] 微调数据集怎样设计才能支持长文本分段输出

2024-07-12 838 views
1

用 ptuning 做微调,希望输出长文本,并且输出的长文本能在多轮对话中依据上下文分段输出。

譬如这样的 prompt 训练样本: { "q" : "怎样做一个煎蛋,请分段输出每一个步骤", "a":“做煎蛋一共有三步。\n1. 开火,锅内加油至6成温度. \n2. 鸡蛋放入锅里,小火慢煎并翻面. \n3.起锅放入盘中,加少量生抽 ” }

微调后,希望得到下面的效果:

问: 怎样做一个煎蛋,请分段输出每一个步骤 答: 做煎蛋一共有三步。 问: 请输出第三步 答:3.起锅放入盘中,加少量生抽 问:请输出第二步 答:2. 鸡蛋放入锅里,小火慢煎并翻面.

回答

9

这个只是infer时候,训练时候怎么训练多轮对话?

8

训练的时候一样的,你把多句话拼成一句话就好了。保持训练和预测一致就好了

3

对于这个需求,你应该把a的部分加入到prompt里,而不是做微调。

5

我是这样理解的:如果把a的部分加入到 prompt 里,意味着仅利用预训练模型本身进行已知流程的分段。但假设下游任务是一个菜谱模型,那么烹饪步骤就不应出现在 prompt 中,因为使用者本身并不了解菜谱知识,预训练模型也不知道,所以需要微调。

我的问题是,当预期输出长文本,且很可能超出模型的序列能力的时候,ptuning 是否有有效的方式进行数据集设计,支持长文本分段输出?

4

我这边实验的结果是如果单轮对话的话,我这边出的结果就和语聊库中一致。 如果多轮对话(语聊库中的问题挨着问),结果就很差。 不知道有什么方法能保证多轮对话和单轮效果一致?

1

多轮对话本质上和单论对话一样的,只是前面的prompt中需要包含前面几轮对话的信息,结果很差大概率是prompt设计的格式和他们训练的语料格式不一样。 具体可以参考https://github.com/THUDM/ChatGLM-6B/issues/130#issuecomment-1475662227 你需要将上文拼接成类似于chat接口中这样的格式。