几段波形被送进一台转写机,出来的纸上只剩文字,纸外的说话人轮廓、音量曲线和房间回声被留在了机器里

一、转写丢掉的是信息类别,不是杂音

据公开报道,有新基准专门针对音频模型“记不住谁说的、怎么说”这个问题,指出现有评测的两处缺口:一是说话人身份、语气和背景声只存在于音频信号里,一转写就没了,而现有基准大多只考词汇内容;二是真实交互散落在相隔一段时间的多个会话里,多数评测却在单会话内出题。

这个批评对工程侧的价值不在于分数,而在于它把出题方向重新指了一遍。团队做语音相关的评测,常见路径是先接一层转写,把音频变成文本,然后在文本上写题。这条路径省事,代价是它考的是“转写之后还剩什么”。剩下的是词汇,丢掉的是四类东西:谁在说、怎么说、在什么声环境里说、这句话是哪一次会话说的。评测项要跟被丢掉的信息对着设计,否则跑完一圈拿到的读数,本质上是文本理解能力套了个音频的壳。

二、四类可测项与各自的题式

四类信息的失效方式不同,题式也就不能共用一套模板。

被丢的信息 可测项怎么设 判据要看什么 答错的含义
谁在说 同一句内容分别由两个声线说出,问该按谁的偏好处理;或把归属写错再问能否发现 结论是否随声线改变而改变 多用户场景下的串号风险
怎么说 把同一句话换成陈述、反问、迟疑、玩笑四种说法 是否把反问或玩笑当成事实记录下来 记忆写入被污染,后续全是错账
在什么环境里说 背景声里带关键线索(设备提示音、门外喊话、施工声),线索不进转写 是否把环境声纳入事实或正确排除 场景理解缺失,误判当前状态
哪一次说的 同一事实在早先会话说过,后续会话被更正,隔一段时间后提问 答的是当前版本还是旧版本,能否说出去向 时效管理失效

说话人归属这一项最容易被做假。如果题目里同时给了文字姓名标签,模型可以绕开音频答题,测出来的还是文本能力。可用的做法是把归属信息只放在声线里,文字里不出现称呼,或者故意让称呼与声线不一致,看它信哪个。语气一项同理,判据不能只看它复述对了文字,要看它把这句话归成了哪种意图类别。

声环境这一项要谨慎设题。背景声进入事实的边界很窄,把键盘声当成“对方正在打字”是合理推断,把房间里的电视声当成“用户在看某节目”就越界了。出题时要把这两类分开标注,前者答错算能力问题,后者答对反而要算错,因为它在没有依据的地方建立了事实。

跨会话时效这四项里最难做,因为多数评测集根本没有真实的时间维度。把同一批会话随机打乱顺序,冒充“相隔很久”,测不出任何东西:模型只需要按上下文里的先后关系答题。真实间隔意味着题目要考“它愿不愿意相信自己记住的东西已经过期”,这只有把新旧两个版本真的隔开足够远才有意义。

三、判据写成三元组,别交给裁判模型自由心证

语音记忆的题面天然带歧义,如果标准答案只是一段参考文本,再让一个模型去比对语义相近,读数会被裁判模型的偏好带着走。我们的写法是每条标准答案固定三个字段。

  • 实体:被考的那个事实对象,标识稳定,不接受同义改写带来的匹配歧义
  • 来源片段:这个事实出自哪一段音频的哪个区间,音频标识与起止位置都要填
  • 时间戳:这个事实是在哪一次会话、会话内的什么时刻建立的,以及有没有后续版本覆盖它

三元组的意义在于它把“答对了”拆成三件可独立检查的事:答的内容对不对、依据找没找对、找的是不是当前有效的那一版。很多模型会在第二、三项上露馅——结论碰巧正确,但引用了一段并不支持该结论的音频,或者引用了已被更正的旧版本。只看内容对错的评分会把这两类错误算成通过。

对语气类的题,三元组要再加一个意图类别字段,把它归成的类别与构造时给的类别直接比对,不做语义判断。裁判模型只被允许做一件事:把答案里的字段抽出来。判定规则写在代码里。

四、数据构造:标签要由构造过程给出

四类信息里最难的是获取真实标签。事后人工标注说话人和意图,成本高而且不可信——标注者听到的语气和真实用户听到的语气不是一回事。可用的路径是把标签做进构造过程里。

具体是这样:用合成语音生成语料,说话人身份由生成时使用的声线登记表直接给出,不依赖事后辨认;噪声不是随机叠加,而是从一份注册过的噪声库里按标识引入,每题记下用了哪几段、什么强度;多会话的时间跨度按真实间隔生成,同一批素材拉开到不同的时间戳上,并在元数据里记录先后与覆盖关系。这样做还有个额外好处:所有标签天生精确,不需要标注一致性这类补偿指标,也不会出现“两个标注员听出两种语气”的争议。

代价是合成语料与真实音频存在分布差。缓解办法是留出极小的一批真实录音只做校验,不用于出题主线,专门回答“合成出来的结论在真实音频上是否还成立”。

抗污染是构造阶段必须一起做的,而不是事后补的。四件事:留一批永不公开的题集;按季度换题,避免整个社区面向固定题集调参;掺入近实时素材,让背答案的模型无从下手;在题目里埋带标识的水印样本,用来识别有没有人直接把题库喂进训练。

五、失败要分三层,三层修法完全不同

只报一个正确率,团队会把三种病当一种病治。

失败层 现象特征 归因方向 修哪里
没听见 关键音频区间根本没进模型输入,换声线换环境后答案完全不变 输入侧:采样与窗口裁剪把信息截掉了 观测窗口与音频输入链路
听见但没记 当前会话能答对,隔一次会话就答不出或答成通用假设 写入侧:记忆写入只保留了文本摘要 写入策略与字段结构
记了没检索到 直接问能答对,绕一句就找不到;或新旧版本同时召回却选了旧的 检索侧:召回条件与时效优先级 检索键、时间戳与覆盖关系

三层的区分手段是现成的:给第二层用“当场问”与“隔会话问”做对照;给第三层用“直接给标识问”与“用自然语言问”做对照;第一层则用注入已知答案的对照样本,看输入通道有没有真的把那段音频带进去。分层的价值在于修的位置完全不同,把“记了没检索到”当成模型能力不足去换底座,钱花了问题还在。

六、离线分数与线上表现之间隔着三个指标

离线只测答题正确率,线上真正难看的是另外三件事。

纠正率:用户说“不是这个意思”之后,下一轮有没有真的改掉,以及改完之后旧版本有没有被清掉。重复询问率:同一件事隔一段时间再问一次,模型是不是又问了一遍用户已经回答过的内容,这个数字在语音场景里比准确率更能反映记忆是否在起作用。旧信息当现状的错答比例:拿已被更正的旧事实回答当前问题,这类错误在离线题里容易被三元组抓到,在线上没有标准答案可对照,只能靠抽样回访和投诉线索发现。

企业内部要照做,不必先建大集,按五步走:先列出业务里所有经由语音或多源输入、并且会在转写或摘要中丢失的信息类型;按类型建题而不是按场景建题;每题定死三元组判据,禁止只留参考文本;建留出集和水印样本;最后把失败三层做成看板,读数按层分而不是只报总正确率。

洹拓把这条写成验收项:语音类能力上线前,如果评测集里没有任何一道题的判据依赖音频独有信息,那这套评测就还没有开始测语音。