上次我作为出题人,给自家大模型做了一次订单识别考试,结果以5倍差距惨败。今天聊聊这份考卷是怎么设计出来的。

先说结论:好题目都是浪费纸

打开网易新闻 查看精彩图片

随便找个人出测试题,第一反应都是从正常案例入手。"250号运输箱来5箱"——模型识别出运输箱250号、5箱,通过。感觉良好,令人安心。

但这些都是白送的分。模型很少在正常案例上翻车。真正会出问题的是那些"不正常"的情况。

29道题的分布:正常订单最少

我出的29道题是这样拆分的:

  • 正常订单:4道
  • 不是订单的内容:6道(最大的一组)
  • 变更与取消:4道
  • 歧义表达:5道
  • 错别字与极端简写:3道
  • 学习机制生效后的场景:7道

正常订单是最少的一组,这是故意的。

这套程序最怕的事故是发出没人订购的货。所以考试就应该围绕这个事故来设计,而不是让模型在标准答案上刷分。

陷阱一:产品名出现≠订单

"250号运输箱的尺寸是多少?"——产品名有,数量也有,但它不是订单,是个问题。

如果程序把"识别到产品名"当作"检测到订单",货车当场就发走了。所以我埋了6道这样的题:询价的、查库存的、问物流的、打招呼的、要发票的。

陷阱二:变更和取消更阴险

"我订了5箱250号,请只发3箱"——两个数字。只读前半句,这就是个完美订单。当成新订单处理,货就发了两遍。

不只是题目要难,数据本身也得脏

原因很简单:真实数据本来就长这样。真实产品目录里永远有近似重复的条目。

拿一份干净目录跑测试,结果是什么?全过。然后接上生产数据,直接崩。如果考试通过了但生产环境出事故,那不是模型的错,是考试的错

陷阱三:学习机制本身会制造事故

这套程序是会学习的。人工确认过一次匹配,它就记住了。"250"→运输箱250号,以后自动匹配。

坦白说:我前22道题里完全没有学习场景。"改一次以后自动生效"是这个程序存在的意义,而我居然一次都没测过这条路径。后来补了7道题。

这7道题让我看到了吓人的东西——学习不只是便利功能,它可能是事故生成器

陷阱A:程序已经学会"胶带=48mm"。这时来了一条新消息:

"胶带要60mm的"

直接套用学习结果,发出去的是48mm。客户说的是60。明确规格必须压过学习结果

陷阱B:程序已经学会"250=运输箱"。然后来了一句:

"250的尺寸是多少?"

学得越多,程序越自信。用这份自信把问题当成订单读,就完了。不管学没学过,问题就是问题

这两道题它都过了。但如果我从来没写过这些题呢?它就会直接上线,没人知道它能不能过。

考试题出得太客气,考试就会通过——然后事故在真实世界里等你。