如何将自定义标签传入HuggingFace数据收集器用于LLM微调?
关于Decoder LLM微调屏蔽输入部分Loss的问题解答
问题1:屏蔽输入数据的Loss计算逻辑是否合理?
完全没问题。对于GPT这类Decoder架构的LLM,采用「输入数据+标签」的Prompt格式做监督微调时,只对标签部分计算Loss是标准且合理的做法:
- 用
-100标记输入数据对应的labels位置,PyTorch的CrossEntropyLoss会自动忽略这些位置的Loss计算 - 这样模型只会聚焦于学习从输入生成目标标签的能力,避免无意义的输入部分预测,节省算力同时提升训练效率
问题2:如何避免DataCollator覆盖自定义Labels?
不需要自定义收集器,直接用内置的DataCollatorWithPadding即可:
- 原
DataCollatorForLanguageModeling在mlm=False(因果语言建模模式)下,会强制将labels设置为和input_ids完全相同,这就是它覆盖你预先设置的labels的原因 - 替换为
DataCollatorWithPadding后,它仅负责对input_ids、attention_mask、labels等字段做padding对齐,不会修改你在tokenization阶段设置好的labels值,完美适配你的需求
示例代码片段:
from transformers import DataCollatorWithPadding # 初始化收集器,指定tokenizer data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
内容的提问来源于stack exchange,提问作者Rgkpdx
相关产品推荐
相关产品推荐

