Whisper Notes 现已支持说话人识别

2026年7月28日
·
8 min read
·Whisper Notes Team

转录告诉你说了什么。对采访、会议、播客来说,另一半工作是知道谁说的——语音研究里称之为说话人分离(speaker diarization)。从 iPhone 1.8.5、Mac App Store 1.3.2、Mac 官网直下版 1.5.1 开始,Whisper Notes 的说话人分离完全在设备上运行。

这篇文章介绍它的工作原理、对照云端真值的实测结果,以及一个我们没能用工程手段解决的失败模式——和我们最终的处理方式。

它做什么

打开一条笔记——录音、导入的音视频文件、会议录音——点一下说话人按钮。几秒钟后,每个段落都带上说话人标签和时间戳。

Whisper Notes Mac 版的本地说话人分离:播客转录自动区分说话人并标注时间戳,全程离线处理 Whisper Notes iPhone 版的说话人标签:转录按说话人标注姓名与时间戳

Mac 与 iPhone 上的说话人标签。点任意句子,播放跳到那一刻。

标签一开始叫"说话人 1""说话人 2",重命名一次,整篇转录同步更新。点任何一句话,音频跳到那个瞬间——核对引语时,听到的是原声。

在 Whisper Notes 中重命名说话人——整篇转录的标签同步更新

重命名一次,笔记里每个段落的标签同步更新。

会议录音在通话结束后自动运行说话人识别(可在设置中关闭)。标签会跟着导出走:"拷贝含说话人的转录文本"带着名字进剪贴板,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% 的句级准确率。自动检测仍是默认,因为在常规素材上它是对的。

Whisper Notes 重新运行说话人检测:可指定 2–6 人,并支持导出含说话人标签的 SRT、VTT 字幕

指定说话人数重新识别。同一菜单里可导出含说话人标签的 SRT / VTT。

修正短插话

人数定下之后,剩余错误约一半集中在三秒以内的插话上。两秒的片段留给嵌入模型的信号很少,在你来我往的快速对话里,它的声纹还会混入相邻说话人的成分。

所以聚类之后,管线把每一句短于 3.5 秒的话重新检查一遍:用只覆盖这句话自身帧的掩码重新计算声纹,与每位说话人的锚点——各自最长几个发言段的均值——比对,只有优势足够明确才翻转标签。这一步复用现有模型,没有额外下载。

端到端句级准确率 修正前 修正后
中文难例(指定人数) 89.0% 94.8%
英文播客(自动) 98.5% 99.1%

翻转门槛设得保守:两个文件加起来,修正器翻转了 21 个标签,没有引入新错误。

局限

• 标签在录音结束后出现,不在通话进行中。需要会议进行时就显示带人名的实时字幕,OtterNotta 这类云服务更合适。

• 重叠说话时,每句话只有一个标签。

• 相似音色仍然难。难例上的 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 下载,含免费试用。

关于会议录音本身的工作方式,见离线会议转录一文。