🦙 第5章 基于 Llama 2 定制行业大模型
📄 一句话概括

行业模型的评测跟通用模型不一样:除了「答对没有」,还要看「该不该答」。一个什么都知道、 什么都敢答的行业模型,比一个会说「我不知道」的危险得多。 这一节用二十四道题量三类正确率,再加两个幻觉指标:该拒没拒、错了还嘴硬。

📝 本章和前面几章的关系

上一节把模型改成行业模型,这一节验它。 第 3 章 3.4 节讲的是通用评测口径, 这一节补的是行业特有的那一类题:边界题——考的不是知不知道,是知不知道什么时候该闭嘴。

一、三类题:术语、流程、边界

术语题考「知不知道这个词」:IP65 是什么、洗墙和投光有什么区别。 这类题最容易补——把词表和解释放进训练数据就行。 流程题考「知不知道这一步在第几」:验收要准备哪三样、接地在接线之前还是之后。 这类题要的是顺序,答案有对错。 边界题考「知不知道什么时候该拒绝」:这个报价能不能定、这个工期能不能保证。 这类题是行业模型最容易失分的地方。

通用模型不知道边界在哪,所以什么都敢答。 这在报价、合同、工期承诺这类场景里,是最贵的错误——它不报错,只赔钱。

二、两个幻觉指标

第一个是「该拒没拒」:本来该说「需要现场确认」的题,它给了一个确定答案。 演示里通用基座 0/4,行业微调 4/4。 第二个是「错了还嘴硬」:答错了,而且回答里没有任何表示不确定的说法。 演示里通用基座 18/18(100%),行业微调 2/4(50%)。 第二个指标比准确率更能预测事故。 准确率 80% 但错的时候都很自信,比准确率 75% 但会说「不确定」的系统危险得多—— 前者用户根本不会去核实。

这两个指标都要靠「回答里有没有不确定表述」来判,所以能代码判。 判不了的(比如阴阳怪气的自信)只能靠人审。

三、优化顺序按代价排,不按提升幅度排

演示里三类题的正确率都在八分里的六到七,差距不大。 真正的差别在代价上:边界错一次可能赔钱或担责,流程错一次是返工,术语错一次只是显得不专业。 所以第一个该补的是边界。 它不加任何知识,只是让模型学会说「我不知道」——而这句话恰恰最难训出来, 因为训练数据里几乎全是「知道」的样本。 补边界数据的做法:把「该拒的场景」写成正样本,答案就是一句规范的拒绝话术, 后面附上「需要什么信息才能答」。

注意拒绝话术要统一。同一个系统里五种不同的拒绝说法,用户会觉得这不是一个系统。

四、上线前三道闸

回归:固定题库重跑,三类都不许退。每次改数据、改提示、换模型都跑一遍。 对抗:故意问超出范围的、问错的、问带诱导的题。上线前跑一次,之后每月一次。 人审:抽五十条真实回答人工看。自动指标查不出「读起来别扭」,而它恰恰是用户最先抱怨的。

三道闸查的东西不一样,缺一不可。只做回归,边界会漏;只做对抗,退化会漏;只做人审,成本撑不住。

五、本章小结

这一章五节,回答的是「行业模型怎么从头做一遍」。 5.1 先算三笔账再立项,多数业务的量撑不起微调;5.2 行业数据是文档不是问答,脏在固定位置; 5.3 三个数决定能不能跑——参数量、字节数、显存余量。 5.4 领域预训练补说法、指令微调补任务,留两成通用语料防遗忘; 5.5 评测要加边界题,优化按代价排不按幅度排。

如果只记一句: 行业模型的价值不在「知道得多」,在「知道什么时候不该说」。一个敢在报价单上编数字的模型, 准确率再高也不能上线。 下一章换个角度:不训练,只靠检索和编排,也能让模型回答行业问题。

六、动手 Demo:二十四道行业题,三类正确率,外加两个幻觉指标

二十四道题:术语八道、流程八道、边界八道(四道该拒、四道该答)。两版模型各答一遍,同一套判分。 两版模型都是规则替身,模拟「没见过行业语料」和「见过」两种状态。 要看的是评测口径怎么定,不是这两个替身有多聪明。

# 边界题的判分跟其他两类不一样:该拒的拒了才算对
if kw and kw in a:
    ok += 1
elif not kw and refused:
    ok += 1

# 错了还嘴硬:答错,且回答里没有任何表示不确定的说法
if not ok:
    wrong += 1
    if u'不确定' not in a and u'需要现场' not in a:
        wrong_sure += 1

实跑输出:

--------------------------------------------------------------------
二十四道行业题,三类正确率,外加两个幻觉指标
--------------------------------------------------------------------


  ① 题库分三类
  --------------------------------------------------------------------
| 类别 | 题数 | 题号 |
|:---:|---|---|
| 术语 | 8 | t1、t2、t3、t4… |
| 流程 | 8 | f1、f2、f3、f4… |
| 边界 | 8 | b1、b2、b3、b4… |

  术语考「知不知道这个词」,流程考「知不知道这一步在第几」,边界考「知不知道什么时候该拒绝」。
  ! 第三类是行业模型最容易失分的地方。
  通用模型不知道边界在哪,所以什么都敢答——这在报价、合同这类场景里是最贵的错误。

  ② 两版模型,三类正确率
  --------------------------------------------------------------------
| 模型 | 术语 | 流程 | 边界 |
|---|---|---|---|
| 通用基座 | 2 / 8 | 3 / 8 | 1 / 8 |
| 行业微调 | 7 / 8 | 6 / 8 | 7 / 8 |

  两版的差别全在「有没有见过行业语料」。同一套题,同一套判分。
  ! 边界题的判分方式跟其他两类不同:该拒的拒了才算对。
  这一条一定要写进口径,否则「敢答」会被算成「能力强」。

  ③ 该拒没拒,和错了还嘴硬
  --------------------------------------------------------------------
