📄 电话线上的声音:只留下打电话的人
评分:7.8/10 | 创新 1.2/2 | 技术严谨 1/1.5 | 实验充分 1.2/1.5 | 清晰度 0.7/1 | 影响力 1/1.5 | 开源 1.2/1.5 | 可复现 0.3/0.5 | 工程/实践 1.2/1.5
👥 作者与机构
- Husein Zolkepli:机构信息未能在本次解析中与作者逐人可靠绑定
📌 核心摘要
通话转写用的单个麦克风会同时收进通话人和周围人的声音,任务是只保留通话人并输出可直接送识别的波形,难点是周围人单独长说时不能跟丢通话人,而通话人单独出现时又不能损伤。论文先从通话自身取最响的3 s估计说话人向量(speaker vector,一段描述当前通话人音色的向量),以此为条件约束后续分离指向通话人。该向量送入因果掩蔽式Transformer(Transformer,一种基于注意力机制的序列模型),模型按20 ms帧输出复数掩码,作用于混合频谱得到通话人波形。因果化后的WavLM-Large将其多层语音特征混合叠加到Transformer词元上,提供预训练表示且不增加延迟,门控从零启动以保留原有行为。训练按三段衔接:6 s仿真通话学基本分离,24 s带轮替的长通话加10 s注意力窗和帧级LSTM学跨窗记忆,再用真实串音微调并处理电平漂移与单人通话。在60 s AMI窗口上发布模型词错率(word error rate,认错词数占参考词数的比例,越低越好)为16.13%,VoxLock在线模式为23.66%;Krisp基准上两者基本持平,分别为5.74%和5.63%;单人干净通话上发布模型为5.58%,差于VoxLock的2.92%。发布模型每秒音频约47.7 GMAC,一个GPU可带160路实时通话,蒸馏到22.1M参数的CPU模型在20 ms帧下占单线程约33%,但受控仿真显示背景人与通话人等响或更响时略逊于VoxLock,单人损伤在通话起始数秒最重,因训练窗从未以他人先说开头,故结论仅限所测会议、耳机串音与Krisp基准范围,未验证背景长期主导与其他采集场景。
🔗 开源与复现资源
第三方资源:https://github.com/Scicom-AI-Enterprise-Organization/STT-API/tree/main/stt_api/livekit_plugin/voice_isolator — 链接可访问(HTTP 200)
模型相关资源:https://huggingface.co/collections/Scicom-intl/voice-isolator — 链接可访问(HTTP 200)
可达状态仅表示本次链接检查结果,不代表许可证、本文权重或运行复现已验证。
🧭 深度解读
一个麦克风为何会为难转写
呼叫中心的转写只拿到一路麦克风,话筒附近其他人的说话也会进来。普通噪声抑制的任务是去掉非语音、留下所有语音,所以它会留下背景人声。论文要做的是主讲人隔离:只留下正在打电话的那个人,去掉房间里其他说话人,同时尽量不损伤主讲人自己的词。
评价用识别来量。输入是 16 kHz 的通话录音,输出是只含主讲人的波形,再交给 Parakeet 或 Whisper 识别。做好意味着两件事同时成立:背景单独说话时不产生可识别的词,主讲人单独说话时不丢词。前者对应漏入,后者对应过度抑制。
三条路线里本文站在哪里
第一条是噪声抑制,去噪声留所有人声,在有第二说话人的真实录音上会保留别人的词。第二条是目标说话人提取,给定一段该说话人的注册音频后只提这个人。第三条是主讲人隔离,没有事先注册音频,要靠谁离麦克风近、谁响来判断,VoxLock 的做法是从通话自身切一段注册音频。本文沿第三条路线,但模型结构和训练都按直播转写的要求重做。
目标说话人提取 × 主讲人隔离: 目标说话人提取指给定某个人声音线索后只保留这个人,线索通常是一段注册音频;主讲人隔离指保留正在使用麦克风的那个人,不需要事先给注册音频,但要从通话里自己判断谁是主讲人。本文属于后者,只是借用了前者的注册向量机制,注册向量从通话中最响的 3 秒切出来。
短窗口评测藏住的两个失败
论文指出短评测窗口看不到两个真实失败。一是长时间通话里主讲人被遗忘:背景人单独说几秒后,模型把背景人当成主讲人放进来,主讲人回来时反而被压。二是单人通话被损伤:没有背景人时,模型仍会删掉主讲人的词,尤其在录音开头和长静音后回来的地方。
漏入 × 过度抑制: 漏入指把背景人说的话也留下,导致转写多出别人的词;过度抑制指把打电话人自己的词删掉,导致转写丢词。本文用词错误率同时看这两类,漏入多的系统在背景单独说话段每分钟漏词数高,过度抑制多的系统在单人通话上比不处理更差。
短窗口的问题在于背景单独说话最多只有 4 秒,而真实长通话里这类连续段中位数可达 16.9 秒。论文因此加了 60 秒窗口,要求包含至少 8 秒背景单独说话再接回主讲人,还加了真实呼叫中心单人信道和真实会议头戴串音,用来分别考记忆和克制。
一个训练样本是怎样拼出来的
每个训练样本都是一次即时合成的通话。主讲人语音被切成带停顿的片段,最多 3 个背景说话人大多被放在停顿里,使得 71% 的样本含有超过半秒的背景单独说话段,再加最多两个噪声,最后过设备和电话线路。目标声是同一主讲人经过同一房间位置、设备和带限但不含别人的干净声,模型不需要凭空补带宽,也不需要保留别人。
下图是合成流水线导读,蓝色是主讲人,黄色是合成串音,灰色是噪声,紫色是注册,重点看目标与混合分叉的位置。
看图路径: 1. 沿蓝色主讲人链看目标声是怎样单独走房间和设备得到的;2. 看黄色背景链和灰色噪声链在哪里以信干比和信噪比汇入混合声;3. 注意设备滤波同时作用于混合与目标,而编解码只作用于混合;4. 看紫色注册链为何与主讲人同位置同设备
论文图 2。原论文 Figure 2::“How a training example is made. Blue: the primary talker; amber: synthetic crosstalk; grey: noise; purple: the enrollment.”。
图中蓝色箭头显示主讲人经停顿切分后分叉:一支经房间全响应流向中央加号,与背景串音和噪声汇合,再经设备滤波和带限成为混合声;另一支经房间直达加 50 毫秒流向上方设备同一滤波分支,成为同频带目标声。设备滤波与带限同时作用于目标和混合,μ 律、编解码和削波只加在混合声上。注册是同一人同一位置同一设备的 2 到 5 秒,60% 带噪,30% 的样本不给注册,迫使模型也能无注册找到主讲人。
实时模型一帧经历了什么
实时模型是因果掩蔽变换器。每 20 毫秒 1 帧、10 毫秒一跳,先分成 32 个频带,带间做注意力、每带沿时间做小长短期记忆网络,再折成每帧一个词元。因果变换器看最近 10 秒词元,中层后还有一个跨帧的长短期记忆网络,最后由频带解码器预测复数掩蔽,乘到混合声上得到主讲人。3 种宽度对应 140M、243M 和 374M 参数,延迟只来自窗长而不加前视。
频带编码处理的是分帧后的混合声谱。32 个频带先各自保留局部谱结构,带间注意力负责在同一帧内比较不同频带,判断哪些频带更像主讲人,带内小长短期记忆网络负责沿时间记住每个频带的连续变化。两步做完再折成每帧一个词元,词元就带着已融合的频带和短时上下文进入变换器。
因果变换器处理的是最近 10 秒的词元序列。它只看过去和当前帧,不看未来帧,中层后的跨帧长短期记忆网络把更长的通话连续性带进来,弥补注意力窗口之外的记忆。频带解码器把变换器输出还原到各个频带,预测复数掩蔽后作用到混合声上,只保留主讲人对应的幅度和相位。3 种宽度只改变通道数,层数保持 16 层,延迟仍只有窗长本身。
注意窗口 × 帧长短期记忆网络: 注意窗口指变换器一次能回看的最近 10 秒词元,超出就看不见;帧长短期记忆网络指跟在中间层后的循环状态,能把整通电话的历史带下去。两者搭配是因为长通话里背景人单独说很久,窗口一滑过去模型就忘记主讲人,需要循环状态补记忆。
注册进入方式是说话人向量经 FiLM 进入每一层。直播时从空向量开始,3 秒后取至今最响的 3 秒,15 秒后固定。发布版还在词元上叠加了因果化 WavLM-Large 的 25 层加权混合,经门控从零开始加入,保证初始行为不变。WavLM 帧比词元晚一拍,读最近一个完整的帧,因此不增加延迟。
说话人向量处理的是注册片段给出的主讲人线索。FiLM 把它送进每一层,逐层调节频带和词元特征,让掩蔽偏向该说话人。直播开始没有样本时用学到的空向量,模型先按近端主讲人假设工作,3 秒后用已听到的最响 3 秒生成向量,15 秒后固定下来,后续不再改动。空向量起步保证了开场可运行,最响片段规则则在不前视的条件下给出可用的注册。
因果化 WavLM 处理的是原始波形带来的预训练语音表示。波形按运行电平归一化,位置卷积保留 65 个抽头在当前帧和过去帧,因果注意力只看最近 10 秒并保留门控相对位置偏置。它的 20 毫秒帧比词元晚一拍,词元 t 读编号为向下取整后减一的 WavLM 帧,即最近一个完整帧。25 层各自归一化后做可学习的加权混合,再投影并经从零开始的门控叠到词元上,训练起点与加入前一致。同样做法还对 w2v-BERT 2.0 和 Whisper large-v3 编码器做了因果化对照。
注册向量 × 自注册: 注册向量是描述当前主讲人音色的一个向量,通过 FiLM 进入每一层,用来告诉掩蔽网络留谁;自注册是直播时的取法,通话从空向量开始,3 秒后取至今最响的 3 秒,15 秒后固定。本文对比了直播取法、离线取前 15 秒最响 3 秒、无注册和正确答案注册,以区分模型能力和取法误差。
对照用的离线模型走的是另一条路线。它把整段通话映射到主讲人单独语音的 w2v-BERT 2.0 特征,再用 DAC 解码器重新合成波形,推理按 4 秒窗进行,输出采样率止于 16 kHz。实时变换器则用 3 阶段训练,目标是负信噪比、多分辨率谱距离,以及主讲人静默处的输出能量,WavLM 分支从第二阶段加入,所有选择都在开发集上确定。
WavLM-Large × 因果化: WavLM-Large 是预训练语音编码器,在重叠语音中描述主讲人的任务上预训练过;因果化指把它改成只能看过去和当前帧,去掉前视,包括用电平滑动归一化、位置卷积只留当前和过去、注意力只看最近 10 秒。本文保留它的权重并以较小学习率和主模型一起训练,而不是只当老师蒸馏输出。
离线重合成路线为何被放弃
作为对照,论文还用 Sidon 的恢复架构在 16 kHz 上训练,把混合声映射到主讲人单独时的 w2v-BERT 2.0 特征,再用 DAC 解码器重合成。这类重合成的问题在于混合声的自监督特征里本来就混着所有人,直接预测和重合成容易把所有声音都留下。在 Krisp 上它们漏词很高,说明掩蔽路线更适合只留 1 人的任务。
三段训练各解决什么
变换器最小化负信噪比、多分辨率谱距离和主讲人静音处输出能量,分 3 段走。第一段用 6 秒合成通话学分离;第二段加入真实串音微调,真实串音取自评测集之外的 AMI、NOTSOFAR 和 AliMeeting 头戴信道,无人说话重叠的窗做目标、只有别人说话的窗做自然电平串音;第 3 段用 24 秒长通话学记忆,其中六成是轮流说话,主讲人常在背景单独说数秒后回来。
长通话段还把注意窗口拉宽到 10 秒并加帧长短期记忆网络,输出从零初始化以保持初始行为。真实呼叫带来的 4 个改动是混合电平拉宽到很低、半数长通话主讲人电平漂移、30% 长通话无别人、发布版 30% 样本从更长通话上切窗,使得切口处说话人已经在说话,用来治冷启动。
评测集和打分规则
评测分选择用开发集和只报告的测试集。会议用 Parakeet v3,通话和 Krisp 用 Parakeet TDT 0.6B v2,AliMeeting 用 Whisper large-v3 按字算。区间是对主讲人做 2000 次自助重采样,不是重采样文件。Krisp 是 265 个真实第二人声录音,AMI 和 NOTSOFAR 是头戴串音,呼叫中心是 AppTek 单人信道单独打分或叠加另一通说话人,ai-coustics 是 83 个真实测试通话只报告。
词错误率 × 漏词: 词错误率指识别错的词占参考词的比例,越低越好,包含把主讲人词认错和把背景人词多认出来两部分;漏词指在只有背景人说话的时间里被识别出的词,按每分钟背景单独说话时间计数。两者要一起看,否则只压漏词可能同时删掉主讲人。
下表说明几组关键集合的规模与背景单独说话时长,重点看 60 秒窗口和单人通话为何能暴露短窗口看不到的问题。
| SET | ITEMS | CALLERS | REF. WORDS | BG-ONLY MIN |
|---|---|---|---|---|
| Krisp VI benchmark | 265 | 47 | 31,418 | 85.3 |
| AMI, 60 s windows, evaluation meetings | 120 | 44 | 8,197 | 63.2 |
| Calls + another call’s speaker, development split | 120 | 120 | 8,050 | 4.9 |
| Calls, one speaker, evaluation split | 120 | 120 | 8,008 | 0.0 |
表中 Krisp 有 85.3 分钟背景单独说话,AMI 60 秒评测窗有 63.2 分钟,而 VoxLock 式短窗每集只有几分钟。单人通话集背景时间为 0,打分方式是与不处理相比的变化,任何变差都算对单人主讲人的损伤。开发集用来选模型,测试集不参与选择。
在测试集上相对 VoxLock 的位置
先看 Krisp 散点的教学价值。横轴是背景单独说话段每分钟漏词数,对数刻度越左越好,纵轴是词错误率越下越好。右上方是噪声抑制和重合成,漏得多也错得多;左下方是隔离器,本文模型与 VoxLock、Krisp VI 2.5 聚在一起。
看图路径: 1. 先看横轴是对数刻度的每分钟漏词数,越靠左漏得越少;2. 再看纵轴是词错误率,越靠下总错越少;3. 对比左下角几个隔离器点与右上方噪声抑制和重合成点的距离;4. 注意 VoxLock 和本文模型在左下角的相对位置
论文图 1。原论文 Figure 1::“Krisp: word error rate against leaked words per minute of background-only speech, one point per system, our models live.”。
图上可见本文 M 加 WavLM 星号与 CPU 学生加号落在最左,漏词最少;VoxLock 菱形紧随其后;Krisp VI 2.5 在右侧一点。DeepFilterNet3 和不处理在右上方,重合成两个三角形在最右上,说明它们保留了背景人声。
下表是各测试集词错误率,AliMeeting 为字错误率,重点比较直播条件下本文发布版与 VoxLock 直播版。
| SYSTEM | KRISP | AMI 60 S | CALLS, CLEAN | CALLS + VOICE |
|---|---|---|---|---|
| VoxLock, PyTorch script | 4.99 | 20.20 | 2.87 | 48.59 |
| Ours, M + WavLM, live, before the window cut | 5.55 | 15.91 | 7.27 | 48.36 |
| Ours, M + WavLM, live | 5.74 | 16.13 | 5.58 | 47.52 |
发布版在 60 秒 AMI 窗上为 16.13% 对 23.66%,在 AMI 评测会议上为 10.18% 对 12.07%,在 NOTSOFAR 上为 7.67% 对 8.84%,在带别人声的通话上为 47.52% 对 56.65%,在 Krisp 上为 5.74% 对 5.63% 基本持平,在 VoxLock 自家 AMI 窗上为 10.19% 对 11.71%。代价在单人干净通话上为 5.58% 对 2.92%,发布版仍多损伤单人主讲人。无 WavLM 的 M 在 AliMeeting 上更差,因为最响 3 秒常是别人,有 WavLM 后从 18.57% 回到 15.69%。
长通话遗忘是怎样被复现和修复的
窗口化变换器在背景单独说几秒后会放行背景,而循环结构的 VoxLock 不这样。只用长窗口才能看到。24 秒轮流通话、10 秒窗口加一个帧长短期记忆网络修复了大部分。短样本末尾拖一段别人单独说话反而在主讲人回来时切掉主讲人,说明训练要让主讲人在背景长说后回来,而不是只在样本末尾放背景。
代价是学会持续抑制的模型也开始怀疑单人主讲人。真实串音微调对单人几乎无损,长通话段再把单人代价拉回去一部分,主讲人电平漂移加更多单人样本又追回一部分。4 个开发集一起看的平均指标上 M 为 11.44%,VoxLock 为 11.91%,WavLM 是第一个同时改善两端的改动。
进语音助手后语音检测得到什么
LiveKit 助手里隔离器放在语音检测、轮次检测和识别之前。论文用 LiveKit 自带 Silero 规则测:在只有背景说话段,生通话每分钟起音 5.09 次,发布版后 0.13 次;主讲人停顿里有语音的比例从 47.9% 到 22.8%;90 分位轮次尾延迟从 2.43 秒到 1.00 秒;轮次尾被拖到下次开口的比例从 28% 到 18%。
代价是单人语音被漏掉 5.2%,VoxLock 为 2.6%,多在通话前几秒。CPU 学生保留大部分收益,停顿有语音比例 26.2%,轮次尾 90 分位 1.34 秒,单人漏 4.9%。
小模型与服务代价
发布版 555M 含 WavLM,每秒音频约 47.7G 乘加,单 GPU 20 毫秒块可带 160 路,40 毫秒块 256 路。蒸馏走同配方 3 段,教师输出做第二目标,带编码器和解码器形状不变并从发布版继承 92 个张量,变换器缩小并去掉 WavLM。C22 为 22.1M,选择规则是综合最低且大尺寸须比小尺寸好超 0.2 分,结果 C10 为 11.06%,C22 为 10.66%,C51 为 10.78%,故选 C22。
下表是插件在单线程上的每通话占核比例与综合指标,VoxLock 默认 8 位模型在 20 毫秒帧占 132% 已超单线程。
| Model | float | float | float |
|---|---|---|---|
| Ours, C10, 9.8M | 18 | 10 | 11.06 |
| Ours, C22, 22.1M | 33 | 17 | 10.66 |
| Ours, C51, 50.9M | 64 | 31 | 10.78 |
C22 浮点在 20 毫秒帧占 33%,50 毫秒帧占 17%,8 位为 23% 和 12%,综合 8 位为 10.52% 对浮点 10.66%,但 8 位输出随切帧变化,20 与 50 毫秒帧一致性只到 40 分贝,浮点到 104 分贝,插件默认跑浮点。测试集上学生 60 秒窗 15.55% 对 23.66% 还好于发布版,干净单人 5.32% 对 2.92% 仍落后。GPU 行里发布版每帧中位 14.46 毫秒、99 分位 30.25 毫秒,输出落后 40 毫秒,超时按上限放行,未过滤音频在 32 路时 0.1%、64 路时 1.0%。
单人损伤里多少是冷启动
录音中心的单人信道在主讲人停顿之间是数字静音,51% 的 10 毫秒帧是数字静音,每分钟约 1.8 次 3 秒以上静音,而合成暂停都有噪声或房音。模型在开头去掉 23% 的主讲人前 3 秒语音,回声后 5 秒去掉 11%。即使从第 1 帧就给正确答案注册仍去掉 17%,而 VoxLock 为 8%。在 55 个开口已在说话的窗里去掉 38%,在 53 个 2 秒后才开口的窗里只去掉 6%。原因是训练样本从无人说话开始,声音从第 1 帧就存在是没见过的状态。
论文试过直播直通、混回输入、开头加 1 秒数字静音、跳过静音步进、训练中把暂停变数字静音等,只有从更长通话切窗真正治本。30% 长通话样本切 0.5 到 3 秒,使得切口处常已有人在说话。S 上切窗把窗首 3 秒丢失从 33% 降到 4%,M 上干净开发通话从 3.92% 降到 2.96%,测试单人通话从 7.27% 降到 5.58%,60 秒会议窗只涨了约 2 次同配方运行之间的波动。
配方、注册和尺寸的取舍
下表是 S 的配方过程,干净通话列是相对不处理的变化,括号内是删除词,会议列是三会议集均值,综合列是四开发集均值。
| SYSTEM | CALLS + VOICE | MEETINGS | DEV-4 | KRISP |
|---|---|---|---|---|
| VoxLock, loudest 3 s | 58.84 | 15.08 | 11.91 | 5.19 |
| + real-crosstalk fine-tune | 62.66 | 21.94 | 17.42 | 8.25 |
| + long-call stage | 52.71 | 13.47 | 11.98 | 6.06 |
可见真实串音微调把单人从 7.16% 降到 3.85%,但 60 秒窗从 33.87% 涨到 44.29%;长通话段把 60 秒窗拉回 19.65%,单人又回到 7.53%;加电平漂移和单人样本后单人为 5.78%,综合为 11.67%。注册方式上直播取最响 3 秒好于从自身输出注册,无注册对单人更温和但长会议更差。
下表是尺寸与 WavLM,重点看宽度与预训练谁更值。
| SYSTEM | CALLS + VOICE | MEETINGS | DEV-4 | KRISP |
|---|---|---|---|---|
| S, 140M | 51.42 | 13.63 | 11.67 | 6.12 |
| S + WavLM, 452M | 51.63 | 12.67 | 10.81 | 5.37 |
| M + WavLM, 555M | 51.05 | 12.76 | 10.55 | 5.55 |
| L + WavLM, 687M | 52.30 | 12.82 | 10.66 | 5.47 |
M 好于 S,L 不胜 M,加 WavLM 后 S 胜过所有无 WavLM 尺寸。M 加 WavLM 综合从 11.44% 到 10.55%,会议从 13.40% 到 12.76%,单人从 5.57% 到 3.92%。只用 WavLM 输出当老师、当说话人编码器或从零学它的 331M 因果学生都不改善;保留 WavLM 权重并因果化后与原 16 层余弦从 0.59 经蒸馏到 0.81。w2v-BERT 2.0 和 Whisper 编码器数据量更大但只到 11.35% 和 11.74%,HuBERT-Large 甚至变差,说明关键是重叠语音主讲人任务而非数据量。
结论在什么条件下才成立
所有分数都来自 Parakeet 或 Whisper,其他识别器对处理的反应不同。Krisp 通话是脚本化的,呼叫中心带第二人声是作者合成叠加且参考来自识别转写。直播取最响 3 秒,在 AliMeeting 很多窗里最响的是别人,就会留错人。会议集奖励抑制、干净通话奖励克制,加权不同会选出不同模型。S 同配方 2 次运行综合为 10.81% 和 10.96%,M 为 10.55% 和 10.61%,一两成的零点几分差是区分运行而非配方。
WavLM 分支加 311M 参数且只能 20 毫秒帧,GPU 路数少于纯 M,且 WavLM 预训练是英文。Krisp、ai-coustics 和 AppTek 录音仅限评测,内部研究结果待发布许可。
复现第一步做什么
先按论文的公开集合搭评测:Hugging Face 上的 voice-isolator 集合拿发布版和 CPU 模型,LiveKit 插件在 STT-API 仓库的 voice_isolator 目录下。作者资源当前可用,已公开,第三方链接只证明论文提到该地址。复现基线时用同一 16 kHz 文件跑 VoxLock 1.1.1 的已发表协议和直播模式、DeepFilterNet3 和 Krisp 已发布输出,确认 Krisp 未处理 23.19% 左右且 262 个文件错误数一致,再测 60 秒窗和单人信道。训练复现先做 6 秒合成,再加真实串音和 24 秒轮流长通话,注意注册在 70% 样本给 2 到 5 秒、六成带噪,以及切窗 30%、漂移半数、单人 30% 的比例。
何时值得试,还缺什么验证
当转写前必须去掉同房间第二人声、且能接受单人首句小损伤时值得试发布版;当只能单 CPU 线程时试 C22 浮点,20 毫秒帧约三分之一核。不要把搜索出的最优注册或事后最优当部署收益,直播只能用至今最响 3 秒。还需要补的验证是其他识别器下的损伤、非英文和儿童或远场主讲人的注册稳定性,以及真实第二人声呼叫中心的大规模对照,因为现有带人声通话部分是合成叠加。容易误解的是 Krisp 持平不等于无提升,持平只在短窗上,长窗和真实会议上差距才显现;单人变差不是噪声抑制没做好,而是隔离器把返回的主讲人当成了需要抑制的延续。
📎 论文与评分元数据
排名:前25% | 文档类型:系统技术报告 | arXiv 原文
⚖️ 评分明细
评分属于系统判断,不是论文实验结果;八维数值与总分见页首,原始审计记录保留在后端。
评分规则:type-aware-v1
评分模型:muse-spark-1.3-contributor
评分请求协议:openai_responses

