Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

finetune的时候为何没有把<|Human|>的loss给mask掉?

未关闭
#359 0 条评论 1 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
python

调研方向

该 issue 展示了一个用于加载 JSONL 的 Python 循环,该循环会构建 input_ids 和 no_loss_spans;首先定位在 fine-tuning 期间 self.no_loss_spans 在哪里被使用。跟踪 和 Tool Responses 部分是如何表示的,然后验证 loss mask 是否与预期的训练 spans 匹配。完成的标准是:明确或修正 masking 行为,并通过项目现有的 validation path 覆盖该行为。

由索引模型根据 Issue 内容生成。

描述

        with open(os.path.join(self.data_dir, f'{self.data_type}.jsonl'), 'r') as f:
            for line in f:
                sample = json.loads(line)

                chat = sample['chat']
                num_turns = int(sample['num_turns'])

                meta_instruction = sample['meta_instruction']
                instruction_ids = self.tokenizer.encode(meta_instruction)
                assert isinstance(instruction_ids, list) and len(instruction_ids) > 0
                
                input_ids = copy.deepcopy(instruction_ids)
                no_loss_spans = [(0, len(instruction_ids))]

                for i in range(num_turns):
                    cur_turn_ids = []
                    cur_no_loss_spans = []
                    cur_turn = chat[f'turn_{i+1}']
                    for key, value in cur_turn.items():

                        cur_ids = self.tokenizer.encode(value)

                        if key == 'Tool Responses':
                            # The format tokens (<|Results|>:...<eor>\n) should have losses. 
                            cur_no_loss_spans.append((len(input_ids + cur_turn_ids) + 5, len(input_ids + cur_turn_ids + cur_ids) - 2))    

                        assert isinstance(cur_ids, list) and len(cur_ids) > 0

                        cur_turn_ids.extend(cur_ids)

                    if len(input_ids + cur_turn_ids) > 2048:
                        break

                    input_ids.extend(cur_turn_ids)
                    no_loss_spans.extend(cur_no_loss_spans)

                if len(input_ids) == len(instruction_ids):
                    continue

                assert len(input_ids) > 0 and len(input_ids) <= 2048

                self.data.append(input_ids)
                self.no_loss_spans.append(no_loss_spans)
主要语言
Python
星标
12.3k
派生
1.1k
PR 合并指标
30 天内没有已合并 PR

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

OpenMOSS/MOSS 的其他 Issue

查看 OpenMOSS/MOSS 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。