说话人分离详解:语音转文字时 AI 如何区分谁在说话

说话人分离(speaker diarization)详解:AI 如何在转写稿中区分不同说话人,它与说话人识别有何不同,哪些情况会出错,以及如何得到更可靠的说话人标签。

一段声波被分成三种颜色的片段,分别代表三个声音,每个片段都对应转写稿中一行带标签的说话人文字

其他语言版本: English, Русский, Українська, Dansk, Deutsch, Español, Français, Italiano, Magyar, Nederlands, Norsk bokmål, Polski, Português (Brasil), Suomi, Svenska, Türkçe, Ελληνικά, עברית, العربية, 한국어, 日本語, 中文(台灣), Indonesia, Tiếng Việt

说话人分离(speaker diarization,学术上也译作“说话人日志”)是自动转写中回答“谁在什么时候说话”的那一步:它把录音切成片段,把听起来属于同一个声音的片段归为一组,并标记为说话人 1、说话人 2 等。它不知道任何人的名字,名字要由你,或由一个本来就知道参会者是谁的系统,事后加上。对于声音清晰、人数不多、音色差别明显的录音,它效果很好;遇到多人抢话、声音相似、电话音频和大型群体时就容易出错。

本文用通俗的语言解释说话人分离是什么、它和说话人识别有何不同、背后如何运作、哪些因素会让它出错,以及怎样得到一份说话人标签值得信赖的转写稿。

什么是说话人分离?

一份原始的语音转文字结果是一大段连续文字。说话人分离把它变成一场对话:

说话人 1  00:00:03  感谢大家参加。我们先从预算开始吧?
说话人 2  00:00:07  好的。差旅费大概超支了百分之十。
说话人 1  00:00:12  嗯,主要是什么原因?

英文术语 diarization 来自 diary(日志):系统会记录每个时刻是哪个声音在说话。在大多数转写工具里,说话人分离与语音识别同时进行。语音模型输出带时间戳的文字,分离模型输出带时间戳的说话人片段,两者对齐之后,每个词或每句话就有了说话人标签。

如果你转写访谈、会议或播客,正是这些标签让文字真正可用:你可以准确引用某个人的话,统计谁发言最多,也可以按说话人快速浏览一通很长的通话。

说话人分离 vs 说话人识别

这两个概念经常被混淆,许多产品页面也把“说话人识别”笼统地用在两者身上。

说话人分离说话人识别
回答的问题谁在什么时候说话?这个人是谁?
是否需要事先的声音样本不需要需要,登记过的声纹或参考片段
输出匿名标签(说话人 1、说话人 2)姓名或身份匹配结果
典型用途访谈、会议、播客的转写稿声纹登录、呼叫中心身份核验、匹配已知说话人
细分类型离线(整份文件)或流式辨认(多人中是哪一个)和验证(真的是你吗?)

有些工具会把两者结合起来。会议平台知道哪位已登录参会者的麦克风正在发声,因此不做任何声音分析也能显示姓名。有些应用允许你给某个声音标记一次,之后在新的录音中尝试识别它。比如根据 OpenAI 的文档,其带说话人分离的转写模型可以接收已知说话人的简短参考片段。而对上传的文件做单纯的说话人分离(大多数转写服务都是这样做的),最终得到的是需要你重命名的通用标签。

说话人分离是如何工作的

现代系统在细节上各不相同,但大体遵循相同的几个阶段。开源工具包 pyannote.audio 是使用最广泛的说话人分离库之一,Hervé Bredin 在 Interspeech 2023 论文“pyannote.audio 2.1 speaker diarization pipeline: principle, benchmark, and recipe”中把它的流程描述为三个主要阶段:在短滑动窗口上做局部分段、提取说话人嵌入,以及全局聚类。

1. 找出哪里有语音

语音活动检测(VAD)标出录音中哪些部分包含语音,丢弃静音、音乐和噪音。这一步的错误会层层传递:漏掉的语音得不到标签,而被误当成语音的噪音可能会凭空多出一个“说话人”。

