UserWarning: Could not find response key `[/INST]` in the following instance: [INST] ...
在微调模型的时候遇到该问题,log文件如下:
This instance will be ignored in loss calculation. Note, if this happens often, consider increasing the
max_seq_length.warnings.warn(/home/wanglinjie/anaconda3/envs/chatkbqa/lib/python3.9/site-packages/trl/trainer/utils.py:110: UserWarning: Could not find response key
[/INST] in the following instance: [INST] << SYS>><< SYS>>找到的解决方案:
- https://github.com/huggingface/trl/issues/980
- https://discuss.huggingface.co/t/zero-loss-while-finetuning-llama2-usin-sft-trainer-and-the-use-of-collator/63831
这两个都提出,将collator进行修改:
变成response_template = “Answer: [/INST]”
collator = DataCollatorForCompletionOnlyLM(tokenizer.encode(response_template, add_special_tokens = False)[2:], tokenizer=tokenizer)
原因:
在NLP任务尤其是生成式任务中,通常会有一个响应模板,用于标记模型的输出部分,这个模板用于知识模型生成的答案部分
分词器处理文本时,可能会根据文本上下文生成不同token ID,当文本中包含更多单词时,分词器可能产生不同token id,这导致在预处理数据时,响应模板中的token id与实际数据中的不匹配,从而导致模型无法正确识别响应部分
如果响应模板在数据中找不到,模型会忽略这些样本,因为它们无法正确计算损失值
解决:
确保在预处理数据时,响应模板的token id与实际数据中的token id一致。可通过以下步骤实现:
- 定义一个响应模板
- 创建数据整理器
add_special_tokens=False:
在编译文本时,分词器不会添加任何特殊标记。
把特殊标记禁止,就能解决该问题。
默认为True的话,就会在里面有一些< SEP>什么的,导致识别失败。
添加完这个,就没问题了,有loss了
7056

被折叠的 条评论
为什么被折叠?



