xtuner icon indicating copy to clipboard operation
xtuner copied to clipboard

[WIP] [Feature]Ensure Full Conversation Data

Open xiaohangguo opened this issue 1 year ago • 1 comments

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个字符开始,一直到最后。"
        }
    ]
}

xiaohangguo avatar Dec 29 '23 04:12 xiaohangguo

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,但是上下文关系好像乱了,对训练是不是一个负作用?

xiaohangguo avatar Mar 05 '24 01:03 xiaohangguo