2. 切分语音

语音被切成很短的片段,理想情况下每段只有一个人在说话。较新的神经网络模型每次查看几秒钟,估计每一帧中有哪些说话人在发声,这也让它们能够标记出重叠的语音。

3. 把每个片段变成声音嵌入

神经网络把每个片段转换成一个嵌入(embedding):一串数字,描述的是声音听起来怎样(音高、音色、说话风格),而不是说了什么。同一个人的片段生成的嵌入应该彼此靠近。

4. 对嵌入进行聚类

聚类算法把相似的嵌入归为一组,每组就是一位说话人。难点在于判断到底有几组:组数太少,两个人会被合并成一个标签;组数太多,一个人会被拆成好几个标签。有些服务允许你告诉它预期的说话人数,以帮助解决这个问题。

5. 与文字对齐

最后,说话人片段与语音识别输出的词级时间戳进行匹配,于是转写稿的每一行都有了标签。边界处出错很常见:回答的第一个词可能被算到上一位说话人头上。

研究者用说话人分离错误率(DER)衡量质量,它综合了漏检语音、误报和说话人混淆。已发表的数字在不同数据集之间差别极大,从干净的广播音频到嘈杂的多人会议都有,所以单独一个“准确率”数字对你自己的录音参考价值不大。

哪些情况会破坏说话人分离

  • 多人同时说话。 两个人一起开口时,通常只有一个声音拿到标签,另一个人的话可能丢失或被算错人。
  • 声音相似。 年龄、性别、口音相近的两个人,嵌入会挨得很近,可能被合并。
  • 电话和压缩音频。 窄带电话线路和高度压缩的语音消息会丢掉嵌入所依赖的大量细节。
  • 人数多。 每多一个声音,聚类就更难,尤其是有些人只说了几句。
  • 发言太短。 “对”“嗯”“好”这类一两个字的插话太短,无法生成可靠的嵌入。
  • 只有一个远距离麦克风。 放在房间中央的笔记本电脑会收进回声,音量也高低不一;同一个人坐在不同位置,听起来可能就不一样。
  • 条件变化。 说话人走动、从耳机切换到免提,或者开始小声说话,都可能被拆成两个标签。
  • 背景噪音和音乐。 两者都可能被误当成语音,或模糊声音特征。

如何更可靠地区分转写稿中的说话人

大部分改进来自录音本身,而不是软件。我们的转写准确率技巧介绍了音频质量的一般要点;专门针对说话人:

  • 尽量让每个人都有自己的麦克风,至少让每个人与共用麦克风的距离相近。
  • 如果能把每个人录在单独的音轨上(播客的录音方式,或每方各占一个声道的立体声通话录音),就分别转写各条音轨。独立声道比任何声音聚类都更可靠。
  • 在需要逐字记录的部分,请大家不要互相打断,回答前稍等半拍。
  • 能直接录音时,避免使用免提,也避免用房间音箱外放视频通话的声音再录下来。
  • 请每位参与者在开头说一下自己的名字。这不会训练模型,但能让重命名标签变得很快。
  • 尽量让一场对话保存在一个文件里。如果分段转写,标签不会对得上:第一段的说话人 1 在第二段可能变成说话人 2。
  • 检查转写稿的前几分钟。如果两个人被合并了,问题通常会贯穿整个文件。

访谈录音的麦克风摆放和知情同意,请看我们的访谈转写指南;线上会议请参阅 Google Meet、Zoom 和 Teams 会议转写指南。

在 Audiotexta 中重命名和修正说话人

在 Audiotexta 中上传文件、粘贴链接或用麦克风录音后,返回的转写稿会带有说话人标签和时间戳。要把说话人 1 和说话人 2 改成真实姓名,只需在编辑器中重命名该说话人,新名字会应用到整份转写稿中这位说话人的所有片段。编辑器在播放时会高亮当前的词,点击任意词就能跳到音频中对应的位置,所以遇到拿不准的段落,可以很快用耳朵核对并改正。

