我最早接触中文理解能力评测,是在做一个智能问答项目的时候。当时团队拿了一个在英文榜单上表现很好的模型,直接用来处理中文用户问题。结果模型把“意思意思”理解成“表达意思”,把“差点没赶上”判断成“没赶上”。这些错误让我意识到,中文理解能力评测不是跑个分那么简单。它要回答的问题是:机器到底懂不懂中文。
1.1 中文理解能力的内涵、层级与评测目标
中文理解能力,我把它看作机器对中文文本的语义、语境、意图、情感和逻辑关系的综合把握。认字是基础,懂话外音才是关键。比如“你真是个好人”,在不同场景下可能是感谢,也可能是委婉拒绝。机器要能分辨这种差别。中文里还有大量成语、歇后语、古诗词、网络梗,这些内容背后藏着文化共识。机器缺少这种共识,就会闹笑话。
从层级上看,我习惯把中文理解能力拆成几层。字词层处理分词、多音字、词性;句子层处理句法、语义角色;篇章层处理指代、连贯、主题;语用层处理言外之意、情感、礼貌;推理层处理逻辑、常识、因果。每一层都有对应的评测任务。评测目标不是追求一个万能分数,而是定位模型在哪个层级上薄弱。我在实际项目里发现,有些模型字词层很强,篇章层却一塌糊涂。它能把每个词都解释对,连成一段话就偏了。
评测目标还跟应用场景有关。做搜索,重点是语义匹配和相关度;做客服,重点是意图识别和情绪安抚;做教育,重点是语法纠错和阅读理解。我参与过一次中文作文批改系统的评测,模型能找出错别字,却看不出逻辑跳跃。这提醒我,评测目标要跟着任务走。通用能力评测提供基线,场景化评测才决定落地效果。
1.2 中文理解能力评测与通用自然语言理解评测的关系
通用自然语言理解评测,像GLUE、SuperGLUE这些,主要围绕英文设计。它们定义了文本蕴含、相似度、情感分类等任务。中文理解能力评测可以借鉴这套框架,不能直接照搬。中文没有空格分词,多音字靠上下文定音,成语不能拆开理解。我试过把英文数据集机器翻译成中文,再让模型跑。分数掉得很厉害。原因不是模型变笨了,而是中文表达习惯变了。英文的被动句翻成中文可能变成主动句,英文的时态标记在中文里靠时间词和语境。
中文理解能力评测是通用自然语言理解评测在中文语言上的具体化。它继承了通用评测的任务形式,比如分类、抽取、推理、问答。它也发展出自己的特色任务,比如古文理解、方言识别、成语填空、中文指代消解。我认识一位做中文NLP的研究者,他说中文评测不能只做“英文基准的中文版”,要做“中文母语者觉得难”的任务。这句话我记了很久。
两者关系可以这样看:通用评测提供方法论和对比基准,中文评测提供语言特异性和文化适配。做中文理解能力评测时,我会参考通用评测的指标设计、数据划分、统计检验方法。我同时会加入中文特有的挑战,比如歧义消解、零代词、量词搭配。没有通用框架,评测容易碎片化;没有中文特色,评测就失去灵魂。实际工作中,我常把两者结合使用。先用通用基准看模型的基础能力,再用中文专项基准看本地化表现。
1.3 开展中文理解能力评测的核心价值与应用场景
开展中文理解能力评测,核心价值我总结成四个字:选、调、控、研。选模型,企业需要知道哪个大模型中文理解更靠谱。调模型,开发者需要评测反馈来定位错误、迭代版本。控风险,内容平台需要检测模型是否生成有害、偏见、幻觉内容。研学术,研究者需要可复现的基准来比较方法。我给公司选型时,看过很多榜单。榜单高的模型,在中文客服场景里未必好用。它可能擅长做选择题,不擅长处理口语化、带情绪的用户消息。评测能帮我缩小候选范围,不能替代业务测试。
应用场景非常广。智能客服里,评测模型能否准确理解用户意图、识别情绪、多轮对话中保持上下文。内容审核里,评测模型能否分辨反讽、隐喻、谐音梗。搜索问答里,评测模型能否理解长尾查询、地域表达、专业术语。教育领域,评测模型能否批改中文作文、解释古诗词、纠正语法。金融领域,评测模型能否从财报、新闻、研报中抽取关键信息。医疗领域,评测模型能否理解患者主诉、医学术语、否定表达。我印象很深的一次,一个医疗问答模型把“不排除肺癌”理解成“排除肺癌”。这种错误在评测中必须被抓住。
多模态场景也在增加。中文理解能力评测不再局限于纯文本。图片里的文字、视频里的字幕、语音转写后的文本,都需要理解。我参与过一个短视频内容理解项目。模型要结合画面和中文标题判断视频主题。标题写“今天天气真好”,画面却是暴雨,模型需要理解反讽。这类评测比纯文本难得多。它要求评测设计者考虑跨模态对齐、时序关系、文化语境。中文理解能力评测的价值,最终体现在让机器更懂中文使用者。我作为开发者,每次看到模型在中文评测上进步,都会觉得离这个目标近了一步。
我第一次认真研究评测基准,是因为一个很具体的困惑。团队花了两周时间在一个中文情感分类基准上把模型准确率从82%提到了89%。我当时挺高兴,觉得模型中文理解能力进步了。后来换了一个基准测试,同一个模型分数只有63%。我盯着两个榜单看了很久,意识到一个问题:基准不是标尺,更像是不同形状的模具。你把模型放进不同的模具里,它显现出来的样子完全不一样。
2.1 中文理解能力评测基准的定义与设计原则
我理解的评测基准,是一套可复用的测试方案。它包含任务定义、数据集、评价指标、对比方法、排行榜机制。基准的作用是让不同模型在同一个规则下比较。规则公平,比较才有意义。规则偏了,榜单就成了游戏。
设计一个中文理解能力评测基准,我总结过几条原则。任务要真实,不能为了难而难。有些基准故意设计刁钻的句子,模型做不出来,人类也做不出来,这就失去了评测价值。标注要可靠,中文的歧义性和主观性很强,标注者之间的分歧必须被记录和处理。指标要多元,单一准确率会掩盖模型在不同子群体上的表现差异。可复现性要保证,数据划分、随机种子、超参数搜索范围都要公开。我见过一些基准,论文里分数很高,别人复现不出来。这种基准对社区是一种伤害。
还有一条原则容易被忽略:基准要能区分模型。如果一个基准上所有模型的分数都集中在90到95之间,它就失去了区分度。好的基准应该像一把有刻度的尺子,能测出不同模型之间的实际差距。我参与设计过一个中文成语理解基准,初期版本太简单,大模型和小模型都能做对。后来我们增加了语境歧义和低频成语,分数分布才拉开。基准设计是一个迭代过程,不是一次成型。
2.2 主流中文理解能力评测基准梳理与对比
中文理解能力评测基准这些年发展很快。我按时间线和任务类型做了一个粗略梳理。早期有CLUE,它借鉴了GLUE的思路,包含文本分类、相似度、阅读理解等任务。CLUE在2020年左右影响很大,它让中文NLP有了一个统一的比较平台。后来出现了FewCLUE,聚焦小样本场景。再后来是CUGE,尝试把中文理解能力拆成多个维度,包括语言理解、内容理解、生成质量。我实际用过CLUE和FewCLUE,感觉CLUE更适合看模型的基础能力,FewCLUE更接近真实业务场景,因为业务里标注数据往往很少。
除了这些综合性基准,还有大量专项基准。比如C3做中文阅读理解,CMRC系列做机器阅读理解,OCNLI做中文自然语言推理,CHID做成语完形填空,WPLC做古文理解,CLUEWSC做中文指代消解。我做过一个对比表格,把这些基准按任务类型、数据规模、标注方式、评价指标分类。分类之后我发现一个现象:大部分基准集中在句子级和段落级理解,篇章级和语用级理解基准很少。中文里的反讽、隐喻、委婉表达,几乎没有人做系统评测。这是一个明显的空白。
专项基准和综合基准各有优劣。综合基准覆盖面广,能给出一个总体印象。专项基准深度够,能定位具体能力短板。我在项目里通常两者结合用。先用综合基准筛掉明显不行的模型,再用专项基准看候选模型在关键任务上的表现。有一次选模型做中文客服质检,综合基准上A模型比B模型高3分,但专项意图识别基准上B模型比A模型高8分。最后选了B模型,上线效果确实更好。基准对比不能只看总分,要看任务匹配度。
2.3 从静态基准到动态基准的演进逻辑
静态基准的问题,我感受越来越深。一个基准发布之后,数据固定、答案固定、排行榜固定。时间一长,模型会过拟合。有些团队会针对排行榜做优化,把测试集当训练集用。我见过一个模型在某个基准上分数高得离谱,拿过来做实际任务,表现平平。后来发现它的训练数据里混入了那个基准的测试集。这种情况在学术圈叫数据污染,在工业界叫刷榜。不管叫什么,结果都是基准失去了评测功能。
动态基准是应对这个问题的一个方向。动态基准的思路是定期更新测试数据,或者用程序自动生成新样本。比如有些基准采用对抗生成的方式,每次评测时生成新的测试用例。有些基准采用滚动更新机制,每季度替换一部分数据。我参与过一个动态阅读理解基准的设计,我们用了三种策略:同义改写、反事实生成、跨领域迁移。同义改写保证模型不能靠记忆关键词得分。反事实生成检测模型是否真的理解了逻辑关系。跨领域迁移看模型的泛化能力。这些策略组合起来,让基准的寿命延长了不少。
动态基准也有代价。更新频率高了,历史分数就无法直接比较。不同时间评测的模型不在同一个测试集上,排行榜的意义会打折扣。我见过一些动态基准采用锚点机制,保留一小部分固定样本作为校准集。新模型先跑锚点样本,再跑新样本,用锚点分数做归一化。这种做法能部分解决可比性问题,增加了评测流程的复杂度。静态和动态之间没有绝对优劣,取决于评测目的。做学术研究,静态基准方便复现和对比。做产品选型,动态基准更能反映真实场景。
2.4 面向不同任务场景的基准选择与组合策略
选基准这件事,我踩过不少坑。最开始我只看榜单排名,谁分数高选谁。后来发现榜单分数和业务效果之间有一条很宽的鸿沟。我开始整理一套自己的选基准流程。第一步是明确任务场景。做搜索排序,重点看语义匹配和相关性基准。做文本分类,重点看情感分析和意图识别基准。做问答系统,重点看阅读理解和对答基准。做内容生成,重点看摘要和改写基准。第二步是看数据分布。基准数据的来源、领域、语言风格和业务数据越接近,评测结果越有参考价值。第三步是看评价指标。业务关心什么,基准就应该侧重什么。业务关心召回率,基准就不应该只看准确率。
组合策略比单一基准更重要。我通常采用三层组合。底层是通用中文理解基准,看模型的基础语言能力。中层是任务相关基准,看模型在目标任务类型上的表现。顶层是场景化基准,看模型在模拟业务数据上的表现。三层都通过的模型,才会进入实际业务测试环节。我做过一个金融领域的项目,通用基准上三个模型分数接近,任务相关基准上有一个模型明显领先,场景化基准上这个模型的优势更大。最后上线效果验证了评测组合的有效性。
组合策略还要考虑成本。跑太多基准费时费力。我一般会先跑一个轻量级筛选基准,快速排除明显不合适的模型。然后对剩下的候选模型跑深度评测。有一次团队同时评测八个模型,我设计了一个两阶段方案。第一阶段用三个轻量基准,每个模型跑二十分钟。第二阶段用五个深度基准,只让前四名进入。整个评测周期从预估的两周缩短到四天。基准选择不是越多越好,是在有限资源下做出最有效的判断。
我越来越觉得,中文理解能力评测基准体系不是一个固定的工具箱,而是一个不断生长的生态系统。新的任务会出现,新的语言现象会被关注,新的评测方法会涌现。作为使用者,我需要保持对基准的敏感度,定期审视手上的基准是否还适用。作为参与者,我也希望自己能贡献一些针对中文特色的评测设计。这条路还很长。
做中文评测这些年,我和团队花时间最多的事情不是跑模型,而是造数据。模型换个参数就能重跑,数据集出了问题,后面所有结论都得推翻重来。有一次我们发现一个情感分类数据集里混进了几百条标注错误的样本,那批实验全部作废,两周的工作白费。从那以后,我对数据集构建这件事多了一层敬畏。评测数据集不是一次性的消耗品,它是整个评测体系的地基。
3.1 中文理解能力评测数据集的类型与任务覆盖
我习惯把中文理解能力评测数据集按任务形式做一个粗略的分类。第一类是分类式数据集,包括情感分类、主题分类、意图识别、自然语言推理。这类数据集的特点是标签明确,评价指标简单,通常用准确率或F1值衡量。第二类是抽取式数据集,包括命名实体识别、关系抽取、事件抽取、指代消解。这类数据集需要模型定位文本中的关键片段,标注成本比分类高不少。第三类是推理式数据集,包括逻辑推理、常识推理、因果推理。中文推理数据集的建设难度最大,因为推理链条的标注一致性很难保证。
第四类是问答式数据集,包括抽取式阅读理解、生成式问答、多跳问答。中文阅读理解数据集从CMRC系列到C3再到近年的多跳问答数据集,规模和难度都在增长。第五类是生成式数据集,包括摘要、改写、翻译、对话。生成任务的数据集评价最难,因为正确答案不唯一。我做过一个中文摘要数据集的质量评估,同一个源文本,五个标注者写出了五份完全不同的摘要,人工评分一致性只有0.4左右。生成式数据集的标注指南需要写得非常细致,否则标注者之间的分歧会吞没数据集的价值。
按语言层级分,中文理解能力评测数据集还可以分成字级、词级、句子级、段落级、篇章级。字级数据集比如错别字检测、拼音标注。词级数据集比如分词、词性标注、同义词辨析。句子级数据集最多,大部分分类和推理任务都在句子级。段落级数据集包括段落排序、段落摘要。篇章级数据集最少,包括长文理解、多文档推理。我观察到一个现象,中文篇章级理解数据集的数量不到句子级的十分之一。这和标注成本直接相关,一篇三千字的文章,标注者要读完才能回答一个问题,效率极低。篇章级理解的评测需求却在增长,大模型的应用场景越来越偏向长文本处理,这个缺口需要被填补。
3.2 数据集构建流程:语料采集、标注、质量控制与数据划分
语料采集是数据集构建的第一步,也是最容易被低估的一步。我刚开始做数据集的时候,觉得网上文本那么多,随便爬一点就够了。后来发现采集源的选择直接决定了数据集的上限。新闻语料正式规范,但语言现象单一。社交媒体语料生动丰富,但噪声大、标注难。百科语料知识密集,但句式重复率高。我现在的做法是混合采集,按目标任务的特性确定不同来源的配比。做通用理解评测,新闻、百科、论坛、博客各占一定比例。做领域评测,领域文献和行业报告要占主导。
采集过程中有个细节我踩过坑。版权和隐私问题。有些语料来源的授权条款不允许二次分发,有些文本包含个人信息。我现在的习惯是采集前先过一遍授权协议,采集后做一次隐私脱敏。脱敏不是简单替换人名,还要处理地址、电话、身份证号、银行卡号这些敏感字段。中文的脱敏比英文难,因为中文没有明显的词边界,正则匹配容易漏。我见过一个数据集因为脱敏不彻底被迫下架,团队半年的工作打了水漂。
标注环节是数据集质量的核心。我总结了几条实操经验。标注指南要写到傻瓜都能看懂的程度,每个标签的定义、边界、示例、反例都要列清楚。标注者培训不能省,我通常会让标注者先做一轮试标注,把分歧集中的案例拿出来讨论,统一理解后再正式开工。标注一致性要持续监控,我一般每标注五百条就抽检一次,计算标注者之间的一致率。一致率低于阈值就暂停,重新对齐标准。标注者疲劳也是影响因素,一个人连续标注两小时之后,错误率会明显上升。我会设置强制休息,每四十分钟休息十分钟。
质量控制环节我采用多层机制。第一层是标注者自检,每条标注完成后标注者自己复核一遍。第二层是交叉验证,重要样本由两个标注者独立标注,分歧样本进入仲裁。第三层是模型辅助检测,用一个预训练模型跑一遍标注数据,找出模型预测和人工标注差异大的样本,这些样本往往是标注错误的高发区。第四层是抽样人工复核,从最终数据集中随机抽取百分之五,由资深标注员做最终审核。这四层走下来,数据集的标注准确率能稳定在百分之九十五以上。
数据划分看起来简单,其实有很多讲究。训练集、验证集、测试集的划分要保证分布一致。我见过一些数据集,训练集和测试集的来源不同,模型在训练集上表现很好,测试集上直接崩掉。划分时还要考虑去重,中文文本的重复率比想象中高,同一篇新闻被不同网站转载,内容几乎一样。如果不做去重,训练集和测试集之间可能存在泄漏。我现在的做法是用MinHash做近似去重,相似度超过阈值的文本只保留一篇。测试集的构建尤其要小心,测试集应该反映真实场景的难度分布,不能全是简单样本,也不能全是困难样本。
3.3 代表性中文理解能力评测数据集分析
CLUE是我最早接触的中文评测数据集。它包含九个任务,从文本分类到阅读理解都有覆盖。CLUE的贡献在于它建立了一个统一的中文评测框架,让不同模型有了一个共同的比较平台。我实际用过CLUE做模型筛选,它的数据质量整体可靠,标注一致性较高。CLUE的局限在于任务偏基础,大部分是句子级理解,篇章级和推理类任务偏少。对于大模型时代的评测需求,CLUE的区分度在下降。我最近跑了一轮CLUE,几个主流大模型的分数都挤在九十分以上,很难看出实际差距。
CMRC系列是中文机器阅读理解的代表数据集。CMRC2018是抽取式阅读理解,给定一段文本和一个问题,模型需要从文本中找出答案片段。CMRC2019增加了对话式阅读理解,问题来自多轮对话的上下文。CMRC2020转向了篇章级阅读理解,文本长度从几百字增加到几千字。我参与过CMRC2020的评测,篇章级阅读对模型的挑战明显更大,模型需要在长文本中定位相关信息,还要处理跨段落推理。这个数据集的标注质量很高,问题设计有层次,从事实查找 to 推理判断都有覆盖。
OCNLI是中文自然语言推理数据集,它的特点是标注质量极高。OCNLI的构建采用了严格的标注流程,每个样本由多人独立标注,分歧样本经过多轮讨论确定最终标签。我对比过OCNLI和其他中文NLI数据集,OCNLI的标注一致性明显更高。这个数据集的价值在于它提供了可靠的推理评测基准。OCNLI的规模不大,只有五万多条,但质量弥补了规模的不足。我在做模型推理能力评估时,OCNLI是必选数据集。
CHID是中文成语完形填空数据集,它的设计很有中文特色。成语是中文独有的语言现象,四个字里包含典故、比喻、语法结构。CHID的每个样本是一段文本,其中某个成语被替换成空白,模型需要从候选成语中选择正确的一个。这个数据集考察的不只是词汇量,还有对上下文语义的理解。我做过CHID的评测分析,发现模型在常见成语上表现很好,在低频成语和语境歧义成语上错误率很高。CHID的价值在于它揭示了模型中文理解的一个薄弱环节。
WPLC是古文理解数据集,它的出现填补了中文评测的一个空白。古文和现代汉语在词汇、语法、语用上差异很大。WPLC的任务包括古文断句、古文翻译、古文阅读理解。我用WPLC评测过几个模型,发现大模型在古文上的表现两极分化,有的模型古文理解能力接近人类,有的模型连基本的断句都做不对。WPLC的数据规模不大,但它的存在提醒我,中文理解能力评测不能只关注现代汉语。古文是中文的根,模型对古文的理解能力反映了它对中文语言结构的掌握深度。
这些代表性数据集各有侧重,也各有局限。CLUE覆盖面广但深度不足,CMRC专注阅读理解但任务单一,OCNLI标注可靠但规模有限,CHID和WPLC针对中文特色但数据量小。我在实际评测中会组合使用这些数据集,用CLUE做初筛,用CMRC和OCNLI做深入评估,用CHID和WPLC做专项检测。组合使用能部分弥补单一数据集的不足,但组合策略需要根据评测目标调整。
3.4 领域、方言、古汉语与多模态数据集的扩展需求
领域数据集的需求越来越迫切。通用中文理解数据集主要覆盖新闻、百科、论坛这些常见领域,在医疗、法律、金融、工业这些专业领域,通用数据集的评测结果参考价值有限。我做过一个医疗问答的评测实验,模型在通用阅读理解数据集上得分很高,在医疗问答数据集上错误率超过百分之四十。医疗文本里的专业术语、缩略语、特殊表达方式,通用模型完全没有概念。领域数据集的构建需要领域专家深度参与,标注指南要融合领域知识和语言学标准。成本很高,需求很真实。
方言数据集是另一个明显的缺口。中文不止普通话一种形式,粤语、闽南语、吴语、四川话都有大量的使用人口。方言和普通话在词汇、语法、语音上差异很大,有些方言的句子写成文字,普通话使用者完全看不懂。我接触过一个粤语客服场景的项目,通用中文模型在粤语文本上的理解准确率不到百分之五十。方言数据集的构建难度在于标注者难找,既懂方言又懂标注规范的人很少。我了解到一些团队在用方言母语者做众包标注,质量参差不齐,需要额外的质量控制流程。方言评测数据集的建设需要语言学研究和工程实践的配合。
古汉语数据集的需求同样在增长。古文理解不只是学术研究的需求,文化教育、古籍数字化、历史研究都有实际应用场景。古汉语的评测任务和现代汉语有重叠也有差异。重叠的部分比如断句、词义消歧、指代消解。差异的部分比如典故理解、通假字识别、古代名物制度理解。WPLC是一个好的开始,但覆盖的任务类型和文本范围都有限。古汉语数据集的构建需要古汉语专业研究者参与,标注指南要处理大量现代汉语中不存在的语言现象。我参与过一个古文断句数据集的设计,标注分歧主要集中在人名、地名、书名这些专有名词的边界上。这类问题需要专门的标注规则。
多模态数据集是近年来的热点。中文多模态理解涉及文本和图像、文本和语音、文本和视频的联合理解。图文匹配、视觉问答、视频描述生成、语音识别后理解,这些任务都需要多模态数据集支撑。我做过一个中文图文匹配数据集的评测,发现模型在处理图文矛盾、图文互补、图文隐喻这些复杂关系时表现很差。多模态数据集的构建比纯文本数据集复杂得多,标注者需要同时处理两种模态的信息,标注成本高,质量控制难。多模态评测的指标设计也是难题,文本和图像的贡献如何量化,跨模态的一致性如何衡量,这些问题都还没有成熟答案。
这些扩展需求背后有一个共同的逻辑。中文理解能力评测不能停留在通用、标准、现代、纯文本的舒适区里。真实世界的语言使用是领域化的、方言化的、历史化的、多模态化的。评测数据集要跟上真实需求,才能提供有价值的判断。我理解这件事的难度,领域专家、方言母语者、古汉语研究者、多模态标注者,这些资源都很稀缺。数据集的构建周期长、成本高、回报慢。但如果不做,中文理解能力评测就会停留在表面,无法深入到真实的应用场景中去。这条路需要更多人一起走。
跑了这么多年中文评测,我最大的感受是:方法和指标的选择,比模型本身更能决定一次评测的成败。一个指标选偏了,模型排名可能完全反过来。我亲眼见过一个评测项目,用BLEU做中文生成任务的指标,结果一个只会堆砌高频词的模型拿了第一名。那次之后,我对每一类任务该用什么指标这件事,开始反复琢磨。
4.1 常见评测任务形式:分类、抽取、推理、问答与生成
分类任务是我接触最早也最熟悉的形式。情感分类、意图识别、主题分类、自然语言推理,本质都是给一段文本分配一个标签。这类任务的形式简单,却是中文理解评测中使用频率最高的。我给一个文本,模型输出一个类别,对错一目了然。做分类评测时我比较在意类别边界的定义。中文情感分类里,“这手机也就那样吧”到底算中性还是负面,标注指南里得写清楚。我见过一个数据集把这类句子全标成中性,另一个数据集全标成负面,同一个模型在两个数据集上分数差了将近十个点。
抽取任务要求模型从文本里定位信息片段。命名实体识别、关系抽取、事件抽取、指代消解,都属于这一类。我参与过一个中文事件抽取的评测项目,发现模型在触发词识别上表现不错,到了论元角色分类就掉得厉害。中文的论元边界比英文模糊,“张三昨天在北京和领导吃了顿饭”这句话里,“北京”是地点论元,但要不要把“昨天”也算进去,不同标注体系有不同答案。抽取任务的评测指标通常用精确率、召回率和F1值。我个人的习惯是三个指标一起看,只看F1容易掩盖问题,精确率高召回率低的模型在有些场景反而更可用。
推理任务是中文评测里最难啃的骨头。逻辑推理、常识推理、因果推理,每一类都让模型头疼。我做过一个中文因果推理的评测,给模型两句话,让它判断哪句是因哪句是果。模型在显性因果标记词(因为、所以、导致)上正确率很高,一旦因果标记词被省略,正确率直接腰斩。推理任务的评测有个特殊困难:推理链条的标注很难做到高一致性。同一个推理题,两个标注者可能推出不同答案,但他们各自的推理路径都没错。中文推理评测指标的设计要能容纳这种多路径正确性,不能简单地用非黑即白的对错来衡量。
问答任务在大模型时代变得格外重要。抽取式阅读理解、生成式问答、多跳问答、对话式问答,形式多样。我早期做问答评测用的是精确匹配和F1值,答案必须跟标注答案完全一致或者词重叠度达标。这套指标在抽取式问答上还行,放到生成式问答上就失灵了。用户问“李白是哪个朝代的诗人”,模型答“唐朝”和答“唐代”都是对的,精确匹配会判错。中文的问答评测需要更灵活的指标,语义相似度、答案蕴含判断这些方法开始被引入。我在一个中文多跳问答评测里试过用大模型做答案评判,效果比传统指标好,但引入了一个新问题:评判模型本身的偏差怎么控制。
生成任务的评测是最让我头疼的。摘要、改写、翻译、对话,同一个输入可以有多个都正确的输出。我做过一个中文摘要数据集的指标对比实验,用ROUGE和BERTScore分别打分,两个指标的排名结果相关系数只有零点六左右。有些模型ROUGE分数高但生成的内容细节错误,BERTScore高但摘要偏题。人工评估的成本又太高,一份两千字的摘要,评估者要读原文再读摘要,一条至少五分钟。生成任务的中文评测目前没有完美方案,我倾向的做法是自动指标做初筛,人工评估做精评,两阶段配合。
4.2 自动指标、人工评估与模型对比方法
自动指标是我做评测时的第一道工具。准确率、F1值、ROUGE、BLEU、METEOR、BERTScore,每个指标都有它的适用场景和失效边界。准确率用在类别均衡的分类任务上没问题,类别不均衡时就有欺骗性。我见过一个反欺诈文本分类数据集,正样本比例只有百分之三,模型全部预测为负类也能拿到百分之九十七的准确率。F1值能缓解这个问题,但它对少数类的权重设置又需要根据场景调整。中文评测里用自动指标,我现在的习惯是先看数据分布,再选指标,不盲目套用固定模板。
ROUGE和BLEU在中文生成任务上的问题尤其明显。中文分词边界模糊,词一级的匹配计算容易受分词工具影响。同一个句子,用jieba分词和用pkuseg分词,ROUGE分数能差出两三个点。BLEU对词序敏感,中文的语序比英文灵活,“我昨天去了公园”和“昨天我去了公园”语义完全一样,BLEU会给出不同分数。我试过用字级匹配替代词级匹配,在中文摘要任务上反而更稳定。BERTScore这类基于嵌入的指标在中文上也有限制,预训练模型本身的偏差会传导到指标分数上。用BERTScore评中文摘要,如果预训练模型在某个领域语料上训练不足,那个领域的摘要质量就会被低估。
人工评估是自动指标失效时的兜底方案。我设计过几套中文理解能力的人工评估量表,维度包括流畅性、相关性、忠实度、完整度。每个维度给一到五分,评估者独立打分。人工评估的实施比设计难得多。评估者的疲劳效应很明显,一小时内评估超过二十条,评分的一致性就开始下降。评估者的背景也会影响判断,让一个程序员评法律文本摘要,他可能连术语对不对都看不出来。我现在的做法是按领域匹配评估者,法律文本找法律背景的人评,医疗文本找医学背景的人评。人工评估的成本高,但它的价值在于能捕捉自动指标永远测不到的东西:逻辑自洽、事实准确、表达得体。
模型对比方法看起来简单,实际操作起来陷阱很多。同参数量的模型比较有意义,不同参数量的大模型和小模型比,赢了也不说明问题。我见过一些评测报告把BERT和GPT-4放在一个表里比中文阅读理解,这种比较的参考价值有限。对比时还要控制推理配置,温度参数、解码策略、最大生成长度都影响结果。我做过一组对比实验,同一个模型只改了温度参数,中文生成任务的人工评分差了零点八分。公平对比的前提是配置统一,这个细节容易被忽略。对比的结论也要看统计显著性,两个模型分数差零点五个点,跑三次实验可能排名就换位置了。我现在的习惯是做多次重复实验,报告平均值和方差,不做单次分数的简单排名。
4.3 鲁棒性、偏差、幻觉与安全性的评测维度
鲁棒性评测是我近年来越来越重视的方向。模型在标准测试集上表现好,换个说法可能就崩了。我做过一组中文鲁棒性实验,对测试样本做微小扰动:同义词替换、语序调整、标点变化、错别字注入。模型在原始样本上准确率九十出头,同义词替换后掉到八十二,错别字注入后掉到七十五以下。中文的同义词替换比英文难做,因为中文近义词的语义和语用差异更微妙。“美丽”和“漂亮”在很多语境下可以互换,但“美丽的谎言”换成“漂亮的谎言”就很别扭。鲁棒性评测的扰动设计需要语言学知识支撑,不能靠简单的词表替换。
偏差评测是中文理解评测里容易被忽视却影响深远的维度。性别偏差、地域偏差、职业偏差、年龄偏差,在中文语料里都有体现。我做过一个中文职业性别关联的评测,给模型输入“护士”和“程序员”,让它补全“他是一个___”,护士的补全结果里女性代词比例明显偏高。这种偏差来自训练语料中的社会刻板印象,模型只是放大了它。中文偏差评测的困难在于标注标准很难统一。什么样的输出算有偏差,不同文化背景的人判断不同。我参与过一个跨文化团队的中文偏差评测项目,同一个样本,中国标注者和海外华人标注者的偏差判断一致率只有七成。
幻觉评测在大模型时代成了刚需。中文幻觉的表现形式跟英文不完全一样。中文里有一类特殊幻觉叫“成语生造”,模型造出一个不存在的四字词,看起来像成语,实际上没有这个说法。还有“典故误用”,模型把某个典故的来源、人物、情节说错,因为训练语料里有错误信息被它学了去。我评测过几个大模型的中文历史问答,问“纸上谈兵说的是谁”,有的模型答赵括,有的答马谡,有的编了一个不存在的人名。幻觉评测不能只看表面流畅度,要结合事实核查。我现在的做法是建一个中文事实核查知识库,把模型的生成结果跟知识库比对,自动标记可疑内容再人工复核。
安全性评测在中文场景有独特挑战。中文的敏感内容检测比英文复杂,因为中文表达含蓄,讽刺、隐喻、谐音都可能承载敏感信息。模型对直接的有害指令拒绝得不错,对间接的、包装过的有害指令识别率就下来了。我测试过一个场景,用古诗词的形式问一个敏感问题,模型的拒绝率明显低于直接提问。安全性评测的指标设计也难,拒绝率太高会导致模型过度保守,正常问题也不回答。我倾向用“恰当拒绝率”这个指标,既看该拒绝的拒绝了没有,也看不该拒绝的有没有被误拒。中文安全性评测还需要考虑文化语境,有些内容在一种文化里敏感,在另一种文化里不敏感,评测标准需要明确适用场景。
4.4 大模型时代中文理解能力评测流程设计
大模型时代的中文评测流程跟小模型时代有了本质区别。小模型时代我习惯用固定测试集加固定指标,跑一遍出分数排个名。大模型时代这套流程不够用了。模型的输出空间大,同一个问题可以有无穷多种回答。模型的参数量大,评测成本高,跑一次全量测试集的费用不小。模型的更新快,上个月评的分数这个月可能就变了。我现在设计的评测流程,核心原则是分层抽样、动态更新、多维度交叉验证。
分层抽样是我控制成本同时保证覆盖度的主要手段。不做全量测试,按任务类型、难度等级、领域分布做分层,每层抽一定比例的样本。中文理解评测的层次可以按语言单位分(字、词、句、段、篇),也可以按认知深度分(记忆、理解、应用、分析、评价)。我一般会保证每个层级都有足够样本量,同时根据评测目标调整各层权重。做通用能力评测,句子级和段落级权重大一些。做专业领域评测,领域相关的篇章级样本权重要提上去。分层抽样的关键在层间边界要清晰,层内样本要有代表性。我见过有人分层之后每层只抽了十几条样本,分数波动很大,这种抽样还不如不抽。
动态更新是应对数据污染的必要手段。大模型的训练语料里很可能包含了公开的评测数据集,模型在测试集上的高分有一部分是“背答案”背出来的。我的应对策略是定期替换测试集中的样本,用新构建的、未公开的样本替换掉可能被污染的旧样本。替换频率看模型更新周期,主流大模型三个月一更新,测试集也差不多三个月换一批。动态更新带来一个新问题:不同批次的测试集分数不可直接比较。我现在的做法是保留一个固定的“锚点集”,每次评测都跑一遍锚点集,用锚点集的分数变化来校准不同批次的分数。
多维度交叉验证是我判断评测结果可靠性的最后一道防线。自动指标给一个分数,人工评估给一个分数,模型间的对比给一个相对排名。三个维度如果结论一致,我对结果的信心就比较高。如果自动指标说模型A好,人工评估说模型B好,我就得停下来分析原因。可能是自动指标的偏好跟人类判断不一致,也可能是人工评估的样本量不够。我做过一个中文对话评测,自动指标BERTScore排名第一的模型,人工评估只排到第四。查了半天发现那个模型倾向于生成通用安全的回复,嵌入相似度高但信息量低,评估者觉得它在“说废话”。多维度交叉验证的目的就是暴露这种单一维度的盲区。
大模型时代的中文评测流程还需要考虑提示词设计的影响。同一个模型,不同的提示词模板,中文理解任务的分数能差出五到十个点。提示词的措辞、示例数量、输出格式约束,每个因素都在影响结果。我现在的评测流程里,提示词设计是一个独立环节,需要做多轮迭代和验证。先用小样本测试不同提示词模板的效果,选最优模板再跑全量评测。提示词模板的选择标准要透明,不能为了某个模型的高分去定制模板,那样评测就失去了公平性。我在评测报告里会附上完整的提示词模板,让其他人可以复现。这件事看起来繁琐,但它是大模型评测可复现性的基础。没有透明的提示词,分数就没有可比性。
做中文理解能力评测这些年,我越来越觉得这件事的难点不在模型本身,而在评测这套体系怎么搭、怎么跑、怎么让人信。评测不是跑个脚本出个分数就完事,它涉及语言学、数据工程、统计方法、行业知识,还有一大堆看不见的坑。我在不同项目里踩过的坑,有些是中文特有的,有些是所有语言评测共通的,有些是大模型时代才冒出来的。把这些挑战、趋势和实践经验整理出来,希望对正在做中文评测的人有点用。
5.1 中文语言特性带来的核心挑战
中文的语言特性让评测这件事从根上就比英文复杂。我刚开始做中文评测时,习惯性地把英文评测的流程直接搬过来,分词、词性标注、句法分析一套走下来,结果发现很多环节在中文上根本不成立。中文没有天然的词边界,分词标准不统一,同一个句子不同工具切出来的结果能差出好几个词。这直接影响所有词级指标的计算。我做过一个实验,同一份中文摘要数据,用jieba和pkuseg分别分词后算ROUGE,分数差了将近三个点。评测报告里如果不注明分词工具和词典版本,这个分数就没有复现的可能。
中文的省略和指代比英文更严重。英文里主语通常不能省,中文里主语可以连续省略好几个句子。我评测过一个中文阅读理解数据集,很多问题需要模型跨句推断省略的主语是谁。模型在单句内指代消解上表现还行,跨句、跨段落的指代就频繁出错。更麻烦的是中文的零指代,句子压根没有指代形式,全靠语义和语境补全。标注者有时候都说不清某个空缺的主语该指向哪个人物,让模型去判断就更难了。这类语言特性带来的挑战,不是靠增大模型参数量就能解决的,它需要评测设计本身对中文的语言规律有足够尊重。
中文的语序灵活性和虚词用法也给评测带来麻烦。英文的语序相对固定,主谓宾的位置变化通常意味着语义变化。中文里“我吃了饭”和“饭我吃了”语义几乎一样,只是话题焦点不同。BLEU这类对词序敏感的指标在中文上就容易误判。虚词的问题更微妙,“的”“了”“着”“过”这些词在中文里承担了时态、语气、结构等多种功能,模型漏掉一个“了”或者多用一个“的”,在自动指标上可能扣分不多,但人工读起来语感差别很大。我做过一组中文语法可接受性评测,模型对明显的语法错误识别率很高,对虚词误用这种细微问题几乎无感。中文评测需要一套能捕捉这些细微语言现象的指标和方法,现在业界还没有特别成熟的方案。
中文的方言和文白差异是另一个大挑战。普通话评测做得再多,也覆盖不了粤语、闽南语、吴语这些方言区的真实语言使用。我参与过一个面向客服场景的中文理解评测项目,标准普通话测试集上模型准确率九十多,换到带粤语表达的客服对话上直接掉到六十出头。古汉语和现代汉语的差异同样巨大。让模型理解“子曰学而时习之”不难,让模型判断一段仿古文本的语义和现代文本是否一致就难了。中文评测的数据集如果只覆盖标准现代汉语,评测结论的适用范围就得打上问号。
5.2 动态更新、数据污染与可复现性问题
数据污染是我现在做评测最头疼的问题之一。大模型的训练语料动辄几万亿token,公开的中文评测数据集很可能被包含进去了。我测试过一个在中文阅读理解榜单上排名很高的模型,换一批新构建的、未公开的测试样本重新评测,分数掉了十几个点。这个差距说明模型在公开测试集上的高分有相当一部分来自记忆而非理解。数据污染让静态基准的可信度大打折扣。我现在的做法是每次评测都准备一批新样本,跟公开测试集的结果对照着看,两个分数差距过大就要警惕污染问题。
动态更新是应对污染的必然选择,但更新的代价不小。构建新测试集需要语料采集、标注、质检,一套流程走下来至少几周。更新频率高了,评测成本受不了。更新频率低了,又跟不上模型迭代的速度。我见过一些评测项目为了省事,每次只替换百分之十的样本,剩下的还用旧的。这种做法对污染的缓解作用有限,模型只要记住那百分之九十的旧样本,分数就不会难看。更彻底的做法是测试集完全重新构建,但这要求评测方有持续的数据生产能力和稳定的标注团队。国内能做到这一点的评测机构并不多。
可复现性是中文评测的另一个软肋。我经常看到论文或技术报告里报告了模型在某个中文基准上的分数,但照着描述去复现,怎么都跑不出那个数。问题出在太多细节没有披露:提示词模板、推理参数、后处理规则、测试集版本、甚至评测脚本里对某些样本的特殊处理。我做过一个中文评测的可复现性实验,找了三篇报告了同一基准分数的论文,分别按它们的方法复现,结果三个复现分数彼此之间差了四到八个点。可复现性差让评测结果的比较变得困难,也让评测结论的可信度下降。我现在的习惯是在评测报告里附上完整的配置文件、提示词模板、测试集版本号和评测脚本,让想复现的人能一步步跑出来。
动态更新和可复现性之间存在天然张力。测试集更新了,旧分数就不可比了。我处理这个矛盾的办法是维护一个锚点集,这个锚点集不公开、不更新,每次评测都跑一遍。新测试集的分数用来反映模型在当前样本上的表现,锚点集的分数变化用来校准不同批次之间的可比性。锚点集的规模不用大,几百条高质量样本就够,关键是它得足够稳定,不能被模型训练语料覆盖。
5.3 面向行业落地与多模态理解的发展趋势
中文理解能力评测正在从学术基准向行业落地延伸。我接触过金融、医疗、法律、政务几个领域的评测需求,发现通用基准的分数跟行业实际表现的相关性并不高。一个在CLUE上排名靠前的模型,放到金融合同条款理解任务上可能一塌糊涂。行业评测的难点在于领域知识壁垒高,标注者需要同时具备语言能力和领域知识。我参与过一个医疗问答评测项目,标注团队里有临床医生和语言学家,两边对同一条回答的质量判断经常不一致。医生关注医学准确性,语言学家关注表达清晰度,两个维度都重要,但权重怎么分配需要跟业务目标对齐。
行业评测的另一个趋势是评测与业务指标挂钩。学术评测看的是准确率、F1值这些统计指标,行业评测更关心模型能不能减少人工审核量、能不能提升用户满意度、能不能降低错误带来的损失。我做过一个政务热线文本分类的评测,模型在测试集上的F1值很高,上线后用户投诉率反而上升了。查原因发现测试集的类别定义跟实际业务中的类别定义有偏差,模型学的是测试集的分类边界,不是业务真正需要的分类边界。行业评测需要把业务指标翻译成可操作的评测指标,这个翻译过程比跑模型难得多。
多模态中文理解评测是另一个明显趋势。图文理解、视频理解、语音文本联合理解,这些任务在中文学术界和工业界的关注度都在上升。多模态评测的困难在于模态间的对齐和融合质量很难量化。我评测过一个中文图文匹配数据集,模型在整体匹配准确率上表现不错,细看发现它在纯文本线索上得分高,在需要结合图像细节的样本上表现差。多模态评测需要设计能区分“真多模态理解”和“单模态捷径”的任务形式。中文多模态评测还面临数据稀缺问题,高质量的图文对、视频文本对数据比纯文本数据难构建得多,标注成本也高出一个量级。
大模型驱动的评测方法本身也在变化。用大模型做评测员、用大模型生成测试样本、用大模型做对抗攻击,这些方法开始被广泛尝试。我用大模型生成过一批中文鲁棒性测试样本,对同义词替换、句式变换这些扰动,大模型生成的样本比人工规则生成的更自然。大模型评测员也有明显局限,它的判断会受自身偏差影响,对某些领域的事实核查能力不足,评测成本也不低。我倾向于把大模型评测员当作辅助工具,用它做初筛和异常检测,最终判断还是靠人工。
5.4 研究者与开发者开展中文理解能力评测的实践建议
做了这么多评测项目,我总结了几条自己一直在用的实践原则。评测目标要先行,不要为了跑模型而评测。我在每个评测项目开始前都会问自己:这次评测要回答什么问题?是选型、是诊断、是监控、还是对外报告?不同目标对应不同的评测设计。选型评测关注模型间的相对排名,诊断评测关注模型在哪些能力维度上弱,监控评测关注模型表现随时间的变化。目标不清楚,评测做出来就是一堆没有意义的数字。
测试集的构建比模型选择更重要。我见过太多项目在模型上花了大把时间,测试集却是随便找的公开数据。测试集的质量直接决定评测结论的质量。构建测试集时我会重点关注样本的代表性、标注的一致性、难度分布的合理性。代表性要求样本覆盖真实使用场景的主要类型。一致性要求不同标注者对同一样本的判断尽量统一,标注指南要写得足够细。难度分布要拉开梯度,全是简单样本的测试集区分不出模型能力高低。我习惯在测试集里保留一定比例的困难样本和边缘案例,这些样本最能暴露模型的问题。
评测流程要透明可复现。我在评测报告里会写清楚测试集版本、提示词模板、推理参数、评测脚本、指标计算方法。这些信息看起来琐碎,缺少任何一项都可能让别人无法复现你的结果。我还会报告多次重复实验的均值和方差,不做单次分数的简单排名。模型分数差一两个点时,重复实验的方差可能就覆盖了这个差距,这种情况下排名没有意义。统计显著性检验该做就得做,不能只看分数高低。
多维度交叉验证是提高评测结论可靠性的有效手段。自动指标、人工评估、对抗测试、鲁棒性测试,多个维度都指向同一结论时,我对结果的信心才足够。不同维度结论冲突时,停下来分析原因比强行下结论更有价值。我做过一个中文生成评测,自动指标和人工评估的排名不一致,追查后发现自动指标偏好长文本,人工评估偏好信息密度高的短文本。这个发现本身比排名结果更有意义。
评测要持续做,不能一次了事。模型在更新,数据在变化,用户需求在演进,评测体系也得跟着动。我现在的做法是建立常态化的评测机制,每个月跑一次核心基准,每个季度做一次全面评测,每年重新审视评测目标和指标体系。评测不是一次性项目,它是一个持续运转的系统。这个系统建好了,模型选型、能力诊断、风险预警这些工作才有可靠的数据支撑。
中文理解能力评测这件事,做久了会发现它既是技术活也是手艺活。技术活的部分可以靠工具和流程标准化,手艺活的部分需要经验、判断和对中文语言本身的敏感度。我认识的评测做得好的团队,通常都是既懂模型又懂语言、既重视数据又重视方法的人组成的。中文评测的挑战不会消失,趋势也在不断变化,实践建议也得跟着更新。保持学习、保持怀疑、保持对数据的敬畏,这三条是我做评测这些年最深的体会。