OpenLMLab / MOSS-RLHF

MOSS-RLHF
Apache License 2.0
1.2k stars 91 forks source link

关于reward model #10

Closed skepsun closed 11 months ago

skepsun commented 11 months ago

感谢贵团队在rlhf开源的最新成果,不过我有几个小问题想问:

  1. reward model的输入是完整的prompt+response,按照moss的格式应该是<|Human|>hello<|MOSS|>hi</s>这样的,那么是否意味着sft的模型也只能按照这个格式进行训练?或者也可以通过脚本转换其他的template(比如alpaca)到moss?
  2. 还有reward model的tokenizer是和sft model共用吗?比如我想使用经过词表拓展的llama作为sft model,那会不会有冲突?
Ablustrund commented 11 months ago

您好!感谢您的关注。 对于第一个问题,您提到的输入格式是正确的,如果是多轮就是将您的输入格式复用几次

<|Human|>hello<|MOSS|>hi</s><|Human|>你好<|MOSS|>嗨</s>

这里<|Human|>和<|MOSS|>只是两个特殊token,对应token id为32000和32001,所以你只需要将自己的两个特殊prompt绑定到这两个token id,就可以实现替换,而不需要更改模型。 第二个问题,这确实会有冲突,但是对于一句话,你可以使用两个tokenizer。我们的tokenizer用来对输入给奖励模型和critic model的句子进行切分。使用自己的扩充的tokenizer对输入给policy和reference model的token进行切分。这样就不会有问题了。这只需要修改少量的代码,我们对dataset进行了封装,希望粗略地分析能够帮助到你~

11zhouxuan commented 11 months ago

您好,释放的reward模型: moss-rlhf-reward-model-7B-zh 是关于helpful还是harmless数据集训练的?

Ablustrund commented 11 months ago

您好,释放的reward模型: moss-rlhf-reward-model-7B-zh 是关于helpful还是harmless数据集训练的?

都包括

skepsun commented 11 months ago

感谢回答

HuipengXu commented 9 months ago
<|Human|>hello<|MOSS|>hi</s><|Human|>你好<|MOSS|>嗨</s>

这里<|Human|>和<|MOSS|>只是两个特殊token,对应token id为32000和32001,所以你只需要将自己的两个特殊prompt绑定到这两个token id,就可以实现替换,而不需要更改模型。 第二个问题,这确实会有冲突,但是对于一句话,你可以使用两个tokenizer。我们的tokenizer用来对输入给奖励模型和critic model的句子进行切分。使用自己的扩充的tokenizer对输入给policy和reference model的token进行切分。这样就不会有问题了。这只需要修改少量的代码,我们对dataset进行了封装,希望粗略地分析能够帮助到你~

@Ablustrund 您好 这里是不是有点问题,critic model如果和policy model的tokenizer不一样,那critic model得到的value的句长和policy model得到的logit的句长就不一样,是不是没法计算pg_loss