3.4 效果调优:术语词表与口音问题
错别字不全是识别的锅,是词表没跟上
工具上线第一个月,我在群里收到最多的反馈是:“转的稿子里又把我们产品名打错了。”每次都靠人工改,改到第三周我受不了了,翻文档发现 ASR 支持热词表——就是识别前先给它一批词,这些词在结果里优先按你给的写法出现。加完词表当天,群里关于错字的反馈少了八成。
这不是识别引擎变聪明了,而是我们公司的词本来就不在通用语料里。热词表解决的是领域适配,不是识别质量本身。
热词表怎么设计
我们的热词表不是一次写死的,而是分成四类、各有来源、各自维护频率:
| 词类型 | 示例 | 来源 | 维护频率 |
|---|---|---|---|
| 同事人名 | 全体员工名单(含常用小名) | 人事名单 | 有新人入职时更新 |
| 客户与合作方 | 客户公司名、对接人姓名 | 客户跟进记录 | 每月核对一次 |
| 产品与项目名 | 内部项目代号、产品型号名 | 项目文档库 | 新项目立项时更新 |
| 行业术语 | 所在领域的专有名词和缩写 | 行业资料、会议摘要 | 每季度过一遍 |
| 高频英文词 | 夹在中文里的常用英文词 | 会议纪要高频词统计 | 每月随错词本整理 |
维护频率写得这么细,是因为热词表是个活的东西:我们第一个版本把所有词堆在一起、半年没管,结果离职同事的名字还挂在表里,据说还会把发音相近的词带偏。固定频率刷一遍,成本不高。词表本身也可以当成团队知识沉淀,归档思路参考 笔记知识库实战。
加词前后对照
加词最直观的效果是一批常见错识消失了。拿我们的一份内部录音做过对照:
| 加词前的错识 | 加词后的写法 | 类别 |
|---|---|---|
| 客力度 | 颗粒度 | 行业黑话 |
| 会读发布 | 灰度发布 | 术语 |
| 同事名字被写成同音常用词 | 正确人名 | 人名 |
| 项目代号被音译成一句散装词 | 正确项目代号 | 项目名 |
| 夹英文的那句话音译成汉字 | 正确的英文词 | 中英混合 |
语音识别的错识花式齐全,但归了类之后发现也就那么几家人名、术语和项目名在反复错,对症加词立竿见影。对照不能光凭印象,我们把 5 份历史录音存成固定回归集,每次改完词表重跑一遍 diff,数字说话。
口音与中英混合
我们公司南北同事都有,还有两位习惯中英混着说(动不动这个功能下周部署两句里夹半句英文)。口音和混合表达的处理,我的经验是分两步:
第一步是接受现实。通用识别模型对普通话最友好,口音重的同事识别率会明显低一档,这不是调参能解决的,这类会议的纪要在人工校对环节(4.4 节)我会多分配时间。硬要逼识别引擎去区分方言,投入产出比极低,不如把力气花在校对流程上。我们也试过给方言同事的会议单独开方言识别能力,效果有一点提升但不算稳定,最后只在明确以该方言为主的场合启用,普通话为主的混合会议还是老老实实用通用模型。
第二步是中英混合的专项处理。纯英文短句插在中文里,识别结果往往给出一串音译汉字。解法是把高频英文词也写进热词表,当成一个普通词条,而不是单独搞一套英文识别通道。另外预处理时保留足够的采样率也有帮助(2.4 节),压狠了英文音节更容易糊。
真正治本的一半工作其实在文本清理:语气词、叠词、口头禅那些,属于 4.1 节的领域,识别层面不折腾。
调优迭代流程
调优不是一次性的事,我跑出了一个固定的迭代节奏:
- 收集错识:每份纪要人工校对时把改过的词记进错词本,同时参考 3.3 节的低置信度句子自动捞候选。
- 加词:错词本里的词按上面四类归档,写进热词表。
- 回归对照:拿固定的 5 份历史录音重跑一遍,对比加词前后的文本差异——这步必须有,不然你不知道加的词是修好了还是带出了新错。
- 放行:回归通过才更新线上的词表版本。
回归对照听起来是废话但我们确实跳过过:有次临时加了客户公司名没回归,结果一个发音相近的常用词被带错两次。从此错词本和回归脚本绑在一起,谁改词表都要过一遍。
错词本长什么样
调优的输入是错词本,我们的错词本就是一张表,每次人工校对顺手往里加:
| 错识写法 | 正确写法 | 出现次数 | 归类 | 状态 |
|---|---|---|---|---|
| 客力度 | 颗粒度 | 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 节) |
把这张表贴在工位上,能省下大量瞎折腾的时间。识别效果出了问题先归因,再决定是加词、改流程还是干脆认了——有些问题就是只能靠人工校对兜底,承认这一点比硬调强。
方言同事的专项方案
团队里有一位口音很重的同事,他的发言错识率长期比别人高一截。试过给他单独建词表、尝试方言识别模式,都不理想。最后的解法很土但有效:他的发言段落,纪要里单独标一道“原文待核对”的色带,并把他常发言的议题(他负责的两个模块)在校对清单里置顶。他本人对此很满意——比起悄悄把他的话改错,明确标出“这段建议复听”反而让他觉得被认真对待。技术解决不了的问题,流程尊重一下,也是解法。
热词表和识别引擎的版本关系
最后一个工程细节:热词表不是独立存在的,它绑定在识别引擎的版本上。我们吃过一次暗亏:某次识别引擎升级后,一批发音相近的常用词开始被我们的热词带偏。排查发现是新引擎的声学模型和上一版词表的配合不如以前,部分词相当于“权重过高”了。此后我们立了个规矩:识别引擎有大版本更新时,回归集必须重跑一遍,词表跟着重新校准。同样的道理,历史回归集一定要留至少两版的对照结果,不然你都不知道是引擎变了还是语料变了。这也提醒我们:词表是调出来的,不是定出来的,它需要跟着系统一起呼吸。
延伸阅读
- AI 智能体开发实战:错词本积累之后,用大模型自动维护词表的扩展玩法。
- DeepSeek 工具链:回归对照时的文本批量比对工具。
- 腾讯云实战手记:热词表在控制台里的维护与版本管理。
