公关舆情转大模型:误报和漏报,代价根本不一样
版权与内容来源声明
本文为原创整理。文中涉及官方文档、开源仓库、论文与公开报道的内容,均在附表 A 中标注来源;引用官方原文保持原样,不作改写。文中命令、版本号与界面截图以本文成文时的实测/核验结果为准,标注「待验证」的部分请以你本地环境实际输出为判断依据。本文不推荐任何不合规的软件获取方式,也不对任何收益结果作承诺。转载请注明出处。
第 1 章 舆情场景里,两种「错」从来不等价
如果你做过一段时间的舆情监测,其实早就已经在做代价判断了:一条只是语气冲的普通用户抱怨,和一条正在被大量转发、已经有媒体跟进苗头的负面,你不会用同一个标准去处理。前者顶多算噪音,后者晚发现两个小时,后面要投入的力气完全不是一个量级。
把这种判断搬到模型上,它就变成了两个不同的错误。漏报,指的是真的负面存在,系统却没能报出来;误报,指的是本来没事,系统却把它当成负面报了出来。在舆情这个场景里,这两种错误的代价差别很大,所以不能用同一个数字去衡量它们,也不能用同一个门槛去卡它们。
这一章先把「代价不一样」这件事说清楚,后面几章才好谈指标怎么选。
1.1 漏报的代价是错过窗口,误报的代价是消耗注意力
漏报真正贵的地方,不在于「少报了一条」,而在于错过了那条还能低成本处理的窗口期。一条负面刚冒头的时候,可能需要做的只是一次私下沟通、一条补充说明;等它扩散开,同样的处理动作要乘以好几倍的人力,而且效果还会打折。
误报的代价则有两个层次。第一层是显性的:本来没事的内容占用了本该用在真问题上的人力,每一次都有人要去看、去核、去写结论。第二层是隐性的,也是最容易被忽略的——告警疲劳,指的是告警多到一定程度后,人开始不再认真看告警。它不会出现在任何一张指标表里,但它是误报最真实的代价。
1.2 只看一个数字,一定会被骗
最常见的被骗方式,是拿准确率说话。准确率就是「系统判断对的比例」——判断对的数量除以全部数量。它听起来很直观,但在舆情这种「绝大多数内容都是正常内容」的场景里,它几乎一定会骗人。
Google 的机器学习术语表里给过一个很清楚的例子:某个城市一百年只下 25 天雪,如果做一个模型每天都说「今天不下雪」,它的准确率会高得离谱,但这个模型没有任何判断能力。舆情监测是同一个结构:真正需要报出来的负面占全部内容的比例很小,所以一个「什么都不报」的系统,准确率反而会很好看。截至 2026-10-01,Google 官方术语表里仍然明确写着,准确率在类别不平衡的数据集上「通常是一个糟糕的指标」。
类别不平衡是个术语,说人话就是:正类和负类的数量差得很远。舆情里的正类(负面)远远少于负类(正常内容),就属于这种情况。
下面这张表把两类错误的差别摆开,它也是后面所有取舍的起点。
| 错误类型 | 在舆情里的具体表现 | 代价主要由谁承担 | 主要对应指标 |
|---|---|---|---|
| 漏报 | 真负面没被报出来,等发现时已经扩散 | 品牌方、公关团队 | 召回率 |
| 误报 | 正常内容被标成负面,白跑一趟 | 一线运营、研判人员 | 精确率 |
第 2 章 精确率和召回率,各自在替你回答哪个问题
上一章说了两类错误,这一章把衡量它们的两个指标讲清楚。它们的定义都不复杂,难的是知道哪个该管哪件事。
2.1 混淆矩阵:把四种结果排成一张表
混淆矩阵是一张把「系统怎么说」和「事实是什么」交叉排开的小表格,用来数清四种结果各有多少条。scikit-learn 官方文档在 3.4.4.9.1 节里把这四格分别命名为:tp(true positive)是「正确命中」,fp(false positive)是「意外报出」,fn(false negative)是「漏掉了」,tn(true negative)是「正确地没报」。
在这套命名里,需要先约定正类是谁——也就是「我们关心的那一类」。舆情场景下,正类就是「负面内容」。约定好正类之后,四格才有一致的含义。
| 事实是负面 | 事实不是负面 | |
|---|---|---|
| 系统报出来了 | tp 正确命中 | fp 误报 |
| 系统没报 | fn 漏报 | tn 正确地没报 |
对转行者来说,这张表最大的价值是:它把「说不清的感觉」变成了四个可以数的数字。只要你能数出这四格,后面所有的指标都能自己算出来,不需要记任何复杂公式。
2.2 精确率:你说「这条是负面」,有多少说对了
精确率回答的问题是:系统报出来的那些,有多少是真的。Google 官方机器学习课程给的定义是「模型的所有正类别分类中实际为正类别的比例」,公式写成 精确率 = TP / (TP + FP)。
说人话:你今天收到 100 条告警,里面有几条是真的,这个比例就是精确率。精确率低,意味着你的告警里塞了大量假警报。
2.3 召回率:真有负面里,你抓到了多少
召回率回答的是另一个问题:本来就存在的那些负面,你抓到了多少。官方定义是「所有实际正例中被正确分类为正例的比例」,公式写成 召回率 = TP / (TP + FN)。scikit-learn 文档里还提到,召回率有时也被叫作「灵敏度」。
scikit-learn 官方文档里给过一个很直观的说法:精确率是分类器「不把负样本标成正样本」的能力,召回率是分类器「找出全部正样本」的能力。这两句话建议直接背下来,因为它精确地说明了两者的分工。
还有一个常被单独拎出来讲的指标是 F1分数,它是精确率和召回率的调和平均,把两个数字合成一个。官方说法是它「对于类别不平衡的数据集,比准确率更可取」。但它有一个副作用必须知道:两个指标差得越远,F1分数就越靠近差的那一个。舆情本来就该偏一侧,所以 F1分数在舆情场景里只能当参考,不能当验收标准。
下面这段代码只是把四个数字的口径摆出来,帮助你确认自己理解的是同一件事。
⚠️ 代码待验证
tp, fp, fn, tn = 60, 40, 10, 890 # 四个数字是手工假设的,仅用于演示口径
precision = tp / (tp + fp) # 精确率:报出来的里面,真的占多少
recall = tp / (tp + fn) # 召回率:真的里面,抓到了多少
print("精确率", round(precision, 3))
print("召回率", round(recall, 3))
第 3 章 舆情要优先保召回,但误报会把告警变成噪音
指标讲清楚了,这一章讲取舍。取舍不得凭感觉,得有依据。
3.1 为什么舆情天然偏向高召回
Google 官方课程的指标选择指引表里有一条写得很直白:当假负例的代价高于假正例时,用召回率。舆情正好落在这个条件里——漏掉一条真负面的代价,明显高于多报一条假负面的代价。
所以舆情场景的第一优先级是保召回。这句话听起来简单,但它意味着你必须主动接受一个不完美的精确率。不接受这一点,就会不断把阈值往上调,最后把召回率调没了。
3.2 误报的二次代价:告警疲劳
但保召回不等于「报得越多越好」。误报一旦超过某个量,代价就不再是线性的了。当每天的告警从 20 条涨到 200 条,一线运营不会因此更仔细,反而会开始扫一眼就过、开始把整个渠道静音。这就是前面说的告警疲劳。
一旦进入这个状态,你的召回率名义上还在,实际上已经废了——因为告警虽然发出来了,但没有人真的在看。所以正确的问题不是「要不要保召回」,而是「在保住多少召回的前提下,把误报压到人能承受的范围」。
3.3 阈值往哪偏:一条可执行判据
阈值就是那条分数线。系统会给每条内容打一个 0 到 1 的「负面倾向分」,超过多少分才报出来,这个数就是阈值。
官方课程明确说:提高阈值通常会减少假正例、增加假负例;降低阈值则产生相反的效果。因此精确率和召回率通常呈反比,提高其中一个会降低另一个。
| 阈值方向 | 假正例(误报) | 假负例(漏报) | 精确率 | 召回率 | 适合什么时候用 |
|---|---|---|---|---|---|
| 往上调 | 减少 | 增加 | 上升 | 下降 | 告警已经多到没人认真看 |
| 往下调 | 增加 | 减少 | 下降 | 上升 | 漏报的代价明显更高 |
判据可以落成两步。第一步,先给「每天可承受的告警条数」定一个上限——这个数字来自你团队真实的人力,不是拍脑袋,如果一线一天只能认真看完 80 条,那上限就是 80。第二步,在这个上限之内,把阈值调到召回率最高。这样得到的阈值不是理论最优,但是你能真正执行下去的那个。
下面这段代码是阈值扫描的思路示意,用来观察两类错误怎么此消彼长。
⚠️ 代码待验证
for threshold in (0.3, 0.5, 0.7, 0.9):
fp = count_false_positive(threshold) # 误报:正常内容被判成负面
fn = count_false_negative(threshold) # 漏报:负面被放过去
print(threshold, "误报", fp, "漏报", fn)
第 4 章 分层设计:粗筛 → 细判 → 人工复核
既然一个阈值没法同时满足两头,就不要指望一个模型解决全部问题。舆情落地的通行做法是把链路拆成三层,每层目标不同,指标也不同。
4.1 三层各自的角色和目标
第一层是粗筛,目标只有一个:把真负面全留住。这一层可以容忍大量误报,因为它不直接对人,它只对下一层。它的主指标是召回率。
第二层是模型细判,目标是压误报。它面对的是第一层筛出来的候选集,候选集里已经几乎包含了所有真负面,所以这一层可以把阈值往上抬,把精确率提上来。它的主指标是精确率。
第三层是人工复核,目标是定稿和留痕。它不再追求指标,而是要求每一份对外结论都有据可查:谁在什么时候看了哪条内容、依据什么规则判的。
| 层级 | 目标 | 主指标 | 误报容忍度 | 谁来兜底 |
|---|---|---|---|---|
| 第一层 粗筛 | 不漏掉真负面 | 召回率 | 高 | 靠下一层兜 |
| 第二层 细判 | 压掉大部分误报 | 精确率 | 中 | 靠人工兜 |
| 第三层 人工复核 | 定稿、留痕、处理边界 | 无(看规则执行情况) | 低 | 人自己 |
这张表是本文最重要的一张对照表:每一层的指标必须和它的目标对齐。如果你拿第二层的精确率去考核第一层,第一层就会开始为了少报而漏掉真负面,整条链路的保护作用就没了。
4.2 人工复核插在哪一步,有三个位置可选
第一个位置是复核「报出来的」,这是最常见的做法,成本最低,但它只解决误报,对漏报无能为力。
第二个位置是复核「打分离阈值不远的」,也就是模型不太确定的中间地带。这些样本是误报和漏报的主要来源,投入产出比最高。
第三个位置是抽样复核「没报出来的」。这一点最反直觉,但恰恰最重要——因为漏报不会自己冒出来提醒你。落到执行上,可以固定每天从「判定为非负面」的池子里抽一小批人去看,抽多少按你的内容量定,重点是每天都抽,不要只在出事后才回头看。
下面是一份三层结构的配置示意,数值需要按你自己的业务实测回填。
⚠️ 代码待验证
version: 1 # 三层分流的配置结构示意,数值需按业务实测回填
layers:
coarse_filter: # 第一层:粗筛,目标是把真负面全留住
metric_focus: recall
min_recall: 0.98
action: pass_to_next
model_judge: # 第二层:模型细判,目标是把误报压下去
metric_focus: precision
min_precision: 0.70
action: pass_to_next
human_review: # 第三层:人工复核,目标是定稿和留痕
metric_focus: precision
action: final
第 5 章 用一批人工标注的样本验收,而不是「看着挺准」
「看着挺准」是转行者最容易踩的坑。你随手试了二十条,报出来十几条都对,就觉得可以上线了。但随手试的样本一定偏向你熟悉的内容,它测不出真正的漏报。
5.1 验收样本怎么造
标注就是人工给每条样本贴上「是负面还是不是负面」的答案,用来当验收的尺子。没有这把尺子,你连自己在测什么都说不清。
样本有三条纪律。第一,分层抽样——不能只从热门话题里取,冷门领域里藏着的负面才是漏报的重灾区。第二,正负例都要够,不能只有负面样本,否则你只能算出召回率、算不出精确率。第三,必须带边界样本,也就是那种「到底算不算负面,人也要讨论一下」的内容,这类样本最考验模型的判断力。
| 样本类型 | 建议占比思路 | 用来验证什么 |
|---|---|---|
| 明确的负面 | 约三分之一 | 召回率够不够 |
| 明确的非负面 | 约三分之一 | 误报多不多 |
| 边界样本(嘲讽、反话、带情绪的中性表达) | 约三分之一 | 阈值卡在哪最合理 |
占比不是铁律,但边界样本不能少。只放明确正负例的验收集,会让你的系统在上线后遇到真实内容时表现明显变差,因为真实内容里大部分都是边界情况。
5.2 标注纪律:分歧本身就是信息
标注最容易出问题的地方,是「谁标、分歧怎么办」。如果同一条内容,两个人给出不同答案,这说明规则本身不清楚,不是标注人不用心。正确的做法是把分歧样本单独留档,回头补进判定规则里。
还有一个具体做法:先写规则再标注。如果你标完 200 条才去总结规则,规则就会变成「怎么标都行」的橡皮筋。规则里必须写清楚几件事:反话和讽刺算不算负面;指名道姓的批评和泛泛的情绪发泄是否同样对待;转述他人负面言论的帖子怎么算。
5.3 验收看什么
验收时不要只报一个数字,至少看三件事。
第一,看召回率,并且要看漏掉的是哪一类。整体召回率看着还行,但漏掉的全是高热度内容,那这个结果是不能接受的。第二,分桶看,按热度分桶、按表达方式分桶,找出模型最弱的那一桶。第三,把误报逐条读一遍,看误报有没有规律——如果误报集中在某几个话题上,那往往是判定规则的问题,不是模型的问题。
下面这段代码只是把分层抽样的思路摆出来,样本数量需要按你的实际内容量调整。
⚠️ 代码待验证
sample_plan = {
"明确负面": 120, # 验证召回率
"明确非负面": 120, # 验证误报情况
"边界样本": 60, # 验证阈值卡点是否合理
}
total = sum(sample_plan.values())
print("验收集总数", total)
模型评估指标速查表 + 标注规范模板:本章用到的指标口径和一个可以直接套用的标注规范模板。放在资料包里,扫码即可获取:
第 6 章 你原来的四项能力,正好对应四个环节
讲到这里,可以把话题拉回转行本身。舆情岗位的人转过来,优势不在于会不会写代码,而在于前面这五章里的每一个判断,你其实都已经在做,只是没换过名字。
6.1 风险分级 → 阈值分级
你在舆情岗上做的第一件事,大概就是风险分级:把内容分成「不用管 / 关注 / 必须报」。这本质上就是阈值思维。换成模型语言,你要做的只是把「凭经验分三档」改写成「用可复现的规则分三档」,并且把每一档的边界说清楚。这个转换对做过舆情的人来说几乎是平移。
6.2 话术敏感度 → 边界样本的识别能力
判断一条内容是阴阳怪气还是正常吐槽,这种能力很难通过读文档获得。而它恰好是构造验收集时最稀缺的东西——能标出高质量边界样本的人,在整个团队里都是少数。你的话术敏感度,直接决定了这把尺子准不准。
6.3 人工研判经验 → 复核规则与标注规范
最后一项,是你脑子里那套「为什么这么判」的逻辑。转行时最值得做的,不是急着去调模型,而是先把这套逻辑写成文字规则。写规则这件事看起来不性感,但它是整条链路里唯一能沉淀下来的东西——模型会换、工具会换,规则不会。
把四项能力对应到环节上就是:风险分级对应阈值设定,把三档经验写成可复现的分档规则;话术敏感度对应验收样本标注,负责标出高质量的边界样本;人工研判经验对应复核规则与标注规范,负责把判断依据写成文档;舆情判断对应指标取舍,负责决定每一层优先保召回还是保精确。这四个环节里,有三个是纯经验活,恰恰是转行者最容易建立优势的地方。
第 7 章 上线前后的一张清单
最后给一份可以直接照着走的清单。清单的好处是它不依赖你记住了多少术语。
7.1 上线前要定的五件事
一是约定正类是谁,也就是明确「什么算负面」,写进文档。二是定三层结构,每层写清目标和主指标。三是定阈值,并且记录下这个阈值是按什么代价判断出来的。四是造好验收样本,正例、负例、边界样本三类都要有。五是写好标注规则,尤其是反话、转述、情绪发泄这三类怎么算。
7.2 上线后要盯的三件事
一是每天可承受的告警条数有没有被突破——突破了就说明精确率已经影响到执行。二是抽样复核「没报出来的」,这是唯一能发现漏报的手段。三是把误报按话题归类,看有没有系统性规律。
7.3 什么时候该回头改阈值
不要把阈值当成一次设定就永久有效的东西。出现下面三种情况就该回头改:第一,告警量持续超过人力上限;第二,抽样复核发现漏报开始集中出现;第三,业务本身变了,比如进入了敏感期,这时候漏报的代价会突然升高,阈值就该往下调。
反过来,如果没有这三类信号,就不要频繁动它。阈值频繁调整会让整个团队失去对系统的稳定预期,最后没有人说得清现在的召回率大概是多少。
转行者落地检查清单(可打印版):本章这份清单整理成了一页可勾选的表格。放在资料包里,扫码即可获取:
附表 A:本文引用事实与出处对照表
| 事实 | 出处(文档名 + 发布方 + 链接) | 本文位置 |
|---|---|---|
| 精确率定义为「模型的所有正类别分类中实际为正类别的比例」,公式 Precision = TP / (TP + FP) | 《分类:准确率、召回率、精确率和相关指标》,Google for Developers 机器学习速成课程,https://developers.google.com/machine-learning/crash-course/classification/precision-and-recall | 第 2 章 2.2 |
| 召回率(又称真正例率)定义为「所有实际正例中被正确分类为正例的比例」,公式 Recall = TP / (TP + FN) | 同上 | 第 2 章 2.3 |
| 提高分类阈值通常减少假正例、增加假负例,降低阈值产生相反效果;精确率与召回率通常呈反比 | 同上 | 第 3 章 3.3 |
| 指标选择指引:当假负例的代价高于假正例时使用召回率;当正预测的准确性非常重要时使用精确率 | 同上 | 第 3 章 3.1 |
| F1分数是精确率与召回率的调和平均,对于类别不平衡的数据集比准确率更可取;精确率与召回率相差很大时,F1分数会接近较差的那个指标 | 同上 | 第 2 章 2.3 |
| 混淆矩阵四格命名:tp 为 Correct result、fp 为 Unexpected result、fn 为 Missing result、tn 为 Correct absence of result | 《3.4. Metrics and scoring: quantifying the quality of predictions》3.4.4.9.1 节,scikit-learn 官方文档(stable 版),https://scikit-learn.org/stable/modules/model_evaluation.html | 第 2 章 2.1 |
| precision = tp / (tp + fp)、recall = tp / (tp + fn),F-measure 为精确率与召回率的加权调和平均;召回率有时也叫 sensitivity | 同上 | 第 2 章 2.3 |
| 直观表述:精确率是分类器不把负样本标成正样本的能力,召回率是分类器找出全部正样本的能力 | 同上 | 第 2 章 2.3 |
| 准确率在类别不平衡数据集上通常是糟糕指标;以「百年只下 25 天雪」举例,全部预测为「不下雪」仍可得到极高准确率 | Machine Learning Glossary: Metrics,Google for Developers,https://developers.google.com/machine-learning/glossary/metrics | 第 1 章 1.2 |
| 待验证:舆情业务中「漏报一条真负面」与「误报一条假负面」各自的具体成本金额或工时折算 | 未找到可公开引用的一手来源,本文仅作定性比较,不给出任何数字 | 第 1 章 1.1、第 3 章 3.1 |
| 待验证:Google 该课程页在本次核验时显示的最后更新时间为 2026-02-05,后续如有修订以官网页面为准 | 页面自述信息,非独立文档,https://developers.google.com/machine-learning/crash-course/classification/precision-and-recall | 第 2 章 2.2 |
| 待验证:本文全部代码块均为口径示意,未在真实舆情数据集上运行,输出结果不构成任何性能结论 | 作者自述 | 第 2 章 2.3、第 3 章 3.3、第 4 章 4.2、第 5 章 5.3 |
附表 B:术语速查表
| 术语 | 一句话解释 | 在本文哪里用到 |
|---|---|---|
| 准确率 | 系统判断对的比例,判断对的数量除以全部数量 | 第 1 章 1.2 |
| 正类 | 我们关心的那一类,舆情场景里指「负面内容」 | 第 2 章 2.1 |
| 混淆矩阵 | 把「系统怎么说」和「事实是什么」交叉排开、数清四种结果的表格 | 第 2 章 2.1 |
| 真正例(tp) | 事实是负面,系统也报出来了,判断正确 | 第 2 章 2.1 |
| 假正例(fp) | 事实不是负面,系统却报出来了,也就是误报 | 第 2 章 2.1 |
| 假负例(fn) | 事实是负面,系统没报出来,也就是漏报 | 第 2 章 2.1 |
| 真负例(tn) | 事实不是负面,系统也没报,判断正确 | 第 2 章 2.1 |
| 精确率 | 系统报出来的内容里,真正是负面的比例 | 第 2 章 2.2 |
| 召回率 | 真正存在的负面里,被系统抓到的比例,也叫灵敏度 | 第 2 章 2.3 |
| F1分数 | 精确率与召回率的调和平均,把两个数字合成一个 | 第 2 章 2.3 |
| 阈值 | 那条分数线,负面倾向分超过多少才报出来 | 第 3 章 3.3 |
| 类别不平衡 | 正类和负类数量差很远,舆情里负面远少于正常内容 | 第 1 章 1.2 |
| 告警疲劳 | 告警多到一定程度后,人开始不再认真看告警 | 第 3 章 3.2 |
| 标注 | 人工给每条样本贴上「是负面还是不是负面」的答案,当作验收的尺子 | 第 5 章 5.1 |
| 边界样本 | 那种「到底算不算负面,人也要讨论一下」的内容 | 第 5 章 5.1 |
写在最后:这篇用到的资料
写这篇文章时,把相关的官方文档和源码又翻了一遍,顺手也整理了几份配套的东西:
- 大模型学习路线图:从零基础到能自己动手做 Agent,按阶段说明每一步该学什么、哪些可以先跳过
- 《LangChain + LangGraph + MCP 智能体开发实战》视频课:7 个模块,从私有化部署、Embedding+RAG 到 MCP+Agent 全流程
- AI 大模型知识库(在线可查):Agent Skills 从入门到落地、Claude Skills 完全指南等专题,按目录浏览即可
- 640 套 AI 大模型行业报告 + 经典 PDF 书籍:看行业落地案例和别人怎么做的时候用得上
- 大模型零基础到精通教学视频:跟着敲一遍,比只读文档快得多
资料是我自己整理的,放在下面这个码上,扫码即可获取:
添加时备注「AI」,优先通过。
资料按「先路线、再动手、最后查漏」的顺序整理好了,建议先看学习路线那一份,照着它挑一条适合自己当前基础的路径再往下看。
更多推荐









所有评论(0)