做中文摘要质量模型对比这件事,我一开始以为就是跑几个指标、列几张表、比个高低就完了。真扎进去才发现,光是“什么叫质量好”这个前提,就够我琢磨好一阵子。我在实验室里跟同门聊、跟导师争、也翻了不少前人的评测方案,慢慢摸出一个还算自洽的研究框架。这一章我想把自己搭框架的过程摊开来聊聊,不追求教科书式的严整,更像是把我踩过的坑和想明白的事捋一遍。
1.1 中文摘要质量评估的任务界定:生成质量、忠实性、流畅性与信息覆盖
我刚开始接触摘要评估时,犯过一个挺低级的错——把“摘要像不像原文”等同于“摘要好不好”。后来读了一批中文新闻摘要的样例,才意识到质量这个词在任务里其实被拆成了好几层。生成质量说的是这段摘要作为一段独立文本成不成立,有没有断裂、重复、语法塌陷。忠实性则是回头看原文,摘要里说的东西原文到底有没有支撑。这两件事经常打架,一段读起来很顺的摘要可能悄悄塞进了原文没有的信息。
流畅性更像是在读者这一侧做判断,句子通不通、指代清不清楚、连接自不自然。信息覆盖关心的是原文的关键点丢了多少,尤其是中文新闻里时间、地点、人物、结果这些要素有没有被压掉。我自己做标注的时候发现,这四层并不是简单加权就能合并的,它们之间有张力。一个极度压缩的摘要覆盖度可能不高,但忠实性反而容易保住。界定任务的时候如果不把这几个维度拆清楚,后面模型对比就会变成各说各话。
1.2 模型对比评测的核心维度:相关性、一致性、可读性、鲁棒性与可解释性
我在设计对比实验时列过一版维度清单,删删改改好几轮。相关性指的是摘要和原文主题是不是对得上,这个维度在大模型生成的摘要里翻车不算少见,模型有时会顺着自己的世界知识跑偏。一致性我更愿意把它理解成事实层面的对齐,摘要里的陈述能不能在原文里找到依据,这一条在中文场景下特别麻烦,因为同义表达和隐含推理太多了。
可读性跟前面说的流畅性有重叠,但我倾向把它放在评测维度里单独看,因为它直接影响人工评分的稳定性。鲁棒性是我后来才重视起来的,同一个模型换一种输入格式、换一个参考摘要、甚至换一下分词工具,分数波动有多大,这件事在中文里格外敏感。可解释性则是给评测结果找说法,一个模型给摘要打了低分,我得能说清楚是哪个维度拖了后腿,不然对比就只剩下排名,没有诊断价值。
1.3 自动评价指标与人工评价的关系:相关性分析、一致性与成本权衡
自动指标和人工打分之间的关系,我最初想得很天真,以为相关性高就万事大吉。实际跑下来发现,ROUGE和人工评分在流畅性上几乎说不上话,BERTScore对忠实性的捕捉也比我想象的弱。我做过一个小规模的相关系数分析,同一个模型在不同数据集上跟人工评分的皮尔逊系数能差出零点二以上,这种漂移让我不敢只看单一数字下结论。
成本这块更现实。人工评价贵、慢、标注员之间还会有分歧,自动指标便宜、可复现、能大规模跑。我现在的做法是把自动指标当成筛子,把明显离谱的候选先滤掉,再拿人工去复核边界样本。这两者不是替代关系,更像是流水线上前后两道工序。一致性检验我一般会看组内相关系数和显著性,但也不会迷信这些数字,有时候标注指南写模糊了,统计量再漂亮也掩盖不了判断标准在漂。
1.4 中文摘要质量评估模型对比评测的流程设计与常见误区
流程设计上我吃过亏。早期我直接拿现成的脚本跑分,数据集划分、参考摘要数量、预处理方式都没对齐,出来的对比表看着热闹,其实不可比。后来我固定了一套流程:先明确任务界定和维度权重,再统一分词和预处理,然后跑自动指标,接着抽样做人工评估,最后做一致性和错误分析。每一步我都会留记录,因为中文摘要评测里预处理的选择影响太大了,全角和半角、数字写法、标点归一化,换个设置分数就能晃。
常见误区我列几个自己踩过的。一个是拿单一指标当真理,尤其是ROUGE高就以为质量好,同义改写和语序调整它根本看不见。另一个是参考摘要只用一个,中文摘要的多参考设置没做好,评分方差会大得离谱。还有一个挺隐蔽的误区,是把评测集和训练集的血缘关系忽略了,有些数据集本身跟预训练语料有重叠,模型分数虚高。我现在做对比之前会先问自己三件事:维度拆清楚没有、预处理对齐没有、参考摘要够不够多样。这三问答不上来,后面的表我就不敢信。
ROUGE是我最早接触的一批自动评价指标,那时候跑完一个摘要模型,第一反应就是看ROUGE分数。后来对比的模型多了,我发现这个指标族远不是“跑个分”那么简单。它背后有一整套关于“重叠”的假设,这些假设在英文里成立得比较好,搬到中文就得多留几个心眼。这一章我想把自己用ROUGE做中文摘要对比时攒下的经验摊开来聊,包括它的几种变体怎么选、中文场景下哪些坑最要命,以及它到底什么时候靠得住。
2.1 ROUGE-N、ROUGE-L与ROUGE-S的原理与适用场景
ROUGE-N最直观,就是数n-gram的重叠。我平时用得最多的是ROUGE-1和ROUGE-2,前者看词级覆盖,后者看二元组的连续性。ROUGE-1对中文摘要挺宽容的,只要关键词出现了就能命中,适合快速看信息覆盖的大致情况。ROUGE-2就苛刻不少,它要求相邻两个词在参考摘要里也相邻出现,中文里稍微换个语序或者加个“的”字,匹配就断了。我在对比新闻摘要模型时发现,ROUGE-2的分数普遍偏低,但区分度反而比ROUGE-1好,因为它对局部表达的忠实度更敏感。
ROUGE-L用的是最长公共子序列,不要求连续匹配,只要求顺序一致。这个特性在中文里挺讨巧的,因为中文摘要经常出现词序调换但语义不变的情况。我记得有一次对比两个模型,ROUGE-1上它们几乎打平,ROUGE-L上差距就出来了,一个模型更倾向于保留原文的叙述顺序,另一个喜欢重组句子。ROUGE-L对这种顺序偏好是有感知的。不过它也有自己的盲区,长句子里只要有一小段顺序对上了,LCS就能拿分,有时候会高估那些“只对了一小截”的摘要。
ROUGE-S跳过了连续性的约束,看的是skip-bigram,也就是两个词在参考摘要里按顺序出现就行,中间隔多少词不管。这个设计本来是为了缓解语序变化带来的惩罚,我在中文对比里试过几轮,感觉它对短摘要更友好,长摘要上容易虚高。ROUGE-SU再把unigram加进去,算是做了个补丁。我的习惯是ROUGE-1、ROUGE-2、ROUGE-L三个一起看,ROUGE-S作为辅助参考,单独拿ROUGE-S下结论的情况我基本不会做。不同变体之间的分数不能直接比大小,它们量的不是同一个东西。
2.2 中文分词、多参考摘要与预处理对ROUGE评分的影响
中文分词这件事,我在ROUGE对比里被它折腾过不止一次。同一个摘要,用jieba分和用HanLP分,ROUGE-1能差出好几个点。原因不复杂,分词边界一变,n-gram的组成就变了。我印象特别深的一次是“研究生命起源”这句话,一种分法切成“研究/生命/起源”,另一种切成“研究生/命/起源”,后面所有n-gram匹配全跟着变。我现在做对比实验,第一步就是把分词工具固定下来,并且在论文或报告里写清楚用的哪个版本,不然别人复现出来的数跟我对不上,对比就失去了意义。
多参考摘要的影响比分词还大。中文摘要数据集里单参考的情况很常见,LCSTS就是一个典型,每个原文基本只配一条参考摘要。单参考下ROUGE的方差特别大,模型只要跟这条参考的措辞风格接近,分数就好看,换个写法就掉下来。我做过一个小实验,给同一批样本人工补了三条参考摘要,ROUGE-1的平均分没怎么变,但标准差明显收窄了。多参考设置下ROUGE取的是各参考上的最大值,这个max操作会让分数整体偏高,解读的时候得留出余量。我的建议是能多参考就多参考,至少三条起步,对比结论才稳得住。
预处理这块琐碎但躲不开。全角半角、数字格式、标点符号、英文大小写,每一项都能让分数晃一下。中文里还有个特殊问题是停用词,ROUGE默认是不去停用词的,但中文的“的、了、在”这些虚词出现频率极高,留着它们会让ROUGE-1虚高。我试过在预处理里去掉停用词,ROUGE-1的分数普遍降了两三个点,但模型之间的排序反而更清晰了。现在我固定一套预处理流程:统一全半角、数字转阿拉伯形式、标点归一化、保留停用词但单独记录一版去停用词的结果。两版结果对照着看,心里更有底。
2.3 ROUGE在中文摘要质量评估中的优势:可复现、低成本与直观性
ROUGE最大的好处是可复现。代码开源、逻辑透明、参数少,换个人跑同样的数据,只要预处理对齐了,结果基本能对上。我对比过BERTScore和大模型评分,同样的输入换台机器换个环境,分数偶尔会飘,ROUGE在这件事上稳得多。做模型对比最怕的就是指标本身不稳定,ROUGE把这块不确定性压到了最低,让我能把注意力放在模型差异上,而不是跟指标较劲。
成本低是另一个实打实的优势。跑一遍ROUGE几乎不花什么算力,几千条摘要几秒钟就出结果,我可以放心地做大规模扫参和多次重复实验。人工评估一条摘要得好几分钟,ROUGE一条毫秒级,这个差距在做全量对比的时候会被放得很大。我现在的习惯是用ROUGE先筛一遍,把明显偏离的候选挑出来,再决定哪些样本值得送人工细看。它不完美,但作为第一道筛子,性价比很难被替代。
直观性这点我一开始没太在意,后来带师弟做实验才体会到。ROUGE的分数量纲清楚,0到1之间,越高说明重叠越多,不需要解释就能看懂大致趋势。给非技术背景的人汇报模型对比结果,ROUGE表格是最容易被接受的。它不会告诉你摘要读起来顺不顺、事实对不对,但它能快速给出一个“跟参考摘要贴得近不近”的粗粒度判断。这个判断在项目早期做方向筛选时特别管用,能省下大量往错误方向深挖的时间。
2.4 ROUGE的局限性:同义改写、语序变化、语义等价与事实错误不敏感
ROUGE对同义改写基本是瞎的。参考摘要写“经济增长放缓”,模型生成“GDP增速出现回落”,语义上高度一致,ROUGE-1和ROUGE-2都拿不到分,因为词面对不上。中文的同义表达又特别丰富,“提升”和“提高”、“下降”和“下滑”,换一个词分数就掉。我对比过两个摘要模型,人工看下来质量差不多,ROUGE却拉出了明显差距,查了半天发现就是一个模型更爱用参考摘要里的原词。这种词面偏好会让ROUGE把“会抄”误判成“会写”。
语序变化也是ROUGE的软肋。中文摘要里把“张三昨天在会议上宣布了这项计划”改写成“这项计划是张三昨天在会议上宣布的”,意思没变,ROUGE-2的匹配几乎全断,ROUGE-L的LCS也会缩水。ROUGE-S稍微好一点,但也好不到哪去。我做错误分析时统计过,纯粹因为语序调整导致的ROUGE分数下降,能占到总分差异的两成左右。这个比例不算小,对比结论如果只看ROUGE,很容易把语序灵活但质量不错的模型压下去。
语义等价和事实错误这两件事,ROUGE都接不住。语义等价前面说过了,换种说法就丢分。事实错误更麻烦,ROUGE对此几乎完全不敏感。摘要里把“增长了5%”写成“下降了5%”,词面重叠反而可能很高,ROUGE分数照样好看。我在一个对比实验里专门埋了几条带事实错误的摘要进去,ROUGE-1的分数跟正确摘要差不到零点零二,人工一眼就能看出来的错误,ROUGE完全没反应。这件事让我彻底放弃了用ROUGE单独判断忠实性的念头。它量的是重叠,不是对错,这两件事在中文摘要里经常分道扬镳。我现在把ROUGE定位成“覆盖度的粗测工具”,忠实性、流畅性这些维度必须靠人工或者语义指标来补,ROUGE自己扛不动。
ROUGE对词面重叠的依赖让我在中文摘要对比里吃过不少亏,尤其当模型开始学会同义替换和句式重组之后,我总觉得分数和直觉对不上。后来我把BERTScore拉进来做平行对比,第一次跑完就发现,之前被ROUGE判死刑的几个生成样本,在语义指标下活过来了。这一章我把语义类评价模型放在一起聊,重点说BERTScore,也顺带过一下MoverScore和Sentence-BERT这些同路数的工具。它们解决了一部分ROUGE解决不了的问题,但也带来了新的麻烦,有些麻烦在中文场景下还挺隐蔽。
3.1 BERTScore的语义相似度计算原理与中文预训练模型适配
BERTScore的思路不复杂,它把参考摘要和生成摘要分别送进预训练模型拿token级向量,然后做两两余弦相似度匹配,取最大值求和,最后算出精确率、召回率和F1。跟ROUGE数n-gram不同,它比的是向量空间里的方向。向量接近意味着语义接近,哪怕字面上一个词都不重叠。我第一次跑BERTScore的时候用的是bert-base-chinese,拿一个同义改写的例子试了试,ROUGE-1只有零点二出头,BERTScore的F1到了零点八五以上。那个瞬间我意识到,词面匹配和语义匹配量的真不是一回事。
中文适配这块有几个细节值得说。中文预训练模型的选择直接会影响BERTScore的表现,我用过bert-base-chinese、RoBERTa-wwm-ext和MacBERT,在LCSTS的对比样本上,RoBERTa-wwm-ext的区分度最好,bert-base-chinese在短摘要上偏保守,分数拉不开。MacBERT介于两者之间,整体跟RoBERTa-wwm-ext接近。还有个值得注意的点是分词,BERTScore虽然基于子词切分,但中文模型用的Tokenizer不一样,同一个句子切出来的token序列不同,向量匹配的粒度也跟着变。我现在的做法是固定一种中文预训练模型,在报告里注明版本,所有对比实验用同一套配置,避免模型差异被tokenizer差异污染。
层数选择是另一个隐藏参数。BERTScore默认取某一层的输出,中文模型里换层结果会有波动。我试过取最后四层做加权,也试过只用倒数第二层。在摘要对比任务上,倒数第二层的表现比较稳,分数波动小,模型之间的排序也跟我的人工判断吻合得最好。这些参数看起来琐碎,但在做严谨对比的时候,差一层可能就让两个模型的名次对调。我的建议是不要用默认值交差,花半天时间在验证集上把模型版本、层数、是否做baseline rescaling这几项定下来,后续所有对比都锚定在同一套配置上。
3.2 BERTScore与ROUGE的对比:语义匹配能力、同义改写识别与评分稳定性
语义匹配能力上BERTScore明显强于ROUGE,这个结论我做得比较扎实。我拿同一批摘要生成结果分别跑了ROUGE-1、ROUGE-2、ROUGE-L和BERTScore,然后跟人工打分做相关性分析。BERTScore跟人工评分的Spearman相关系数在零点六上下,ROUGE-1大概零点四出头,ROUGE-2更低一些。差距主要来自同义改写和语序调整的样本,ROUGE在这些样本上给的分数偏低,BERTScore能把它们拉回合理区间。我印象很深的一组对比里,两个模型生成的摘要人工评分几乎一样,ROUGE-1差了三个点,BERTScore只差零点八个百分点,后者把真实差距量得更准。
同义改写识别是BERTScore的看家本事。中文里的近义表达太丰富了,“削减”和“减少”、“推进”和“推动”、“显著”和“明显”,ROUGE碰到这些替换直接丢分,BERTScore的向量空间里这些词本来就靠得近,匹配不受影响。我做错误分析时专门统计过一组人工构造的同义替换样本,ROUGE-1平均掉了十一个点,BERTScore的F1只掉了不到两个点。这种鲁棒性在对比那些喜欢改写型生成的模型时特别关键,否则ROUGE会把“会表达”的模型冤枉成“跑题”。
评分稳定性这件事得分两面看。同一个模型同一个输入,BERTScore的分数比ROUGE稳,重复跑几次结果完全一致,这一点跟ROUGE打平。跨模型对比时,BERTScore对模型差异的敏感度更高,它能把两个ROUGE打平的模型拉开差距,方向也跟人工判断一致。不过我遇到过一个反例,有两个模型在BERTScore上差距很小,人工看下来一个明显比另一个忠实,这说明BERTScore在语义层面接近的时候,对事实细节的分辨力不够。我的做法是ROUGE和BERTScore并排看,两个指标都靠前的模型才进入下一轮细评,单看任何一个都有盲区。
3.3 基于嵌入相似度的其他评价模型:MoverScore、Sentence-BERT相似度等
MoverScore是我在BERTScore之后试的第二个语义指标。它的核心是Earth Mover's Distance,把生成摘要的词向量“搬运”到参考摘要的词向量上,算最小搬运成本。跟BERTScore取最大匹配不同,MoverScore允许一个词跟多个词产生软匹配,分配更灵活。我在中文长摘要上试过,MoverScore对信息覆盖度的感知比BERTScore细,尤其是参考摘要信息点比较多的时候,它能反映出生成摘要在哪些语义簇上有缺失。MoverScore的计算开销比BERTScore大,几千条样本跑下来时间明显更长,做大规模扫参的时候我会控制使用频率,只在关键对比节点上跑一轮。
Sentence-BERT相似度是另一条路。它把整句编码成一个句向量,直接算余弦相似度,粒度比BERTScore粗,但速度快、接口简单。我在做快速预筛的时候用过它,几千条摘要几秒钟出分,适合在项目早期快速过滤明显跑偏的生成结果。它的短板也明显,句向量把细节压没了,两个语义方向相近但事实不同的摘要可能拿到很高的相似度。我对比过一组故意改了数字的摘要,Sentence-BERT的相似度跟正确摘要几乎没差别,这个盲区在做忠实性对比时是致命的。现在我拿它做粗筛,不做最终判断。
这几个工具我一般是组合着用。BERTScore作为主力语义指标,MoverScore在需要细看覆盖度的时候补一刀,Sentence-BERT做前期快速过滤。它们的分数不能互相换算,各自的量纲和分布都不一样,对比的时候我只比同一指标下的模型排序,不跨指标比绝对值。有人问过我能不能把几个指标加权成一个综合分,我试过,权重怎么定都缺乏依据,最后放弃了这个想法,老老实实分维度报告,比硬凑一个数要诚实得多。
3.4 语义评价模型在中文摘要中的局限:事实一致性、长文本建模与领域偏移
事实一致性是语义评价模型最大的软肋,这一点跟ROUGE的毛病一脉相承。BERTScore比的是语义方向的接近程度,摘要把“同比增长”改成“同比下降”,向量空间里这两个表达离得并不远,BERTScore可能给出一个不错的分。我在一个对比实验里专门构造了二十条带事实翻转的摘要,BERTScore的F1平均只下降了零点零三,人工判断这些摘要全是不合格的。这件事让我彻底打消了用BERTScore替代人工做忠实性评估的念头。它量的是语义相似,不是事实正确,这两件事在中文摘要里经常不是一回事。
长文本建模的问题在中文里比英文更突出。BERT类模型有最大输入长度限制,中文摘要加上原文动辄超过五百字,截断之后后半段的信息直接丢失。我试过用滑动窗口切块再平均,分数是能算出来,但长距离的语义依赖断了,跨句的信息覆盖判断不准。RoBERTa-wwm-ext的窗口比bert-base-chinese宽一些,但也没从根本上解决问题。做长摘要对比的时候,我会把样本长度分布先统计一遍,超过模型窗口的样本单独标记,在报告里注明这部分结果的置信度要打折。
领域偏移是个更隐蔽的坑。预训练模型在通用语料上训出来的向量空间,搬到科技文献或者医学摘要上,语义邻近关系会变形。我拿新闻摘要上表现很好的配置直接跑科技论文摘要,BERTScore的分数分布整体偏移,模型之间的排序也变了。重新在领域语料上做适配成本不低,我一般的处理是在目标领域上抽几百条做人工校验,确认BERTScore的排序跟人工一致之后再大规模跑。语义指标不是拿来就能用的,领域这一关得过,否则对比结论可能整个是歪的。
语义指标在第3章里帮我解决了一大块盲区,但依然有两个问题没解开:一是事实一致性,二是为什么扣分。BERTScore告诉你两个摘要像不像,不告诉你哪里不对、为什么不对。我后来把预训练语言模型评估器和大语言模型评估者这两条线拉进来做对比,初衷就是想把“分数”升级成“判断加理由”。这一章记录的是我在这条路上的实操过程和踩过的坑。
4.1 预训练语言模型评估器:回归式评分、排序式评估与多任务评估
预训练语言模型做评估器,主流打法有三种形态,我在对比实验里都跑过。回归式评分是把模型改造成一个标量打分头,输入参考摘要和生成摘要,输出一个预测分数,训练信号来自人工打分。排序式评估不直接给绝对分,让模型判断两个候选摘要谁更好,用成对偏好数据训练。多任务评估是前面两种的合体,一个模型同时学分数回归、成对排序和错误类型分类,靠共享编码层把信号揉在一起。
我拿LCSTS的人工标注子集做过一轮小规模对比。回归式评分训练最直接,收敛快,模型之间的排序相关性也不错,但它对打分尺度特别敏感,同一批数据里如果标注员的分数分布偏窄,模型学出来的分数全挤在一个小区间,拉不开区分度。排序式评估在这点上稳得多,它只关心相对顺序,不关心绝对数值,用Pairwise的准确率来量的话,比回归式高了六到八个百分点。多任务评估的初始投入最大,标注数据要重新组织成三种任务格式,但训出来之后在细粒度错误识别上明显更能打,比如它能标出“信息缺失”和“事实矛盾”是两类不同的问题,回归式只会给你一个偏低的分数。
评估器选型这件事我的原则是看下游要什么。只要一个排序结论、拿来给多个摘要生成模型排座次,排序式评估就够用,训练成本也低。需要报告绝对质量分数、还要跟人工量表对齐,那得走回归式,但一定要先检查数据标注的一致性,标注员之间分歧大的数据喂进去只会让模型学歪。多任务评估我一般用在需要错误归因的场景,比如要告诉生成团队的同事“这次摘要掉分是覆盖度不够还是流畅度退步”,这时候只给一个分数没意义。
4.2 大语言模型作为评估者:提示设计、评分标准与LLM-as-a-Judge模式
大语言模型当评委,也就是常说的LLM-as-a-Judge,我一开始是抱着怀疑态度试的。试完之后承认它确实打开了一个新维度。它不需要针对任务重新训练,靠提示词就能让它按给定的评分标准逐条打分,还能顺手给出理由。我在中文摘要对比里主要用三种提示形态:一是直接打分,让模型给一到五分;二是成对比较,把两个摘要并排给它选更好的;三是分维度打分,把忠实性、覆盖度、流畅性拆开,每个维度单独让模型判一次。
提示设计的细节影响非常大,这一点我吃了不少亏才摸清。评分标准必须写进提示里,每个分档都要有具体描述,比如“五分表示所有关键信息点完整且无事实错误,四分表示关键信息完整但有轻微表述偏差”。只用“请打分”三个字,模型给出的分数方差大得没法用。我还会把参考摘要和待评摘要的角色写清楚,要求模型先列出参考摘要里的核心信息点,再逐条核对生成摘要覆盖了哪些、漏了哪些、有没有说反的。这个“先列点再判断”的链条式提示让评分的可解释性好了很多,重复评测的一致性也上来了。
成对比较模式是我用得最多的。单点打分在大模型上有个通病,绝对分数漂移,同一条摘要分两次评可能给两个分数。成对比较相对稳定,而且更贴近我在实际对比里想知道的结论:A和B哪个更好。我会让模型在成对比较时输出三样东西,胜者、判断理由和置信度。理由这部分价值很大,它能把我的注意力引到具体信息点上,比如模型指出“摘要A遗漏了参考文本里的融资数额”,我人工回看确实漏了,这种线索是ROUGE和BERTScore都给不了的。
不过按我自己的经验,单靠提示让大模型打绝对分,在中文摘要上还不够可靠。我做过一个重复性测试,同一条样本换三种同义表述的提示,分数波动能到零点八分左右。我的处理是把大模型评估定位成“可解释的细粒度判断器”,报告时给出分维度的通过或不通过结论,再附上理由,绝对分数只作参考,不进主结论。
4.3 大模型评估与ROUGE、BERTScore的对比:细粒度判断、事实核查与解释能力
把大模型评估和传统指标放一起比,差距最明显的地方是事实核查。我拿第3章那批二十条事实翻转样本又跑了一遍大模型评估,让它专门检查生成摘要和参考摘要之间的事实一致性。结果它抓出了十七条,剩下三条是数字单位换算的隐蔽错误,我人工复核之后确认模型判对了但表述模糊。同样这批样本,ROUGE几乎无感,BERTScore的分数下降幅度可以忽略。事实核查这件事上,大模型评估和前面两类指标根本不在一个能力层级上。
细粒度判断是另一个差异点。ROUGE给一个总分,BERTScore给一个F1,大模型能给出一份清单:哪个信息点覆盖了,哪个漏了,哪个表述不够准确。我做过一组三方对比,同一个生成模型的两版摘要,ROUGE-1差零点七个点,BERTScore差一点二个百分点,大模型判断是后一版更好,理由是它修正了前一版里“参会人数”和“参展人数”的混淆。我回原文核对,确实是后一版更准。这种判断能力让大模型在模型对比的“错误分析”环节特别有用,它不只是评分器,还是个初审员。
解释能力带来的直接好处是对比效率。以前我拿着一堆分数排序,排名靠后的模型到底哪里差,得人工逐条看。现在让大模型对每个模型的失败样本做一遍错误归类,它能聚出几类典型问题,比如“时间信息错误”“主体指代混乱”“背景信息缺失”。我按它的归类去抽查,命中率大概七成多,剩下的它归得不准,但至少给了个起点。这项工作传统指标完全做不了,它们没有语言理解能力,只有匹配能力。
4.4 大模型评估的风险与偏差:位置偏差、提示敏感、幻觉评分与成本可控性
位置偏差是我最先撞上的问题。成对比较时,把摘要A放在前面还是后面,模型的判断会变。我做过一个对照测试,同一对摘要交换顺序各评一次,两百对样本里有一百三十多对出现了前后不一致,比例高得吓人。缓解办法有两个,一是每对样本正反各评一次,两次结论一致才采纳,不一致的标记为存疑;二是在提示里明确要求模型先分别评估两个摘要再比较,不要直接下判断。这两个办法我都用,一致性明显提升,代价是调用次数翻倍。
提示敏感的问题上一节提过,这里我想说得更具体。我做过一轮提示扰动实验,把评分标准里的例子换掉、把指令的语序调一下、把温度参数从零调到零点三,三个模型的排序结果出现了两次倒挂。这件事对我的冲击挺大,它意味着大模型评估的结论对配置的依赖程度比我预想的高。现在的做法是把提示模板和模型版本固定下来,写进实验记录,所有对比都在同一套配置下跑,换配置就重跑全量,不能新旧混着比。
幻觉评分是更隐蔽的风险。大模型有时候会给出听起来很有道理的错误判断,比如它声称“摘要完整覆盖了参考文本的全部要点”,我回原文一看,明明漏了核心数据。这类错误在分数上表现为虚高,而且它给的理由写得越像模像样,越容易骗过抽查。我的应对是设一个人工抽检环节,按百分之十到百分之十五的比例随机抽取大模型判为“通过”的样本做复核,抽检不合格率超过阈值就整批回退重评。这个流程让成本上去了,但结论的可信度保住了。
成本可控性是绕不开的现实问题。全量样本走大模型评估,按我跑的规模算,API费用和延迟都远高于ROUGE和BERTScore,几千条样本动辄几小时。我的折中方案是分层评估:先跑一遍便宜的自动指标做粗筛,分数明显两极分化的样本直接定结论,只把分数接近、拉不开差距的样本送进大模型细评。按这个流程走下来,大模型的实际调用量压缩到全量的三成左右,既拿到了关键样本上的细粒度判断,又没把预算烧光。大模型评估不是越多越好,用在该用的地方,它的价值才立得住。
第4章末尾我提到分层评估里那个人工抽检环节,写着写着发现这个环节的分量远超“质量兜底”四个字。它其实决定了前面所有对比结论能不能站住。自动指标、语义指标、大模型评估,每一类都在某个维度上有明显偏科,把它们跟人工判断放在同一个坐标系里对齐,这件事本身就是一套方法论。这一章我把自己做人工评估和混合流水线的全过程摊开讲,包括哪些设计后来被推翻了。
5.1 人工评估量表设计:忠实性、覆盖度、流畅性与整体质量评分
刚开始做中文摘要对比评测那阵子,我一度想把人工评估省掉。理由挺简单,慢、贵、还主观。真正被逼着把人工请回来,是因为大模型给出的分数在不同配置下出现过两次排序倒挂,我必须找一个不随提示词漂移的锚点。这个锚点只能是人工判断。
量表设计比我预想的难。我最终定了四个维度:忠实性、覆盖度、流畅性、整体质量。忠实性查事实错误,跟原文意思相反、数字对不上、主体张冠李戴都算。覆盖度拿参考摘要里人工先列出的关键信息点逐条核对,勾选覆盖了几个、漏了几个。流畅性看句子通不通、衔接顺不顺、有没有病句。整体质量给一个综合印象分。维度是一回事,粒度是另一回事。我头一版量表用的五级评档,试标的时候标注员在两分和三分之间反复纠结,同一批样本四个人标,Krippendorff's alpha只有零点三出头。第二版改成四点量表,把中间档砍掉,逼着标注员往两边靠,alpha一下跳到零点五以上。少了一个档位,反而好用了。
每个维度的描述必须写到能直接对照的程度。忠实性我分三级:无事实错误、轻微偏差(细节不准但不影响核心信息)、严重错误(跟原文矛盾)。覆盖度直接用核对表,每个参考摘要先由我人工提炼三到六个信息点,标注员逐条打勾。流畅性四级,从“通顺自然”到“影响阅读”。整体质量单独给,但整体分跟分维度打分打架的情况不少见,有的样本覆盖度很差可读着还挺顺,标注员就给个中等偏上的整体分。我在标注指南里写死一条:整体分只作参考记录,以分维度结论为准。这条规则压住了不少内部争议。
标注员的培训和试标环节,我花了整整两周。三个人都是中文母语、有文本编辑经验,试标五十条,每标完十条约一次校准会,分歧逐条讨论,结论回写到指南里。指南前后改了四版。有个高频混淆点值得拿出来说:标注员经常把“事实错误”和“信息缺失”混着标。原文说某公司融资五亿,生成摘要写成三亿,这是事实错误;原文提了五亿,摘要里根本没提融资金额,这是信息缺失。这两类错误对忠实性和覆盖度的影响完全不同,我在指南里加了一组对照例子之后,混淆率才降下来。还有标注疲劳,单次连续标注超过两小时,后半段的准确率肉眼可见地下滑,我把节奏改成标四十分钟歇十分钟。
5.2 人工评估与自动指标的一致性检验:相关系数、显著性检验与信度分析
人工分数收上来,我做的第一件事算标注员之间的信度,不是算模型表现。信度不过关,后面所有相关性分析都是空中楼阁。四个维度里,流畅性的alpha最高,零点七一,覆盖度零点五八,整体质量零点六二,忠实性最低,只有零点四一。忠实性这个数字让我挺不舒服,但它说明了真问题:事实判断本身就有难度,不是标注员不认真。原文里的表述一绕,判断就出现分歧。
信度过关之后才算人工跟自动指标的相关性。样本量八百条,我做了三组对比。ROUGE-L跟人工整体质量的Spearman相关是零点四六,p值小于零点零一。BERTScore零点五三。大模型分维度加权通过率跟人工的相关最高,零点七一。看这几个数的时候我盯着置信区间,用bootstrap重采样各跑了一千次。ROUGE-L那个区间的下沿只有零点三八,意味着在某些子集上它跟人工判断的排序一致性很弱。相关系数高只能说明方向对得上,不能拿它替代人工下结论,这一点我在报告里每次都强调。
样本量对相关性稳定性的影响,我吃过亏。最早只在两百条样本上算相关,换一批数据,相关系数能跳零点一五。扩到八百条之后才稳定下来。不同数据集上的差异也得单独看:LCSTS上ROUGE跟人工的相关性明显高于CNewSum。我的理解是长文本摘要里信息覆盖的权重更大,人工判覆盖度判得细,ROUGE对长文本不敏感,两边就拉开距离了。这说明相关性检验必须分数据集分场景做,把几个数据集揉在一起算一个总相关系数,结论是失真的。
一致性检验还有几个实操细节。标注员给分有系统性偏松偏紧的问题,我遇到过一个标注员所有维度的分数平均比别人高零点五,直接平均会让维度间比较失真,得先做标注员层面的标准化再聚合。缺失值的处理也得定规则,我按维度剔除,某个标注员漏标的维度不参与该维度的均值计算,不做插补。显著性检验报告里我给的是p值和效应量一起写,只看p值在样本量大的时候什么都能显著,没什么指导意义。
5.3 混合评估模型:自动指标预筛、大模型辅助评分与人工复核协同
第4章结尾讲的分层评估,到这里把完整流水线补齐。三层漏斗:自动指标做初筛和排序,大模型做细粒度判断和错误归因,人工做最终裁决和抽检校准。每一层的任务边界是清楚的,谁也别越位。自动指标在初筛层的角色就是快速分档,不做精确判断。
具体流程我按样本流向来描述。ROUGE和BERTScore全量跑,成本基本可以忽略,按分数分布把样本分成三档:明显好的、明显差的、分不开的。两头直接定结论,中间档送大模型。大模型用成对比较加分维度评分,输出胜者、分维度通过与否、理由和疑似错误点。大模型的结论出来后分两路走:跟自动指标判断一致的,按百分之十到十五的比例随机抽检;跟自动指标判断矛盾的,全部送人工复核。这个“分歧驱动复核”的设计是后来加的,效率比纯随机抽检高出一截,把人工的注意力压在了最需要人类判断的地方。
大模型辅助人工复核这件事,效率提升明显,副作用也很明显。我做过一组对照,带着大模型给的理由和疑似错误点去复核,标注速度快了大概三成。锚定效应紧跟着就来了,标注员容易顺着模型给的线索走,模型没点出来的错误就滑过去了。我的解决办法是两段式复核:第一段让标注员先独立看一遍摘要和原文,写下自己的初判;第二段打开大模型的理由对照,有分歧的地方重点看。这个流程多花了一道工,但漏检率降下来了。我还试过让另一个标注员专门复核“大模型判通过但初判存疑”的样本,双重独立判断,分歧再交第三人仲裁。样本量大的时候这套走不通,人力顶不住,只在关键批次的评测里用。
混合评估最终报告出来的东西跟纯自动评测很不一样。不再报一个综合分排名完事,报的是一组结构化结论:每个生成模型的分维度通过率、典型失败类型分布、人工复核确认过的关键错误样例、以及自动指标和大模型判断分歧的样本清单。做模型选型的同事反馈这套报告更够用,他们能看到某个模型是在忠实性上掉链子还是在覆盖度上吃亏,这比一个排名数字有价值得多。第4章提到的那个“参会人数”和“参展人数”混淆的例子,就是通过分歧清单捞出来的,自动指标完全没反应,大模型点出来了,人工复核确认。
5.4 混合评估在中文摘要质量评估模型对比评测中的成本效益与可扩展性
算成本这件事我很认真地做过一遍。八百条样本、四个维度、三个标注员,全人工评估按我当时的工时价格折算,大概需要四十多个标注小时,还不算校准会和仲裁时间。全量走大模型评估,API费用和延迟加起来也不便宜,几千条跑下来要几个小时。混合流水线的实际成本压到全人工的四成左右,人工环节主要集中在分歧样本和抽检上。这个四成的数字不是固定的,跟样本的分数分布关系很大,分数两极分化的批次人工量更少。
可扩展性真正的瓶颈在人工。样本量从八百涨到八千,人工复核的比例必须往下压,否则成本线性上涨,流水线就没意义了。我的做法是让抽检比例跟着分歧率和抽检不合格率动态调整。分歧率低的批次抽检比例降到百分之八,分歧率高的批次拉到百分之二十,大模型判通过但抽检不合格率超过阈值的,整批回退重评。这套自适应机制跑下来,样本量涨十倍,人工工时只涨了三倍多。说白了就是把人用在刀刃上,别让人类去做机器能做的事,也别让机器去做人类才判得准的事。
有些场景我明确不建议上混合评估。样本量小到一百条以内,搭流水线的时间和调试成本超过收益,人工直接全评更干脆。领域特别窄、大模型明显不熟的摘要类型,比如某些专业文献或者小众行业的会议记录,大模型给出的细粒度判断价值有限,理由经常套话连篇,这时人工复核的比例得提得很高,混合反而累赘。我做过一个内部技术报告的摘要评测,大模型的错误归因命中率掉到五成以下,这批我直接改成了全人工。
流程可以跨任务迁移,量表不行。新闻摘要上跑通的这套流水线,换到会议记录摘要,关键信息点的定义全变了,发言人和议题的对应关系成了覆盖度的核心,流畅性的权重也得往下调。我把量表模板和流程模板分开管理,流程模板复用,量表每次重新设计、重新试标、重新算信度。图省事直接套旧量表,信度会掉得很难看,这一点我在两个项目里都验证过。混合评估这套体系的价值不在某一次评测省了多少成本,而在于它把“机器能判的”和“只有人能判的”划出了一条随场景可调的边界,这条边界划清楚了,中文摘要质量对比的结论才敢往外报。
前五章拆解评测维度、自动指标、语义模型、大模型评估、混合流水线,全部落在一个前提上——你得有一批跑得动实验的数据,和一套经得起复查的实验设计。这一章我把数据集选型、实验配置、场景化选型这三件偏工程的事交代清楚,最后聊几句我判断的趋势。写这一章的时候我特意翻了早期实验的日志,有些教训现在看还是脸热。
6.1 常用中文摘要数据集与评测基准:LCSTS、NLPCC、CNewSum等适用性对比
我最早跑中文摘要对比实验,图省事直接用了LCSTS。短新闻文本、单参考摘要、体量够大,拿来跑ROUGE太顺手了。跑了两轮之后发现不对,模型之间的分数差距小得可怜,生成质量肉眼看着差不多的两个模型,ROUGE-L差不到零点五个点,排出来的名次换个随机种子就翻。LCSTS的短文本特性决定了参考摘要本身信息密度高、句式简短,很多语义等价的改写被ROUGE直接判成不匹配,分数被系统性压低,模型间的区分度就出不来。我的结论很直接:LCSTS适合做流水线跑通和指标冒烟测试,拿它下模型优劣的结论要谨慎。
NLPCC的摘要评测数据我用了两届的公开集,它的好处是任务定义清晰、有官方基线、参评系统多,横向对比有参照系。问题在于它的领域偏单一,主要以新闻资讯为主,我拿它验证科技文献摘要的模型表现,结论迁移过去明显失真。CNewSum是我近年用得最多的基准,长文本、多参考摘要、来源文档结构复杂,正好覆盖了LCSTS够不着的场景。多参考这个设计对评测公平性的提升很实在,同一个生成摘要跟不同参考比,ROUGE分数的波动能帮我识别出哪些模型是靠踩中某一种参考表述拿的高分。我把三个数据集的特性做了一张对照表放在团队文档里:LCSTS看流畅性和短文本压缩能力,NLPCC看与公开榜单的可比性,CNewSum看长文本覆盖度和多参考稳定性。选哪个做主场,取决于你要回答的问题是什么,不是哪个下载量大就用哪个。
数据集的预处理细节值得单独拎出来说。CNewSum的原文里表格、图注、超链接混排,我清洗的时候如果偷懒只去HTML标签,残留的导航文本会大量渗进生成摘要,把忠实性分数拉得很难看,跟模型能力完全无关。多参考数据集的参考摘要质量也得抽查,我随机抽过一百组,发现个别参考本身就有事实偏差,这种样本要标记出来在做错误分析时单独看,不能让它污染整体统计。数据集文档里没写的坑,只能靠自己一条条样本翻出来。
6.2 模型对比实验设计:基线选择、多参考设置、统计显著性与错误分析
基线选择这件事,我踩过一个挺典型的坑。一开始只放了两个经典seq2seq模型做基线,新模型一上来全面碾压,我以为方法很稳。后来被审稿意见问了一句“有没有跟同规模预训练模型比”,补上之后发现优势缩水了一大半。基线要覆盖三代:统计或规则方法兜底、同规模预训练模型对齐、当前最强系统对标。缺了中间那层同规模对比,结论的说服力是虚的。我现在做实验配置,基线名单在跑实验之前就锁定写进预注册文档,防止看到结果之后挑基线。
多参考设置对结论的影响比大多数人想象的大。我在CNewSum上做过一组对照,单参考和全参考两种配置下,三个模型的排名出现了互换。原因不复杂,某个模型倾向于生成贴近首条参考的表述,单参考配置下它的ROUGE虚高。我的处理办法是全参考配置做主结论,单参考配置作为敏感性分析附在附录里,两套结果不一致的地方在正文里明确解释。统计显著性我固定用bootstrap重采样,一千次起步,报告均值、置信区间和效应量三件套。只报p值的表格我基本不看,样本量一大什么都能显著,效应量才告诉你差距值不值得关注。
错误分析是实验设计里最容易敷衍过去的环节,也是信息量最大的。我现在的做法是每个模型固定抽两百条生成结果,按失败类型人工归类:事实错误、关键信息遗漏、指代混乱、重复生成、语句不通。归类完做交叉表,看模型之间的失败模式差异。有的模型分数不低但事实错误率明显偏高,这种模型放到新闻场景是灾难。错误分析的人工成本不低,我一般放在实验后期、模型名单收敛之后做,早期阶段用自动指标的分布对比先粗筛。实验日志里我还记了一条:随机种子至少跑三遍取平均,方差大的模型单独标注,有一次两个模型均值差零点三个点,但其中一个的种子间波动就有零点八个点,这种“优势”报出去是自找麻烦。
6.3 面向应用场景的模型选型:新闻摘要、科技文献、会议记录与电商评论
场景选型我从来不推荐“总分最高者通吃”。新闻摘要是我做得最多的场景,时效性强、事实密度高、读者容忍度低,选型权重我放在忠实性和流畅性上,ROUGE和BERTScore做快速筛选够用,涉及人名、机构名、数字的样本必须过大模型或人工核查。新闻场景有个特点,标题和导语本身就压缩了核心信息,生成模型容易直接抄导语拿高分,评测时我会刻意构造导语信息不全的样本,专测模型自己提炼信息的能力。
科技文献摘要的选型逻辑完全不同。术语密集、逻辑链条长、公式和实验数据多,流畅性反而排在覆盖度和忠实性后面。我做过一组对比,通用大模型在科技文献上生成的摘要读着通顺,但把实验条件和结论的因果关系搞反了两次,这种错误在新闻场景可能被容忍,在学术场景是硬伤。这个场景我倾向用领域适配过的模型,评估环节人工复核比例提到三成以上,自动指标只做粗排。会议记录摘要的难点在发言人和议题的对应,覆盖度按议题维度核对,流畅性权重压低,因为会议记录读者对口语化表达的容忍度天然就高。电商评论摘要是我最近接的一个场景,短、碎、口语化、反讽和情绪表达多,BERTScore在这个场景下虚高严重,模型学会了复述高频词就能拿分。这个场景我最终把选型依据压在了人工抽检和大模型分维度判断上,自动指标只留作监控生成是否跑偏的哨兵。四个场景,四套权重,一套指标体系打天下的想法在工程上根本不成立。
6.4 中文摘要质量评估的发展趋势:忠实性评价、多维度可解释评估与人机协同评测
忠实性评价会是下一个阶段竞争最激烈的地方。ROUGE和BERTScore对事实错误基本失明这件事我在第2、3章反复验证过,目前业内把希望押在两处:一是基于自然语言推理和事实核查的专项评估器,二是大模型驱动的细粒度事实比对。我试过几个开源的忠实性评估工具,在中文上的表现参差不齐,对否定句、数量词和主体替换的敏感度还远远不够。这个方向的进展我更看好跟知识库结合的路子,纯文本比对的召回率有天花板。
多维度可解释评估我判断会从“加分项”变成“标配”。现在越来越多的团队不满足于一个分数排名,他们要的是“这个模型在哪个维度上为什么失分”的结构化说明。大模型在其中扮演的角色会稳定在分维度归因和错误点标注上,人工负责校准和兜底,这条人机协同的链路我在第5章已经跑通过一遍,后面更多是工程化和标准化的工作。评测报告的形态会从排行榜转向诊断报告,模型选型的人拿着报告能直接定位到问题样本。
人机协同评测的成本结构还会继续演化。自动化比例的提升不是简单地把人换掉,而是把人从重复劳动里挪到判断密度最高的环节。我预期未来两三年会出现更多面向中文摘要的标准化评测套件,把数据集、指标、混合流水线和报告模板打包在一起,降低单个团队的搭建成本。这套东西成熟之后,模型对比的门槛会降下来,但选型判断依然得靠懂场景的人来做,工具替代不了这部分。中文摘要质量对比这件事,指标是尺子,场景是坐标系,尺子再准,坐标系放错了,量出来的结果就是错的。