自建 ASR 测试集:数据怎么选、标注怎么做

2026-08-24

没有测试集的语音识别优化,全部是凭感觉。 换个模型、调个参数、加段降噪,改完你说不清是好了还是坏了,只能靠”听着顺一点”拍板。这篇讲怎么用自己的业务数据,搭一个能指导决策的 ASR 测试集。

为什么必须自建

公开数据集的成绩靠不住。 这类数据被大量模型反复训练过,测试集与训练集重叠的风险很高,分数天然虚高。拿它选型等于让候选模型都在自己见过的题目上考试。

它的场景分布也和你的业务多半对不上。 公开数据多是安静环境下的朗读或规范对话,而你的线上可能是客服电话的窄带音频、车间里的远场喊话、一群人抢着说的会议。两种分布上的排名没有理由一致。

测试集的作用是让每次改动都有可复现的对照,这决定了后面所有工作的取向:它要像你的线上,而不是像一份样品

采样:数据从哪来、怎么选

核心原则只有一句:按真实分布采样,而不是挑好听的。最可靠的做法是从线上真实流量里随机抽,抽完再按这些维度检查覆盖缺口:

  • 口音:地域口音是最大的变量,方言腔调、翘舌平舌、前后鼻音都要有。
  • 语速:慢条斯理的和连珠炮式的都要,别只留”标准语速”。
  • 年龄与性别:老人、儿童的声学特性与成年人差别很大,业务里有就必须覆盖。
  • 设备与信道:近场手机麦、远场会议麦、电话线路(窄带)是三种完全不同的输入。
  • 噪声环境:安静室内、街道、车内、有背景音乐、有他人交谈,各留一部分。
  • 内容类型专名密集的(人名、型号、订单号)和日常对话的要分开统计,错误模式完全不同。

另外专门留一块”难样本”:远场加混响、抢话、大段中英混说、信号断续。这部分刻意加量而不按真实比例采,因为它们最容易把不同方案的差距拉开。但要单独成组统计,别混进总分,否则总分被人为压低。

规模怎么定

没有”多少条就够了”的通用答案,但有两个可操作的判断方法。

一是看指标稳不稳。 把已标注样本随机分成若干份,逐份累加算错误率。数值还在明显上下跳,说明样本量不够,随机波动比你想检测的改进还大;继续加样本只在很小范围内浮动,就可以停了。

二是看分维度够不够。 你真正要看的是分维度表现——电话信道如何、专名场景如何——而不是总平均。总量看着很大,摊到”儿童 + 远场”这一格只剩零星几条,这一格就不能用来做决策。先列维度再倒推每格目标量,比先定总数靠谱。

标注规范:先定死,再开工

这是全篇最要紧的部分。规范必须在标注开始前定死,中途改等于前功尽弃——已标的部分要么返工,要么和后面口径不一致,指标从此不可比。下面这些约定一条都不能含糊:

  • 数字:阿拉伯数字还是汉字?听到”二零二五年”,标成 2025年 还是 二零二五年?建议照实记口语形式,把书面化交给 ITN 后处理,这样才测得出后处理的真实水平。
  • 标点:标不标?如果标,逗号句号的判断标准是什么?产品不依赖标点时,最省事的是不标点,评测前统一去除
  • 语气词:嗯、啊、这个、那个——记还是不记?重复的”这个这个这个”记几次?
  • 英文与字母:大小写怎么处理?缩写按字母拆开还是连写?中英混说时英文按词计还是按字母计?
  • 自我更正:说错后改口,“发到 A 部门…… 不对,发到 B 部门”。前半句记不记?建议全记,模型确实听到了这些声音,不记会造成大量假的删除错误。
  • 听不清:用统一占位符标记(例如 [听不清]),并约定这类片段是整条剔除还是保留但不计入。二选一,全程一致。
  • 非语音事件:咳嗽、笑声、按键、背景人声,标不标、用什么符号。
  • 数字串:订单号、电话号码这类连读数字,是否逐位记录、要不要加分隔符。
  • 儿化音与吞音:“一会儿”读成什么记什么,还是统一成书面形式。

写完不要直接铺开。先让两人各标同一小批比对分歧——分歧多半不是标注员水平问题,而是规范没写清楚。改完再标一批,直到分歧只剩真正难判断的边缘案例。另外给每条规则配两个正例一个反例,比抽象条文好记得多。

质量控制

  1. 双人独立标注 + 交叉核对。同一条音频由两人分别标再比对差异。全量成本过高时,至少让核心批次交叠。
  2. 抽检机制。已完成的批次按比例随机复核并记录问题类型。同类问题反复出现说明规范有洞,要补规范并回溯。
  3. 分歧裁决有人负责。指定一名仲裁者做最终判断,并把每次裁决写进规范附录;只停留在口头,同样的争议下周还会再来。
  4. 给标注员完整上下文。只给切碎的片段,专名和指代根本没法判断。

怎么用:让它保持有效

分维度看,不要只看总平均。 只报平均值不报分布是准确率被高估的常见方式——某个信道上的崩溃会被大量简单样本稀释。正确的输出是一张表:每个维度一行,错误率和样本量都写上。

固定测试集不参与任何调优。 一旦开始照着它反复调参数、挑热词、改后处理规则,它就慢慢变成训练集,分数持续变好而线上毫无变化。稳妥做法是另建一个开发集做日常迭代,测试集只在关键节点跑。

指标口径要跟测试集一起说明,中文按字算 CER,中英混说的口径尤其要写清楚。细节见中文为什么用 CER 而不是 WERWER 怎么算

定期补新数据。 业务在变、说法在变,一年前的测试集测不出今天的问题。补充时保持维度比例,新旧版本分开记录。

隐私与合规

真实业务录音几乎一定含个人信息。原则上要做到:

  • 有明确授权:录音用于质量评测,要在采集环节就取得告知与同意。
  • 脱敏处理:转写文本里的敏感字段做替换或掩码,必要时对音频本身处理。
  • 限定用途与范围:只用于评测,访问者最小化,不上传到未经评估的第三方服务。
  • 约定留存期限:到期删除,并且真的执行。
  • 优先本地处理:离线转写能让数据不出设备。

以上只是通用原则,不构成法律意见,具体做法以属地法规和法务判断为准。

常见问题

问:能不能用模型自己转写的结果当标注,省掉人工?

不能作为最终参考。用模型输出做标注等于把它的错误写进标准答案,自己考自己必然满分。可行的折中是用模型转写作初稿、人工逐条修正,但必须逐字过。

问:测试集要不要和训练数据来自同一批录音?

必须严格切开,而且按说话人和录音时段切,不能只按条目随机切——同一个人、同一场会议的片段落在两边,同样会造成泄漏。

问:只有几十条数据,还有必要做吗?

有必要,但要清楚它能回答什么。几十条不足以支撑精细的优劣比较,却足以发现明显硬伤——某个模型完全不认你的产品名、某条信道整体崩坏。先用小样本排除差的,再对剩下的候选扩量。另外真实录音的标注速度远低于朗读语料,工期要放宽。

相关阅读


本文讲的是建设 ASR 测试集的通用方法,不绑定任何具体实现或数据集。 不同业务的维度划分、标注口径与合规要求差异很大,请结合自身场景调整。 个人信息处理部分只是通用原则,不构成法律意见,请以属地法规与专业意见为准。 我们没有做过性能实测,因此不给准确率、速度一类的数字。

想系统学会用 AI?报名体系课或加入会员,照着学、照着用。