minimind/dataset
Linxiushen d6401cbb92 [fix] PretrainDataset 按 token id 屏蔽 padding,会误伤正文里字面的 <|endoftext|>
pad_token 是 <|endoftext|>(id 0)。正文里字面出现这个串时会被编成同一个 id,
而 labels[input_ids == pad_token_id] = -100 是按 token id 屏蔽的,
于是这个真实的正文 token 被当成 padding 从 loss 里丢掉。

改为按位置屏蔽 labels[n_real:] = -100,n_real = len(bos + 正文 + eos)。
padding 只可能出现在序列尾部,所以按位置屏蔽在语义上更准确,也更便宜。

SFTDataset 不受影响:它的 generate_labels 从全 -100 出发、扫描
assistant 区间来填,不依赖 pad id。
2026-09-20 10:36:32 +08:00
..
__init__.py 250426 2025-04-26 10:07:55 +08:00
dataset.md [fix] git track 2025-10-21 23:09:00 +08:00
lm_dataset.py [fix] PretrainDataset 按 token id 屏蔽 padding,会误伤正文里字面的 <|endoftext|> 2026-09-20 10:36:32 +08:00