3.4 效果调优:术语词表与口音问题

错别字不全是识别的锅,是词表没跟上

工具上线第一个月,我在群里收到最多的反馈是:“转的稿子里又把我们产品名打错了。”每次都靠人工改,改到第三周我受不了了,翻文档发现 ASR 支持热词表——就是识别前先给它一批词,这些词在结果里优先按你给的写法出现。加完词表当天,群里关于错字的反馈少了八成。

这不是识别引擎变聪明了,而是我们公司的词本来就不在通用语料里。热词表解决的是领域适配,不是识别质量本身。

热词表怎么设计

我们的热词表不是一次写死的,而是分成四类、各有来源、各自维护频率:

词类型 示例 来源 维护频率
同事人名 全体员工名单(含常用小名) 人事名单 有新人入职时更新
客户与合作方 客户公司名、对接人姓名 客户跟进记录 每月核对一次
产品与项目名 内部项目代号、产品型号名 项目文档库 新项目立项时更新
行业术语 所在领域的专有名词和缩写 行业资料、会议摘要 每季度过一遍
高频英文词 夹在中文里的常用英文词 会议纪要高频词统计 每月随错词本整理

维护频率写得这么细,是因为热词表是个活的东西:我们第一个版本把所有词堆在一起、半年没管,结果离职同事的名字还挂在表里,据说还会把发音相近的词带偏。固定频率刷一遍,成本不高。词表本身也可以当成团队知识沉淀,归档思路参考 笔记知识库实战。

加词前后对照

加词最直观的效果是一批常见错识消失了。拿我们的一份内部录音做过对照:

加词前的错识 加词后的写法 类别
客力度 颗粒度 行业黑话
会读发布 灰度发布 术语
同事名字被写成同音常用词 正确人名 人名
项目代号被音译成一句散装词 正确项目代号 项目名
夹英文的那句话音译成汉字 正确的英文词 中英混合

语音识别的错识花式齐全,但归了类之后发现也就那么几家人名、术语和项目名在反复错,对症加词立竿见影。对照不能光凭印象,我们把 5 份历史录音存成固定回归集,每次改完词表重跑一遍 diff,数字说话。

口音与中英混合

我们公司南北同事都有,还有两位习惯中英混着说(动不动这个功能下周部署两句里夹半句英文)。口音和混合表达的处理,我的经验是分两步:

第一步是接受现实。通用识别模型对普通话最友好,口音重的同事识别率会明显低一档,这不是调参能解决的,这类会议的纪要在人工校对环节(4.4 节)我会多分配时间。硬要逼识别引擎去区分方言,投入产出比极低,不如把力气花在校对流程上。我们也试过给方言同事的会议单独开方言识别能力,效果有一点提升但不算稳定,最后只在明确以该方言为主的场合启用,普通话为主的混合会议还是老老实实用通用模型。

第二步是中英混合的专项处理。纯英文短句插在中文里,识别结果往往给出一串音译汉字。解法是把高频英文词也写进热词表,当成一个普通词条,而不是单独搞一套英文识别通道。另外预处理时保留足够的采样率也有帮助(2.4 节),压狠了英文音节更容易糊。

真正治本的一半工作其实在文本清理:语气词、叠词、口头禅那些,属于 4.1 节的领域,识别层面不折腾。

调优迭代流程

调优不是一次性的事,我跑出了一个固定的迭代节奏:

  1. 收集错识:每份纪要人工校对时把改过的词记进错词本,同时参考 3.3 节的低置信度句子自动捞候选。
  2. 加词:错词本里的词按上面四类归档,写进热词表。
  3. 回归对照:拿固定的 5 份历史录音重跑一遍,对比加词前后的文本差异——这步必须有,不然你不知道加的词是修好了还是带出了新错。
  4. 放行:回归通过才更新线上的词表版本。

回归对照听起来是废话但我们确实跳过过:有次临时加了客户公司名没回归,结果一个发音相近的常用词被带错两次。从此错词本和回归脚本绑在一起,谁改词表都要过一遍。

错词本长什么样

调优的输入是错词本,我们的错词本就是一张表,每次人工校对顺手往里加:

错识写法 正确写法 出现次数 归类 状态
客力度 颗粒度 6 次 行业术语 已加词
会读发布 灰度发布 3 次 行业术语 已加词
反复写错的客户名 正确客户名 2 次 客户 观察中,满两次加词
那个那个那 (口语叠词) — 口语 不加词,走 4.1 清理

