← 返回目录
ap5.2实操⏱ 约 9 分钟

规则评分:能用代码判的,先用代码判

免费、秒出、绝对稳定——以及它 58% 的天花板

🔎 最后验证 2026-08📚 来源:本节规则 vs 模型判分对比为 ECS 实测(2026-08,12 条人工标注样本,脚本与原始输出见本节代码)🧰 Python、DeepSeek API
为什么学这个

评测的第一个问题永远是:怎么判对错?

最朴素的答案:用代码判——关键数字在不在答案里?JSON 能不能解析?字段类型对不对?这类判分免费、毫秒级、绝对稳定,能跑在每次提交上。

但它有天花板。本节实测:同一批答案,规则评分准确率 58%,模型判分 100%——差距全在"一周之内""五十九元"这类换个说法的正确答案上。

先用好规则,再知道它什么时候不够用。

💡 打个比方

判客观题用标准答案卡:秒出、零成本、绝不出错。判作文得请老师:贵、慢、可能有主观偏好。

聪明的做法不是二选一,而是:能进答案卡的都进答案卡,剩下的才请老师

规则评分能判什么

类型规则例子
格式合法JSON 能否解析、字段是否齐全、类型对不对ap3.2 的校验器
关键事实标准答案里的数字/关键词是否出现"答案里有没有 59"
结构约束长度范围、是否含必需段落、有无禁用词"回答不超过 200 字且必须带引用编号"
一致性字段之间的关系ap3.5 的"总额 == 明细加总"
拒答识别是否包含拒答话术"含『没有查到』则判为拒答"

一条经验:凡是你能写出判断条件的,都该用规则——它不花钱,所以可以每次改动都全量跑

实测:规则的天花板在哪

12 条人工标注样本(含 4 条"意思对但换了说法"的答案):

  人工=True  规则=False 模型=True  ❌规则判错  「一周之内都可以退。」
  人工=True  规则=False 模型=True  ❌规则判错  「会员一年不到两百块。」
  人工=True  规则=False 模型=True  ❌规则判错  「订单满五十九元即可免运。」
  人工=True  规则=False 模型=True  ❌规则判错  「两小时内必须响应。」
  人工=False 规则=True  模型=False ❌规则判错  「24 小时内响应即可。」

  规则评分准确率:7/12 (58%)
  模型判分准确率:12/12 (100%)

两类失败,方向相反:

① 漏判(把对的判成错):答案用中文数字("五十九元")、近义表达("一周之内")、换算说法("不到两百块")——字面不匹配,但意思完全正确

② 误判(把错的判成对):最后一条更危险——标准答案是"2 小时",候选答案是"24 小时内响应即可",里面恰好包含字符 2,规则判它通过了!

这个坑非常常见:用 "2" in answer 判分,24122026 全都会误命中。

把规则写得更结实(五个技巧)

# ❌ 危险:子串匹配
"2" in ans

# ✅ 用词边界 + 单位
re.search(r'(?<!\d)2\s*(小时|h)', ans)

# ✅ 数字归一化:全半角、中文数字、空格
normalize("两小时") == normalize("2 小时")

# ✅ 多个可接受表述都列上
any(p in ans for p in ["7 天", "7天", "七天", "一周", "7 个自然日"])

# ✅ 拒答识别单独判,别混进正确性
refused = any(w in ans for w in ["没有查到", "无法确认", "不掌握"])

最实用的一招是第三条:写一个 normalize() 统一处理全半角、中文数字、单位空格,再比对——本课实测里 5 个规则失败案例中,有 3 个能靠归一化救回来。

规则 + 模型的分工

判什么用什么
格式、类型、字段、一致性规则(永远)
精确数值型答案(且你能穷举表述)规则 + 归一化
开放表述、语义等价、"答得好不好"模型判分(下一节)
高风险场景的最终确认人工抽检(永远保留一定比例)

成本上的现实:规则评分可以每次提交跑 500 条;模型判分跑 500 条要花钱和时间——所以主力用规则、模型判分只覆盖规则判不了的那部分,是绝大多数团队的实际做法。

🔧 动手做:给你的评测写一套结实的规则(12 分钟)

  1. 跑本节代码,重点看规则判错的那 5 条,理解两类失败(漏判 / 误判)。
  2. 写你的 normalize():处理全半角、中文数字、单位空格,至少覆盖你评测集里的数字表述。
  3. 修掉子串误命中:检查你现有的规则,有没有 "2" in ans 这类写法?换成带词边界的正则。
  4. 重跑你的评测集:规则评分准确率(以人工标注为真值)提升了多少?
  5. 标记出规则判不了的那些条目——它们就是下一节模型判分的工作范围。

做到这里你应该有:一个带归一化的规则评分器 + 你的规则准确率 + 一份"规则判不了"的清单。

为什么:规则评分是评测体系的基础设施——它便宜到可以每次提交都跑,这决定了它能成为门禁(ap5.5)。模型判分再准,也不可能每次 commit 都跑 500 条。先把能自动化的自动化,把贵的留给真正需要的地方。

❓ 测验
标准答案是「2 小时」,候选答案是「24 小时内响应即可」(错误答案)。用子串匹配(判断答案里有没有字符 2)来判分会怎样?
⚠️ 避坑别让评测代码本身成为「没人测试的代码」

你的判分逻辑也是代码,它也会有 bug——而且它的 bug 特别隐蔽:分数看起来正常,但判错了一半。防御:① 拿人工标注的样本反测你的判分器(本节做的就是这件事:12 条已知真值的样本,测出规则准确率 58%);② 判分逻辑改动时,跑一遍历史评测结果看分数有没有突变;③ 关键指标定期人工抽检 —— 测量工具本身也要被测量

🤖 让 AI 帮你写结实的判分规则
我的评测要判断:【描述判断标准,比如「答案里是否包含正确的金额」】。请帮我写判分函数,要求:1) 处理数字的多种表述(阿拉伯/中文数字、全半角、单位与空格);2) 避免子串误命中(如「2」命中「24」);3) 拒答识别单独返回,不混入正确性;4) 给出一组测试用例验证判分器本身正确(含容易误判的边界)。
✅ 小结

规则评分三句话:能写出条件的都用规则(免费可全量跑)、天花板在语义等价(实测 58%)、最危险的是子串误命中;归一化能救回一大半。

下一节请"老师"上场:模型判分——实测 12/12 的理解力,以及它自带的两种偏差。

下一节 → 模型判分:能理解语义,但有偏差
🔎 来源与核验· 1 条,点开核对
本节每个关键论断都对应一个可追溯的来源 —— 这是本课程"靠谱、不过时"的底线。
「12 条人工标注样本实测:规则评分(子串匹配)准确率 7/12(58%),模型判分 12/12(100%);规则失败包含 4 例语义等价漏判与 1 例子串误命中(「24 小时」含「2」)」
📚 ECS 实测 judge_bias.py 实验一(2026-08,deepseek-chat,temperature=0)✓ 已核验 2026-08
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · ap5.3
模型判分:让另一个模型当裁判
继续读下一节 →