| 模型 | 该拒已拒 | 错了还嘴硬 | 占比 |
|---|:---:|:---:|:---:|
| 通用基座 | 0 / 4 | 18 / 18 | 100% |
| 行业微调 | 4 / 4 | 2 / 4 | 50% |

  「错了还嘴硬」= 答错,而且回答里没有任何表示不确定的说法。
  ! 这个指标比准确率更能预测线上事故。
  准确率 80% 但错的时候都很自信,比准确率 75% 但会说「不确定」的系统危险得多——前者用户不会去核实。

  ④ 优化顺序:按代价排,不按提升幅度排
  --------------------------------------------------------------------
| 类别 | 当前正确 | 错一次的代价 | 优先级 |
|---|:---:|---|:---:|
| 边界 | 7 / 8 | 赔钱或担责 | 1 |
| 流程 | 6 / 8 | 返工、延期 | 2 |
| 术语 | 7 / 8 | 显得不专业 | 3 |

  三类的正确率都在 8 分里的 6 到 7,差距不大。真正的差别在代价上,所以补的方向按代价排。
  ! 三个动作里最划算的是补边界。
  它不加任何知识,只是让模型学会说「我不知道」——而这句话恰恰是最难训出来的,
  因为训练数据里几乎全是「知道」的样本。

  ⑤ 上线前还要过三道闸
  --------------------------------------------------------------------
| 闸 | 查什么 | 频次 |
|---|---|---|
| 回归 | 固定题库重跑,三类都不许退 | 每次改数据都跑 |
| 对抗 | 故意问超出范围的、问错的 | 上线前跑一次 |
| 人审 | 抽 50 条真实回答人工看 | 每周一次 |

  三道闸查的东西不一样:回归查退化,对抗查边界,人审查「读起来像不像人话」。
  ! 自动指标查不出「读起来别扭」。
  这类问题只能靠人看,而它恰恰是用户最先抱怨的——所以人审不能省,也不能全交给模型打分。

①三类题各八道。边界题里又分两半:四道该拒(超出职责范围),四道该答(在范围内但要按规矩)。 这个设计是为了防「一律拒答」刷分——如果八道全该拒,一个只会说「我不知道」的模型能拿满分。 ②两版的差距很大:术语 2/8 到 7/8、流程 3/8 到 6/8、边界 1/8 到 7/8。 边界那一列涨得最多,因为它靠的不是知识,是「知道自己的边界」。 注意边界题的判分写法和别的不同:该拒的拒了才算对。这一条不写进口径, 「敢答」就会被算成「能力强」。 ③两个幻觉指标:该拒已拒 0/4 到 4/4;错了还嘴硬 18/18(100%)到 2/4(50%)。 第二个指标更能预测事故。 通用基座十八道全错,而且十八道都错得很自信——用户拿到这种回答不会去核实,因为他看不出哪里可疑。 行业微调后还剩两道嘴硬,都是流程题。 这类错误最典型:模型知道大概流程,但对具体项目不确定,却还是给了确定答案。 ④优化顺序:三类的正确率都在六到七(八分制),差距不大,但代价差得远。 所以第一个补边界。 它不加任何知识,只是让模型学会说「我不知道」——而这句话最难训, 因为训练数据里几乎全是「知道」的样本。 ⑤三道闸:回归查退化、对抗查边界、人审查「像不像人话」。 自动指标查不出「读起来别扭」,而它恰恰是用户最先抱怨的。 ⑥本章小结那张表把五节压成五行。如果只带走一句:行业模型的价值不在知道得多,在知道什么时候不该说。

30 秒实验

  1. 把四道该答的边界题改成该拒,重跑第②步。两版模型的边界分会怎么变? 这能测出「一律拒答」能刷多少分。
  2. 把「该拒已拒」的判据从「回答里有拒绝话术」改成「拒绝且说明需要什么信息」,重跑。分数会掉吗?
  3. 给术语题加五道「行业里没有、但听起来很像」的假术语,看两版模型会不会编。 这就是对抗闸的最小版本。

常见误区

  1. 只测准确率。 「答得对」和「不该答的时候忍住」是两种能力,只测前者,训出来的模型会越来越敢答。
  2. 边界题全设成该拒。那样一个只会说「我不知道」的模型能刷满分,而它一点用都没有。 该答的题必须占一半。
  3. 优化按提升幅度排。 术语从 2/8 提到 7/8 看着提升最大,但术语错一次的代价只是显得不专业——先补代价高的那一类。
自测三问(点开对答案) 1. 为什么边界题的判分要跟其他两类不一样? —— 因为它的正确答案是「拒绝」。 如果用「答出关键词算对」的判据,一个知道边界、老老实实拒答的模型反而得零分, 而一个乱答的模型得分更高。 2. 「错了还嘴硬」为什么比准确率更能预测事故? —— 因为准确率低的系统用户会警惕,会核实; 而错得很自信的系统,用户根本看不出可疑,直接把错误答案用出去。前者损失可控,后者损失不可控。 3. 为什么优化顺序要按代价排,不按提升幅度排? —— 因为提升幅度大的那一类往往代价最低。术语从 2 到 7 很好看,但它错一次只是不专业; 边界从 1 到 7 幅度一样,错一次却可能赔钱。**资源有限时先补贵的那一类。**

第 5 章到此结束。 下一章换一条路:不训练模型,只靠检索和编排,让它回答行业问题——那条路更快、更便宜、也更容易维护。

相关笔记