说话人分离实录:从「谁在说话」到「谁说了什么」的工程深水区

转写系列第三篇(前传:长音频三坑、告警语音转工单)。这次单独深挖说话人分离(speaker diarization)——转写管线里公认的深水区:转写告诉你「说了什么」,分离告诉你「谁在说的」,后者在会议纪要场景是灵魂功能,也是当前技术最诚实的短板。这篇记录我们从开源方案到生产可用的完整历程。

先给出诚实的边界

说话人分离的准确率高度依赖场景,我们的实测边界(按错误率 DER 计):

  • 双人电话/播客:DER 5~8%,生产可用
  • 3~4 人会议室(近场):DER 12~18%,半可用(需人工快过)
  • 5~8 人圆桌(远场):DER 25%+,不可用
  • 远程混合(部分人在线):再叠加 10%,最差场景

边界之内一切工程都有意义,边界之外最好的工程决策是放弃全自动——我们最终把产品定义成「4 人以内会议全自动,5 人以上提供辅助标记」。

开源方案的调优实录

起点是 pyannote(社区标准)。开箱效果在双人场景就能用,会议室场景崩。三个调优动作按收益排序:

动作一:VAD 前置清洗(收益最大)。 pyannote 的默认 VAD 对远场会议室的呼吸声、椅子声敏感,产生大量碎片「说话人」。换成更强的 VAD(滤掉低于阈值的语音段)再进分离,DER 直接降 6 个点。垃圾进垃圾出在语音管线的每一步都成立。

动作二:声学 embedding 模型升级。 分离质量的本质是「每人一段声纹向量」的区分度。换用更新的 embedding 模型(在同域数据上微调过),圆桌场景的「同一人被切成两个」错误降了一半。

动作三:聚类参数按场景自适应。 聚类簇数(几个人)不该全局固定:会议日历里有参会人列表时直接注入簇数先验(预期 5 人),没有时用 eigengap 自动估计。注入先验比自动估计平均稳 3 个点——元数据是免费的精度。

调优后的水平:3~4 人会议室 DER 稳定在 12% 左右,到了「人工快过可接受」的线。

与转写引擎的联合:1+1 大于 2

独立跑分离和转写再拼接,是次优解——两边各自断句,边界对不齐,出现「半句话挂在两个人身上」的诡异稿。生产管线要联合:

方案一:分离结果做转写约束。分离给出的人声段作为转写的分段输入(而不是转写自己断句),两边边界强制对齐。同时分离的「同一段静音」信息帮转写跳过无效段,转写成本也降了。

方案二:用转写的语义修正分离。分离是纯声学的,会犯「同一人换了个语气被切成两人」的错。转写文本里的自称、称呼、发言模式(「刚才你说的……」是接话人)是语义证据,规则层拿语义证据修正声学错误,能再压 2~3 个点。

我们生产管线两层都做了。联合后的整线质量:4 人会议的成品纪要(含说话人标注)人工修正量平均每场 4 处——从「不可用」到「可用」的分水岭。

成本与工程量分配

整线的成本画像:分离(声学模型推理)+ 转写 + 语义修正,三段里转写是大头。我们转写走算邻坊的语音识别(按小时计费、500MB 长音频直传),分离和修正自建(开源模型加规则,GPU 成本可控)。这样分工的理由:转写是标准化商品(按量买便宜过自建),分离是场景化工程(自建才有调优空间)——管线里该买的买、该建的建设,这个分界线是成本最优的核心。分离这种重调优的环节吃自建的灵活性,转写这种标准能力吃按量的价格,各取所长。

产品侧的兜底设计

技术边界之外,产品侧三个兜底:

  • 说话人改名:自动标注为「说话人 1/2/3」,用户手动命名(第一次会议标完,声纹沉淀下来,下次自动带出)
  • 低置信高亮:分离置信度低的段落 UI 标黄,用户一眼知道哪里要人工确认
  • 合并/拆分操作:一键把「说话人 2 和 3 合并」(常见的切分错误),比逐句改快十倍

兜底设计的好,能把 DER 12% 的技术做到用户感知 95 分——工程诚实于能力边界,产品负责边界内的体验。

结语

说话人分离是「离解决永远差两年」的问题,但工程的价值从来不是等它完美:边界内榨干精度、边界外设计兜底,纪要管线的成品质量就可以先跑起来。深水区不是不能下水,是知道自己在多深的地方游。

(文中转写场景基于算邻坊语音识别接口实测,按小时计费、不用不花钱。)


写文里这些分离场景,来自我日常在用的算邻坊(suanlinfang.cn?from=cnblogs-stt)——把闲置算力池化成按量 API 的平台:语音识别/语音合成/文字识别/智能决策/随心翻译,不用不花钱,余额永不过期,新用户送 ¥10 体验金。

posted @ 2026-11-06 21:38  吴键WJ  阅读(4)  评论(0)    收藏  举报