自动批改如何评估:教师基准、分数误差与人工复核

自动批改的难点,不只是判断答案是否包含关键词。主观题往往涉及得分点、论证完整度和部分正确答案的给分尺度。要判断批改是否可靠,应让教师与模型依据同一份量表独立评分,再比较差异。

先建立评分基准

为每道题记录题目、作答、满分、评分量表、教师评分与扣分依据。教师应在看不到模型结果的情况下完成首次评分;存在争议的题目由第二位教师复核,保留原始评分与仲裁理由。

{
  "submission_id": "sample-001",
  "question_id": "q001",
  "full_score": 10,
  "rubric_version": "v1",
  "teacher_score": 8,
  "teacher_comment": "核心概念正确,但缺少对关键边界的解释。"
}

样本应覆盖不同题型、分数段、空答、部分正确、答非所问和文档解析异常。几道题足以检查评估管线是否能运行,却不足以证明批改质量稳定。答卷身份信息应与评估数据分离,报告只保留必要的匿名编号。

MAE 衡量平均分数差距

平均绝对误差定义为:每个样本的模型分数与教师分数之差取绝对值,再对全部样本求平均。MAE 的单位与原始分数相同,因此报告必须说明满分尺度。

MAE = mean(|模型评分 − 教师评分|)

教师评分:[8, 9, 6]
模型评分:[7, 9, 5]
绝对误差:[1, 0, 1]
MAE = (1 + 0 + 1) / 3 ≈ 0.67 分

这是一个 10 分制计算示例,不构成上线结论。若不同题目的满分不一致,可以额外报告归一化误差:先将每题绝对误差除以该题满分,再求平均。这样比较的是相对评分尺度,但仍要保留分题型结果,避免掩盖关键题目的大偏差。

除 MAE 外,可同时记录平均有符号误差,用于识别系统性给分偏高或偏低;还应查看最大误差、严重误判数量和高风险题目的具体案例。

等级一致性补充观察决策差异

如果业务会根据分数划分等级,可以预先固定分档规则,再计算 Cohen’s κ。它衡量扣除机会一致因素后的评分者一致性。对于有序等级,可以考虑加权 κ,但应明确使用线性还是二次权重。相关定义与接口见 scikit-learn 指标文档。

例如,以得分比例划分三个等级:低于 60%、60% 至不足 85%、至少 85%。这些边界只是演示,需要在评估开始前按实际用途确定。κ 受类别分布影响;当样本几乎全在同一档时,仅看 κ 容易误读,应同时报告混淆矩阵和直接一致率。退化情况下得到未定义值,应说明原因,不能强行转成零分或通过。

不要只对“成功匹配的题目”算分

评估脚本常见的隐患是仅取模型结果与教师数据的 ID 交集。若模型漏批了几道难题,剩余样本的 MAE 反而可能变好。因此必须另外报告覆盖率、缺失题目、重复题目和越界分数。

from math import isfinite

def grading_mae(reference, predictions):
    if not reference:
        raise ValueError("empty reference")
    expected, actual = set(reference), set(predictions)
    if expected != actual:
        raise ValueError({
            "missing": sorted(expected - actual),
            "unexpected": sorted(actual - expected),
        })
    errors = []
    relative_errors = []
    for qid, row in reference.items():
        full = float(row["full_score"])
        teacher = float(row["teacher_score"])
        model = float(predictions[qid])
        if not all(isfinite(x) for x in (full, teacher, model)):
            raise ValueError("non-finite score")
        if full <= 0 or not (0 <= teacher <= full and 0 <= model <= full):
            raise ValueError("score out of range")
        errors.append(abs(model - teacher))
        relative_errors.append(abs(model - teacher) / full)
    return {
        "mae": sum(errors) / len(errors),
        "normalized_mae": sum(relative_errors) / len(relative_errors),
    }

这段代码只演示离线计算,输入假定已经按题号验证并去重。接入真实 Agent 时,应单独完成答案解析、模型调用与结果适配;不要把某个项目的内部字段当作通用接口。

把人工复核作为独立指标

人工改分率可以定义为:已完成复核且被改分的答卷数,除以全部已完成复核的答卷数。如果按题目统计,分子与分母必须同时改为题目数量。未复核记录不能当作“无需修改”。

还应记录改分幅度和原因:是漏识别、得分点遗漏、量表歧义,还是教师调整了尺度。低改分率可能意味着质量较好,也可能来自复核覆盖不足;它不能单独证明系统可靠。

从差异分析走向改进

对误差最大的样本逐条复核,优先修复输入解析和评分量表问题,再调整提示词。重测时保持题目、教师基准和模型配置可追溯,同时报告漏批率与大误差案例。自动预批改应提供分数和可定位的依据,正式成绩的确认仍应保留明确的人工责任边界。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