请在导出前完成重命名和修正,这样姓名就会带进 TXT、SRT 和 VTT(均可在免费方案中下载,无需账户),或 Pro 方案的 DOCX、PDF、CSV 和 JSON。在字幕文件里,说话人姓名能帮观众跟上对话;在 CSV 或 JSON 里,则方便你分析谁说了什么。

和所有说话人分离系统一样,Audiotexta 在声音清晰、音色区分明显的音频上效果最好;它也不会把说话人姓名从一个文件带到下一个文件:每段录音都从全新的匿名标签开始。

可以区分说话人的转写工具

说话人标签如今很常见,但实现方式各不相同。下面是根据各厂商文档整理的简要概览,注明的地方则来自第三方描述(2026 年 10 月核对;功能会变化,请以厂商网站为准)。

工具类型说话人标签说明
Audiotexta网页应用、浏览器扩展、API有,自动生成在编辑器中重命名说话人;标签按文件独立。
Otter.ai会议与转写应用有有指南介绍标记说话人后,Otter 能在之后的录音中识别这些声音。
Descript音视频编辑器有,自动检测说话人帮助中心列出了自动检测的文件时长限制;你可以根据声音样本标记说话人。
TurboScribe网页转写有厂商称支持自动检测和标记说话人。
Zoom、Teams、Google Meet 转写会议平台内置来自参会者账户的姓名依据谁登录了账户,而不是声音分析;几个人共用会议室设备时可能显示为同一位说话人。
OpenAI API(gpt-4o-transcribe-diarize)开发者 API有返回带说话人标签的片段;可选提供已知说话人的参考片段。
AssemblyAI开发者 API有(speaker_labels)可以设置预期的说话人数或人数范围。
Deepgram开发者 API有(diarization 选项)每个词都会返回一个说话人编号。
Whisper(开源)本地模型无需与 pyannote.audio 等说话人分离模型结合使用。
pyannote.audio开源库仅做说话人分离不做转写;需要搭配语音识别模型。

会议平台在这方面确实有优势:每个人都用自己的账户入会时,平台无需靠声音猜测就知道名字。国内常用的会议工具也大多自带转写功能,是否按参会者账户显示姓名、能否区分同一会议室里的多人,请以其官方说明为准。像 Otter 这样能记住声纹的应用,如果你经常录同一批人,可以省下重命名的时间。而对于上传的访谈、电话或播客录音,基于声音的说话人分离是唯一的选择,在编辑器里快速检查并重命名,也是工作的一部分。

常见问题

用最简单的话说,说话人分离是什么?

说话人分离就是弄清录音里谁在什么时候说话。系统把音频切成片段,把听起来是同一个声音的片段归为一组,再标记为说话人 1、说话人 2 等,它并不知道任何人的名字。

说话人分离和说话人识别有什么区别?

说话人分离把不同的声音彼此区分开,并给出匿名标签。说话人识别则是把声音和一个已知的人对应起来,这需要事先登记的声音样本或其他身份来源,例如会议平台知道谁登录了账户。

Whisper 能区分说话人吗?

开源的 Whisper 模型能转写语音,但本身不会标注说话人。开发者通常把 Whisper 和单独的说话人分离模型(如 pyannote.audio)结合使用,许多在线服务会替你完成这一步。

为什么我的转写稿把说话人搞混了?

最常见的原因是多人同时说话、声音相似、简短的插话、电话或高度压缩的低质量音频、背景噪音,以及一段录音里人数太多。改进录音条件通常比调整任何设置都更有效。

怎样给说话人标签换成真实姓名?

大多数转写编辑器都允许你把“说话人 1”这样的通用标签重命名一次,修改会应用到该标签的所有片段。在 Audiotexta 中,你可以在导出前于转写编辑器里重命名说话人。

免费试用 Audiotexta

上传文件或粘贴链接,几分钟即可获得转写稿。

开始转文字

相关文章