xtuner
xtuner copied to clipboard
[WIP] [Feature]Ensure Full Conversation Data
TODO LIST
- [x] Class Packer update
- [x] 构造测例验证可行性
- [ ] 打印细节进行检查
- [ ] intern repo、check custom data模块同步修改
- [ ] confige 添加启用配置项
- [ ] 代码审查
任务目标
1.如果是最后一轮对话的 "input" 部分恰好等于 max_length,则将该轮对话的 "input" 和 "output" 一起移到下一个样本的开头。
2.如果是 "output" 部分中某个部分恰好等于 max_length,则按照默认行为处理,即将 "output" 放在下一个样本的开头。
测试样例
假设max_length=512
多轮对话,两条语料。 1.
{
"conversation": [
{
"system": "System1",
"input": "这是一个测试对话的开始。内容从0开始计数,直到第127个字符。",
"output": "这是对话的回应部分。内容从第128个字符开始,一直到第509个字符,紧接着是对下一轮对话的开始。"
},
{
"input": "这是第二轮对话的输入,内容从第510个字符开始,一直到第512个字符,然后超出最大长度,超出部分从第513个字符开始,一直到第530个字符。",
"output": "这是对超出长度的回应。内容从第513个字符开始,一直到最后。"
}
]
}
{
"conversation": [
{
"system": "System1",
"input": "这是另一个测试对话的开始。内容从0开始计数,直到第127个字符。",
"output": "这是对话的回应部分。内容从第128个字符开始,一直到第500个字符,紧接着是对下一轮对话的开始。"
},
{
"input": "这是第二轮对话的输入,内容从第501个字符开始,一直到第510个字符,然后超出最大长度,超出部分从第511个字符开始,一直到第530个字符。",
"output": "这是对超出长度的回应。内容从第511个字符开始,一直到第512个字符,然后是超出部分,从第513个字符开始,一直到最后。"
}
]
}
TODO LIST
- [x] Class Packer update
- [x] 构造测例验证可行性
- [ ] 打印细节进行检查
- [ ] intern repo、check custom data模块同步修改
- [ ] confige 添加启用配置项
- [ ] 代码审查
任务目标
1.如果是最后一轮对话的 "input" 部分恰好等于 max_length,则将该轮对话的 "input" 和 "output" 一起移到下一个样本的开头。
2.如果是 "output" 部分中某个部分恰好等于 max_length,则按照默认行为处理,即将 "output" 放在下一个样本的开头。
测试样例
假设max_length=512
多轮对话,两条语料。 1.
{ "conversation": [ { "system": "System1", "input": "这是一个测试对话的开始。内容从0开始计数,直到第127个字符。", "output": "这是对话的回应部分。内容从第128个字符开始,一直到第509个字符,紧接着是对下一轮对话的开始。" }, { "input": "这是第二轮对话的输入,内容从第510个字符开始,一直到第512个字符,然后超出最大长度,超出部分从第513个字符开始,一直到第530个字符。", "output": "这是对超出长度的回应。内容从第513个字符开始,一直到最后。" } ] }
{ "conversation": [ { "system": "System1", "input": "这是另一个测试对话的开始。内容从0开始计数,直到第127个字符。", "output": "这是对话的回应部分。内容从第128个字符开始,一直到第500个字符,紧接着是对下一轮对话的开始。" }, { "input": "这是第二轮对话的输入,内容从第501个字符开始,一直到第510个字符,然后超出最大长度,超出部分从第511个字符开始,一直到第530个字符。", "output": "这是对超出长度的回应。内容从第511个字符开始,一直到第512个字符,然后是超出部分,从第513个字符开始,一直到最后。" } ] }
2.如果是 "output" 部分中某个部分恰好等于 max_length,则按照默认行为处理,即将 "output" 放在下一个样本的开头。
这个需求是不是有问题?如果shuffle了以后虽然也能正常计算output 的loss,但是上下文关系好像乱了,对训练是不是一个负作用?