出现次数这列很关键:只错一次的词不值得加进词表(可能只是那天的录音问题),满两次以上才动手——这和前面说的加词三条标准是同一件事的两种表达。错词本里还有一列“最近出现日期”,超过三个月不再出现的词会被清退:语言在演化,项目代号会弃用,客户会流失,词表也得学会遗忘。

调优效果怎么衡量

调了两个月之后老板问我:“你天天折腾词表,到底有没有用?”我拿回归集的数据做了张表:

阶段 5 份回归录音的总错处 比基线变化
初版(无词表) 62 处 基线
加完人名和产品名 41 处 降三分之一
再加术语和高频英文词 28 处 降过半
峰值词表(800 条) 31 处 不降反升
收敛回 300 条 27 处 稳定

数字一说,老板再没问过。现在这张表每月更新一次,成了工具的固定体检报告。调优的任何动作最终都要能回答一句话——它让回归集的错处数字变小了吗?答不上来就别动,答得上来才敢改。

切勿过度加词

最后说一个反直觉的教训:热词表不是越长越好。我们巅峰时期词表堆到 800 多条,什么奇怪词都往里塞,结果出现两个问题——一是个别词权重过高,把发音相近的正常词也纠正过去,制造了新的错;二是维护成本爆炸,错词本失去分类,谁也不敢删。

后来我立了规矩:词表只收满足三条的词——高频出现在会议里、通用语料里没有、错识过两次以上。三条全中才加,不满足的就走低置信度标黄流程当普通句子处理。砍到 300 条以后,识别质量不降反升,管理负担也轻了。

状态 词表条数 月均错识反馈 维护感受
初版 约 120 条 十几条 都说好,就是加不过来
巅峰期 800 多条 反而回升 谁也不敢删,乱成一团
收敛后 300 条上下 两三条 每周花十分钟,可控

词表的本质是方言词典,治的是领域词,治不了录音质量和口语问题——那两件事,回到 1.3 节的录音规范和 4.1 节的文本清理去解决。

还有一条经验:热词的写法要和团队的实际使用咬合。我们有过一个词两种写法并存(一个用中文简称、一个用英文缩写),词表里两个都收,结果识别结果里两种写法随机出现,纪要里看着像两个东西。后来统一成一个写法,并在项目文档里同步改掉,才算彻底治好。词表不是孤岛,它得跟项目文档、会议纪要模板用同一套词汇。错词本滚到一定量级之后,还可以用大模型自动辅助维护,参考 AI 智能体开发实战。

加词解决不了的问题清单

热词表好用,但容易让人产生包治百病的错觉。复盘下来,下面这些问题加词是一条都解决不了的:

问题 加词有没有用 该找谁
同事方言口音重 没用 通用模型固有限制,靠校对环节兜
录音有回音/底噪大 没用 收音设备和房间处理(1.3 节)
两人同时说话叠词 没用 麦克风分区和会议主持规范
口头禅和叠词 没用 文本清理(4.1 节)
发言人分不准 没用 说话人分离的固有问题(3.3 节)

把这张表贴在工位上,能省下大量瞎折腾的时间。识别效果出了问题先归因,再决定是加词、改流程还是干脆认了——有些问题就是只能靠人工校对兜底,承认这一点比硬调强。

方言同事的专项方案

团队里有一位口音很重的同事,他的发言错识率长期比别人高一截。试过给他单独建词表、尝试方言识别模式,都不理想。最后的解法很土但有效:他的发言段落,纪要里单独标一道“原文待核对”的色带,并把他常发言的议题(他负责的两个模块)在校对清单里置顶。他本人对此很满意——比起悄悄把他的话改错,明确标出“这段建议复听”反而让他觉得被认真对待。技术解决不了的问题,流程尊重一下,也是解法。

热词表和识别引擎的版本关系

最后一个工程细节:热词表不是独立存在的,它绑定在识别引擎的版本上。我们吃过一次暗亏:某次识别引擎升级后,一批发音相近的常用词开始被我们的热词带偏。排查发现是新引擎的声学模型和上一版词表的配合不如以前,部分词相当于“权重过高”了。此后我们立了个规矩:识别引擎有大版本更新时,回归集必须重跑一遍,词表跟着重新校准。同样的道理,历史回归集一定要留至少两版的对照结果,不然你都不知道是引擎变了还是语料变了。这也提醒我们:词表是调出来的,不是定出来的,它需要跟着系统一起呼吸。

延伸阅读