胡慧华
菜单
首页人工智能机器学习深度学习项目实践关于我
跳至课程正文
← 人工智能课程

ARTIFICIAL INTELLIGENCE · COURSE 15

AI 评估:怎样证明它确实有用

建立测试样例,同时衡量效果、成本、耗时与业务价值。

第 15 / 18 课20–30 分钟(含实验)无需密钥 · 本地实验
平衡的数据托盘、透明保护环与评估网格,呈现可靠性和负责任的人工智能
让效果经得起验证
  • 测试样例
  • 效果衡量
01

START WITH A QUESTION

十次演示都很好,为什么员工使用后还是答错?

演示常选最清楚的问题,真实用户却会问含糊、多条件或没有答案的问题。只有把这些情况提前放进评估集,才能发现系统在哪些任务上可靠,在哪些任务上需要人工接管。

评估集是一组用来检验方案的输入与参考标准。它应与调试样例区分,并覆盖真实任务分布。不要在看过结果后随意改变成功标准,让每次比较都能复现。

02

BUILD YOUR VOCABULARY

先把三个概念讲清楚

CONCEPT 01

指标与参考标准

指标将表现转成可比较的数字;参考标准说明什么结果合格。开放式回答往往需要多项评分规则,而非逐字相同。

放进场景看

答案有依据、覆盖必要条件且不泄露资料,才算该问题通过。

CONCEPT 02

覆盖与分组

总体平均可能掩盖少数困难情况。按任务、语言、用户群或风险类型分组检查,并说明样本量。

放进场景看

普通问答全对,但无答案问题全编造,不能称为可靠助手。

CONCEPT 03

成本与时延

成本包括调用和人工复核;时延是用户等待时间。P95 时延表示约 95% 请求不超过该值,可反映较慢的一端。

放进场景看

平均快不代表每个用户都快,长尾请求同样影响体验。

03

FOLLOW THE PROCESS

把原理放进完整流程

  1. 01

    先写验收表

    规定内容正确、依据充分、边界处理和时间成本的标准。

  2. 02

    准备代表性样例

    覆盖普通、复杂、无答案和越权问题,并保留参考资料。

  3. 03

    同条件比较

    固定资料版本与配置,对候选方案使用同一批输入。

  4. 04

    分析失败再决定

    查看分组表现、错误类型和不确定性,不只追求一个总分。

六条教学样例,两个候选方案
类型方案 A方案 B
普通问题 3 条通过 3 条通过 2 条
无答案 2 条通过 0 条通过 2 条
越权问题 1 条通过 0 条通过 1 条
总体3/65/6
04

CHANGE ONE THING & OBSERVE

看见平均分背后的失败类型

切换方案与样例范围,比较通过率、平均时延及逐项结果。数据为固定教学记录,不是商业模型排名。

INTERACTIVE LAB / 15
通过3 / 6
通过率50%
平均时延353 ms
  • 材料要求 · 普通通过
  • 审批条件 · 普通通过
  • 会议预订 · 普通通过
  • 未知金额 · 无答案失败
  • 未知补贴 · 无答案失败
  • 受限资料 · 越权失败

固定六条样例,仅用于比较覆盖范围对结论的影响。这里不统计任何真实用户数据。

05

KNOW THE LIMITS

哪些结论不能直接推出?

用测试集反复调到高分

不断针对同一测试集改方案会造成过度适应。保留新的独立样例,必要时重新采样。

把主观评分当精确真值

人工或模型评分都可能不一致。应明确规则、抽样复核,并报告分歧与样本规模。

06

READ, RUN & EXPLAIN

分组统计,避免只看总分

以下示例仅使用 Python 3 标准库,可复制到本地 Python 环境运行。先看每一行的作用,再修改一个输入观察结果;无需网络或密钥。

Python 3 · 完整示例下载 .py
cases = [('普通', True), ('普通', True), ('普通', True), ('无答案', False), ('无答案', False), ('越权', False)]
for group in ['普通', '无答案', '越权']:
    results = [passed for kind, passed in cases if kind == group]
    rate = sum(results) / len(results) if results else 0
    print(group, f'{sum(results)}/{len(results)}', f'{rate:.0%}')

复制或下载只获取本课示例,不会自动执行。

逐行解释(5 行)
  1. 第 1 行cases = [('普通', True), ('普通', True), ('普通', True), ('无答案', False), ('无答案', False), ('越权', False)]

    每条记录保存类型与是否通过,是本例固定教学结果。

  2. 第 2 行for group in ['普通', '无答案', '越权']:

    分别处理三类任务。

  3. 第 3 行 results = [passed for kind, passed in cases if kind == group]

    只保留当前分组的结果。

  4. 第 4 行 rate = sum(results) / len(results) if results else 0

    通过数量除以样本数量;空组约定为 0,报告时还应标明无样本。

  5. 第 5 行 print(group, f'{sum(results)}/{len(results)}', f'{rate:.0%}')

    f 字符串将变量放进文本;.0% 表示不带小数的百分比。

预期输出
普通 3/3 100%
无答案 0/2 0%
越权 0/1 0%
07

CHECK YOUR UNDERSTANDING

换一个角度,检查自己是否理解

已回答 0 / 3 题 · 当前答对 0 题

1. 普通问题全对,能否证明助手可可靠处理无答案问题?
2. 方案比较时应该保持什么?
3. P95 时延主要帮助观察什么?
08

TAKE IT WITH YOU

带走三个判断,再做一次迁移练习

  • 验收标准先于模型比较。
  • 总体、分组和错误案例一起看。
  • 独立样例、成本和时延决定结果是否可用。
参考与延伸阅读

本课例子、代码和模拟数据为教学设计。以下一手文档用于延伸核对,不代表对本示例的认证。