转录告诉你说了什么。对采访、会议、播客来说,另一半工作是知道谁说的——语音研究里称之为说话人分离(speaker diarization)。从 iPhone 1.8.5、Mac App Store 1.3.2、Mac 官网直下版 1.5.1 开始,Whisper Notes 的说话人分离完全在设备上运行。
这篇文章介绍它的工作原理、对照云端真值的实测结果,以及一个我们没能用工程手段解决的失败模式——和我们最终的处理方式。
它做什么
打开一条笔记——录音、导入的音视频文件、会议录音——点一下说话人按钮。几秒钟后,每个段落都带上说话人标签和时间戳。
Mac 与 iPhone 上的说话人标签。点任意句子,播放跳到那一刻。
标签一开始叫"说话人 1""说话人 2",重命名一次,整篇转录同步更新。点任何一句话,音频跳到那个瞬间——核对引语时,听到的是原声。
重命名一次,笔记里每个段落的标签同步更新。
会议录音在通话结束后自动运行说话人识别(可在设置中关闭)。标签会跟着导出走:"拷贝含说话人的转录文本"带着名字进剪贴板,SRT 和 VTT 字幕文件同样保留说话人。
说话人分离处理的是声音而不是语言,所以在应用支持转录的 100 多种语言上表现一致。
19 MB 的模型,跑在 Neural Engine 上
说话人分离回答"谁在什么时候说话",分三步:把音频切成有人声的片段;把每个片段变成一枚声纹——一个描述声音本身而非说话内容的紧凑向量;对声纹聚类,落在同一簇的片段获得同一个标签。
Whisper Notes 用的是 pyannote 的 community-1 管线,转成 Core ML 后两个阶段都跑在 Neural Engine 上。一次性下载 19 MB,M 系列 Mac 处理 5.7 分钟对话需要 2 到 4 秒。
音频 → 人声片段 → 声纹 → 聚类 → 标签
每一步都在设备上完成。
这一点对说话人分离比对转录更重要。声纹是生物特征——它像指纹一样能标识一个人。管线在本地运行意味着:你的、你同事的、你采访对象的声纹,都在设备上计算、聚类、然后丢弃,不会被发送到任何地方。
我们测了什么
我们维护一个固定的双文件基准。真值由云端转录加说话人分离服务(ElevenLabs)生成,再经人工核对;打分时把每 10 毫秒的语音归属到说话人,并在输出和真值之间取最优映射。两个文件是个小基准,这些数字应当作参考量级,而非定论。
第一个文件代表常规情形:五分钟英文播客,两位音色差异明显的说话人。大多数采访、播客、一对一会议都是这种情况。
| 双人英文播客(5 分钟) | 结果 |
|---|---|
| 帧级归属准确率(10 ms 分辨率) | 96.7% |
| 句级准确率(你读到的东西) | 99.1% |
| 处理耗时,M 系列 Neural Engine | 2–4 秒 |
差的那 0.9% 是三处边界抖动,合计 3.4 秒,已经在真值本身的分辨率之内。在这类素材上,端侧结果与生成我们真值的云服务相当。
困难场景
第二个文件是刻意选的难例:一段中文双人访谈,两位男声音色接近,室内混响,主持人插话 19 次,平均每次 2.3 秒。嘉宾说了 272 秒,主持人 43 秒。
自动聚类在这里塌缩。两枚声纹靠得太近,算法把它们并成一个,几乎整场对话都归到同一个标签。我们最初的假设是换个更好的模型就能解决,于是把两个专门用中文语音训练的声纹模型拉进来对照(走 CPU 管线):
| 模型 | 英文播客 | 中文难例* | 耗时(5.7 分钟音频) |
|---|---|---|---|
| pyannote community-1(现役,Neural Engine) | 96.7% | 81–82% | 2–4 秒 |
| CAM++(中文训练,CPU) | 93.9% | 81.2% | 36–103 秒 |
| ERes2NetV2(中文训练,CPU) | — | 80.5% | 220–290 秒 |
* 帧级归属准确率,指定说话人数后测得。不指定人数时,所有模型都向单说话人塌缩。
两个模型塌缩得一模一样,算力却是 10 到 100 倍。上限不在模型选择,而在当前声纹嵌入在这类素材上能分辨什么。
这排除了显而易见的修法,也指向了另一条路:把管线推断不出来的事实交给它——房间里有几个人。指定人数后(一个菜单选项,2 到 6 人),难例从塌缩变为 89% 的句级准确率。自动检测仍是默认,因为在常规素材上它是对的。
指定说话人数重新识别。同一菜单里可导出含说话人标签的 SRT / VTT。
修正短插话
人数定下之后,剩余错误约一半集中在三秒以内的插话上。两秒的片段留给嵌入模型的信号很少,在你来我往的快速对话里,它的声纹还会混入相邻说话人的成分。
所以聚类之后,管线把每一句短于 3.5 秒的话重新检查一遍:用只覆盖这句话自身帧的掩码重新计算声纹,与每位说话人的锚点——各自最长几个发言段的均值——比对,只有优势足够明确才翻转标签。这一步复用现有模型,没有额外下载。
| 端到端句级准确率 | 修正前 | 修正后 |
|---|---|---|
| 中文难例(指定人数) | 89.0% | 94.8% |
| 英文播客(自动) | 98.5% | 99.1% |
翻转门槛设得保守:两个文件加起来,修正器翻转了 21 个标签,没有引入新错误。
局限
• 标签在录音结束后出现,不在通话进行中。需要会议进行时就显示带人名的实时字幕,Otter 或 Notta 这类云服务更合适。
• 重叠说话时,每句话只有一个标签。
• 相似音色仍然难。难例上的 94.8% 是指定人数后的当前上限,不是已解决的问题。
获取方式
说话人识别包含在 $6.99 的买断价内,与应用的三个转录引擎——Parakeet V3、Whisper Large V3 Turbo、SenseVoice——以及本地 AI 整理并列。没有单独的付费档位,也不需要账号。
• iPhone:App Store,1.8.5 或更高版本。
• Mac App Store:当前版本已包含。
• Mac 官网直下(DMG):1.5.1 或更高版本,whispernotes.app 下载,含免费试用。
关于会议录音本身的工作方式,见离线会议转录一文。