Open magnificent1208 opened 1 year ago
可以这么理解。
感谢解答
看完您的代码,我的理解是: pretrain跟finetune其实损失函数计算是一致的,只是构建label的时候不一样
def process(cls, tokenizer: ChatGLMTokenizer,config, a_ids, b_ids, max_seq_length, sptoken: typing.List,sliding_size = None,sup=True): if sliding_size is None: sliding_size = max_seq_length ds = [] input_ids_qa = a_ids + b_ids + [config.eos_token_id] if sup: labels_all = [-100] * len(a_ids) + b_ids else: labels_all = copy.deepcopy(input_ids_qa)
a_ids :问题q
b_ids :答案a
[config.eos_token_id]:结束token标志
如果监督学习,则label是 遮挡了q部分的内容 如果是非监督学习(pretrain),则label是q+a,完整的问答对。
这样的理解是正确的吗?
这个if sup 的含义具体是什么?是pretrian和sft的区别对么?