Open RileyShe opened 1 year ago
总的来说模型的任务是预测下一个token。 首先你贴的预处理代码中记录了prompt的长度。
然后在这个函数中,将prompt部分的label设为了-100(CrossEntropyLoss 的ignore_index),也就是这部分的loss不计算,只保留target_id 部分的loss。
总的来说模型的任务是预测下一个token。 首先你贴的预处理代码中记录了prompt的长度。
然后在这个函数中,将prompt部分的label设为了-100(CrossEntropyLoss 的ignore_index),也就是这部分的loss不计算,只保留target_id 部分的loss。
明白了 谢谢!
请教一下,在信息抽取任务上做的微调,微调后的效果很差,而用小模型T5微调后效果就很好。不明白是为什么??
总的来说模型的任务是预测下一个token。 首先你贴的预处理代码中记录了prompt的长度。 https://github.com/mymusise/ChatGLM-Tuning/blob/997393046a49510e6cda36962f9a399297959311/finetune.py#L29
然后在这个函数中,将prompt部分的label设为了-100(CrossEntropyLoss 的ignore_index),也就是这部分的loss不计算,只保留target_id 部分的loss。
明白了 谢谢!
请教一下,在信息抽取任务上做的微调,微调后的效果很差,而用小模型T5微调后效果就很好。不明白是为什么??
增加了训练epoch, 现在看起来是有效的了。但有发现新的问题。
店名:赵记黑鸭泰来店,地址无提及
是正确的, 跟微调的数据一致。但是后面的 “问题:如何评价.....” 是多出来的,而且每条推断结果中都多出几乎同样的字符串//@mymusise @yinzhang809 是否能给个提示 问题在哪里~
这个问题应该是eos没设置对,不知道你拉的代码是什么时候的, 参考 #55 与 #60 这俩issue
“”“ def preprocess(tokenizer, example, max_seq_length): prompt = example["context"] target = example["target"] prompt_ids = tokenizer.encode(prompt, max_length=max_seq_length, truncation=True) target_ids = tokenizer.encode( target, max_length=max_seq_length, truncation=True, add_special_tokens=False ) input_ids = prompt_ids + target_ids + [tokenizer.eos_token_id] return {"input_ids": input_ids, "seq_len": len(prompt_ids)} “”“
input_ids = prompt_ids + target_ids + [tokenizer.eos_token_id] 这里有个问题,在finetune时的input_ids为什么是prompt_ids + target_ids ?那么在微调是要预测的是什么? 不是应该 labels=target_ids 吗?? 在微调时 不是要预测labels吗?
@mymusise @ypwhs