一份带标签的转录文本需要两个答案都正确。由于标签叠加在文字之上,出错的标签无需改动文本即可修正。
会议转录文本同时回答两个问题:说了什么,以及是谁说的。读者看到的只是一个任务,即每行文字旁边都有一个名字。但其下隐藏着两个问题,各自有不同的输入,也各自有不同的出错方式。
语音识别关注的是词语。它把音频转换为文字,做得好的话,还能为每个词给出起止时间。它不关心声音在一句话中间是否发生了变化,它的任务是把这句话转写正确。
说话人分离关注的是声音。它不理解词义,其任务是把时间轴划分为若干话轮,并判断哪些话轮属于同一个人,例如“说话人 1”“说话人 2”。这个词借自“diary”(日记),这个比喻很贴切:它的输出就是一份记录,写明谁在什么时候发言。
还有三个相近的术语常被混为一谈。说话人分离只回答谁在何时说话,并不知道这些人是谁。说话人识别则是从一组已登记的声音中,判断某段语音属于哪位已知的人。说话人验证回答的是一个是非题:这个声音确实是 X 本人吗?厘清这三者之间的区别,有助于读懂供应商的宣传,因为“说话人标签”可能指从粗略猜测话轮边界,也可能指能够在不同录音之间跟随同一个人的姓名。要弄清这些标签能保证什么、不能保证什么,就需要深入分离器内部来看。
大多数说话人分离系统分为三步,而且每一步都与语言无关。
每一步都可能单独出错。轻声说话的人可能被漏掉,两个相似的声音可能被合并,而一个从平静转为激动的人可能被拆成两个说话人。
该领域用说话人分离错误率(DER)来衡量这一切:即语音时长中被漏检、被误判为语音,或被归到错误说话人的比例。通常还会设置约四分之一秒的宽容区间,围绕每个边界生效。设置这一宽容区间,是因为无论是人还是机器,都无法将说话人切换精确到毫秒。对于单独评估分离器而言,这种容差是合理的;但对于转录文本来说,就不合适了。在转录文本中,偏差四分之一秒的边界,足以落在某个词上。
这正是两类问题的交汇之处,也是带标签转录文本质量的决定性环节。分离器放置边界时存在一定误差,通常前后偏差几分之一秒。而识别器则是把词放在同一条时间轴上。如果把两者简单地叠加,边界就会落在一个词的中间,于是“tomorrow”的前半部分归说话人 1,后半部分归说话人 2。
标签也可能在一段时间内是错误的,之后才变得正确。分离器听到的音频越多,对其分组就越有把握,因此,以后来的情况来衡量,早期的标签可能看起来是错的。在实时转录中,标签可能在一行文字显示之后被修订。VocalStack 的实时 API 会发送 transcript.amended 帧,就地修正已确认行的文字或说话人,因此读者看到的是一次修订,而不是前后矛盾。
即便标签放置准确、保持稳定,它终究只是一个编号。编号足以让人跟上对话,但读者真正想看到的是名字。
标签变成姓名有两种方式,二者相辅相成。
第一种是在单个录音内命名。转录过程中发现的每位说话人都会获得一个从 0 开始计数的索引。拥有访问权限的人,可以在录制期间或录制之后为每位说话人命名。姓名是叠加在文字之上的一层,因此可以随时设置、更改或清除,而无需改动文本本身。通过 API,可以使用 PUT /v1/recordings/{id}/speakers/{idx} 并传入 name;若名称为空,则清除该名称。若某行的 speaker 为 -1,则表示该行没有标签,原因可能是未开启标签功能,也可能是在实时草稿中,该行尚未被归属到任何说话人。
第二种是跨录音的识别,即前文第一节提到的说话人识别问题。说话人分离器只能判断两个声音是不同的,却无法判断它们分别是谁。要从“不同”进一步得出“这是 Ana”,系统需要一个参照:一段已保存的声音,取自该人的某段录音。至少需要三十秒清晰的语音,几分钟则更好。该样本的录音条件也应与待匹配的录音相近:同一个人分别用笔记本电脑麦克风和舞台麦克风录制,对机器而言,两段声音的相似度可能还不如两位用同样方式录音的陌生人。声音保存之后,转录中听到的每位说话人都会与之比对,一旦匹配成功,姓名就会被带入转录文本。在 VocalStack 中,这一功能位于 语音库 下。文件转录和控制台中的实时会话会自动匹配您保存的语音;而实时 API 会话只识别您在 identifyVoices 中列出的语音。
已保存的语音属于生物特征数据:它可以在任何录音中识别出某个人,而在 VocalStack 中,它还可以兼作克隆语音,朗读该人的台词。控制台会在您保存语音之前要求您确认已获得该人的许可,并且语音可以随时删除。
以上所有内容都基于一个前提,即您确实需要标签。而很多时候,并不需要。
一位讲座的主讲人,并不需要在每一行文字前都加上“说话人 1”。听众早已知道谁拿着麦克风。因此,说话人标签设置有三个档位,并且在实时会话、直播、转录和录音中的含义完全相同。
auto)。一旦听到不止一个声音,各行就会标注说话人;只有一位说话人的录音保持纯文本,中途加入的第二个声音仍会被识别出来。控制台的新建实时转录表单默认为此档位。文件上传同样支持 speakerLabels 选项,实时 API 还允许在流式传输过程中更改该设置,具体细节请参阅 API 参考文档。说话人分离与命名从不增加费用(费率表请见价格页面),因此,这一选择取决于读者需要看到什么,而不是成本多少。
开启之后,说话人分离的效果很好,但并非万能。仍有两种情况会让它力不从心。
第一种是重叠。当两个人同时说话时,同一段音频中就包含了两个声音。研究领域已经存在能够处理重叠的说话人分离器,产品中也越来越多地采用,例如端到端神经网络说话人分离(EEND)就将“谁在说话”视为一组同时成立的是非题,而不是单一的答案。不过,大多数生产系统仍然为每段音频只分配一位说话人,其上的识别器也是逐个声音进行转录。气氛激烈的小组讨论是该领域最难处理的音频,各家供应商的标签在这种场景下都会变差。而这恰恰也是事后人们最想引用的部分。
第二种是非常相似的声音。兄弟姐妹之间的声音嵌入向量可能过于接近,难以可靠地区分,尤其是当他们在一个小时里不断交替发言时。电话音频会让所有人的处境更糟:窄带电话线路的采样率为 8 kHz,只保留约 3.4 kHz 以下的频率,而用于区分不同声音的许多特征恰恰位于这一截止频率以上。对分离器而言,同一条电话线路上的两个人听起来比对您而言更为相似。
对这两种情况,最实用的补救办法都在模型之前:为每个人配备独立的麦克风。如果每位说话人占用一条独立声道,说话人分离就简化为判断哪条声道更响,重叠的语音也会变成两条干净的音轨,而不是一条混杂的音轨,嵌入向量也就无需承担最困难的部分。一只普通的桌面麦克风成本更低,而且几乎总是唯一可用的设备,因此本文的其余部分主要讨论这种情况。
这两类限制都不必原封不动地传递给读者。由于标签是叠加在文字之上的一层,错误的标签永远不会让您损失文字内容:录音中的说话人姓名可以随时设置或清除;在实时转录中,主持人还可以在转录进行时改写任何一个词或任何一行,每一处修改都会被标记,并且可以撤销。
关于文字部分,词错误率衡量什么,又遗漏了什么一文详细介绍了各个修正层。词错误率之于识别器,正如 DER 之于分离器;一份转录文本需要两者都保持在较低水平。