You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LayoutLMv2预处理数据报Class label -100 less than -1错误如何解决

LayoutLMv2Processor预处理报「ValueError: Class label -100 less than -1」解决方案

报错根因

触发这个错误的核心原因是传入LayoutLMv2Processor的序列标注类标签不符合内置校验规则:
处理器做标签合法性校验时,仅允许标签值≥-1(其中-1是处理器约定的、特殊token/子词后缀位置的忽略标签占位符),但很多开发者会按照PyTorch序列标注任务的通用写法,提前把需要忽略计算损失的位置标签设为-100,这个值低于处理器允许的最小标签值-1,就会直接抛出校验错误。

可直接落地的修复方法

不要在传入处理器的标签里提前使用-100作为忽略位标记,按以下流程处理标签即可:

  • 调用processor处理数据时,只传入原始词级别的业务标签,不要提前做特殊token位的标签填充,也不要手动传入带-100值的标签序列,让处理器自动完成词标签到分词后token序列的对齐工作,这一步处理器会自动给所有需要忽略的位置填上占位值-1
  • 拿到processor返回的编码结果后,再统一把标签序列里所有值为-1的位置替换为PyTorch损失函数默认识别的忽略索引-100,后续训练时损失计算会自动跳过这些位置,不会影响训练效果

核心修复代码参考:

def preprocess_func(sample):
    # 传入原始数据,不要提前处理标签
    processed = processor(
        images=sample["image"],
        text=sample["words"],
        boxes=sample["bbox"],
        word_labels=sample["ner_tag"],
        padding="max_length",
        truncation=True
    )
    # 处理器对齐标签后,替换忽略位为PyTorch兼容的-100
    processed["labels"] = [
        -100 if tag == -1 else tag for tag in processed["labels"]
    ]
    return processed

注意不要通过修改Processor源码里的标签校验阈值绕过报错,这种方式会在后续升级依赖版本时失效,还可能引发标签越界的隐蔽问题。

内容的提问来源于stack exchange,提问作者Fedi Hachicha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:57:16