← 返回 2026-11-02

VoxLock:无需注册步骤的语音代理目标说话人提取 VoxLock: Target-Speaker Extraction for Voice Agents Without an Enrollment Step

Arbaz Siddiqui 📅 2026-10-29 👍 4 2026-11-08 18:30
流式推理 目标说话人提取 语音代理 语音识别 语音隔离

从通话本身自动截取声纹样本的免注册目标说话人提取,开源且单CPU线程可实时运行。

前置知识

目标说话人提取(TSE)

给定一段混合语音和目标说话人的一小段注册(enrollment)录音,只输出该说话人语音的技术。经典做法(SpeakerBeam、VoiceFilter)把注册音频编码成说话人向量,注入分离网络作为条件,让网络在混合谱中挑出目标。与降噪的本质区别:降噪保留所有语音,TSE 只保留指定的那一个人。

VoxLock 本质就是一个 TSE 模型,只是把预先录制的注册音频换成了从通话中自动截取的片段,理解 TSE 的条件化机制才能看懂它的模型改动。

Band-Split RNN(BSRNN)

一种语音分离/增强骨干网络:把 STFT 频谱按频带切分,每个频带独立建模,再用跨带序列模块交互。VoxLock 采用的因果 tfmap_context 版本来自 REAL-TSE 挑战在 WeSep 中的基线:16 kHz 音频、512 点 STFT、128 点 hop、六个 band-split 块、单向序列建模,共 27M 参数,权重以 Apache-2.0 发布。

论文的全部训练阶段与部署(ONNX 图、8-bit 量化、CPU 占用分析)都围绕这个骨干展开,不认识它就无法理解方法与延迟设计。

ECAPA-TDNN

说话人验证领域的主流网络,从一段语音提取固定维度的说话人嵌入,对信道与音色变化稳健。VoxLock 用它逐帧提取 3 秒声音样本的特征,供分离器的带级注意力查询,相当于把这是谁的信息逐带乘进频谱。论文还训练它的全部权重,而不是冻结。

ECAPA-TDNN 帧级特征做带级注意力调制,是声音样本进入模型的第二条通路,是理解模型结构的关键。

SI-SDR

尺度不变信噪失真比,语音分离最常用的信号级指标:先对估计信号做最优缩放对齐,再计算与参考信号的失真比,值越高说明分离出的波形越干净。训练时常用其负值作为损失函数(负 SI-SDR),VoxLock 四个训练阶段全部用它。

VoxLock 用它做训练损失,但作者同时指出信号指标不能反映语音代理真正关心的识别质量,这一张力贯穿全文评估设计。

WER、漏词率与泄漏

词错误率 $WER = (S+D+I)/N$,其中 S/D/I 为替换、删除、插入词数,N 为参考词数。本文另定义 missed $= (S+D)/N$,即主叫的话被转写丢掉的比例;leak 则统计中点落在纯背景语音时段(距主叫语音超过 0.25 秒)却被识别出的词数,按每分钟计。

论文全部评估建立在这三个下游识别指标上而非 SI-SDR,这正是它与以往 TSE 论文评估范式的关键区别,读懂指标定义才能读懂所有表格。

流式因果推理与算法延迟

因果模型只用过去与当前帧,可边收音频边输出。算法延迟等于窗长减 hop:本文 512 点窗、128 点 hop 在 16 kHz 下为 $(512-128)/16000 = 24$ ms。流式部署需分块处理,块长决定首包延迟与 CPU 占用的权衡:80 ms 块占单线程 61%,40 ms 占 77%,20 ms 则超过一个线程。

论文声称单 CPU 线程跑实时通话,其可行性由 24 ms 算法延迟、enrollment/chunk 双图设计与块长-占用权衡共同支撑。

研究动机

语音代理(电话客服、会议助手等)的识别器会把麦克风附近所有人说的话都转写进来:隔壁同事、电视、车里的第二个人。降噪过滤器帮不上忙,因为它们的设计目标是保留语音——所有语音。论文用数据量化了问题的严重性:在 Krisp 真实录音基准(265 条,含办公室、呼叫中心、电话场景,85.3 分钟纯背景语音)上,不做任何处理 WER 高达 23.21%,每分钟 66.48 个背景词泄漏进转写(共 5,674 个背景词);在 AMI 会议数据上未处理 WER 33.03%、泄漏 78.34 词/分钟。商用语音隔离产品(Krisp VI 2.5、ai-coustics Voice Focus、Sanas)能解决部分问题,但全部闭源,且按分钟或按设备收费。学术界的目标说话人提取(TSE)本是这一问题的研究版本,却有两个落地障碍:其一,TSE 需要预先录制的干净注册音频,而语音代理只有当前这一通电话,没有任何预先素材;其二,TSE 论文几乎只在仿真混合上报告 SI-SDR 等信号指标,而代理真正关心的是识别器到底写出了什么。

本文的目标是作者的目标是:只用一块 GPU(NVIDIA L4),把公开的因果 TSE 基线微调成一个无需注册步骤的模型——语音代理只需传入一路通话音频流,模型自动从通话本身截取 3 秒主叫声音样本,然后只保留主叫的语音、压制背景人声。同时满足工程约束:24 ms 算法延迟,能以流式方式在单个 CPU 线程上实时运行整通电话,模型、代码与逐文件评测分数全部开源。评估上放弃 TSE 社区惯用的信号指标,直接用语音识别器(Parakeet TDT 0.6B)的输出打分:主叫词错误率、漏词率、背景词泄漏率,并与 3 个厂商的 7 个商用语音隔离系统、5 个开源系统在同一批真实录音上对比,回答开源 27M 模型加单卡微调能否追平商用语音隔离这一实际问题。

与已有工作不同的是,论文的独特切入有三点。第一是自注册协议:已有工作要么依赖预录注册音频(SpeakerBeam、VoiceFilter、DNS 挑战个性化赛道),要么从混合中用距离线索找近端说话人(Lin et al.),而 VoxLock 让模型直接以从当前通话里截出的 3 秒为参考,天然适配没有预录素材的代理场景。第二是评估范式的转变:作者检索后未发现任何公开发表的工作用下游识别质量在真实录音上比较开源 TSE 与商用语音隔离产品,于是把主指标定为识别器转写中的主叫 WER 与背景词泄漏。第三是对比的完整性与诚实性:同一套音频喂给 Krisp 四款、ai-coustics 两款、Sanas、Hush、DeepFilterNet3、TIGER、SAM Audio 等十余个系统,并专门按哈希冻结了一个开发期从未看过的 400 窗 AMI 盲测集来防止评估过拟合,同时坦承开发中看过另外两个对比集。

核心方法

整体思路是成熟骨干加新的条件化协议再加面向真实缺陷的课程训练。直觉上,模型像一个人工调音师:先听 3 秒确认要保留谁的声音,之后在整通电话里把其他人的声音从频谱上抹掉。技术路线:骨干选 REAL-TSE 挑战在 WeSep 中发布的因果 tfmap_context BSRNN,16 kHz 音频、512 点 STFT、128 点 hop、六个 band-split 块、单向序列建模,共 27M 参数。3 秒声音样本通过两条通路注入:其一,通话频谱的每一帧对样本频谱的帧做交叉注意力,形成一路额外输入通道;其二,分离器的带级特征对样本的 ECAPA-TDNN 帧级特征做注意力,结果逐带相乘。训练分四个阶段(S1 纯仿真混合、S2 AMI 真实串音、S3 30 秒长通话、S4 距离与房间音),全部以负 SI-SDR 为损失、AdamW 优化、从上一阶段权重继续,先在仿真中学会跟着样本走,再逐步补上真实录音特有的串音、长时漂移与距离混淆。

核心创新是从通话本身取声音样本,彻底去掉注册步骤。传统 TSE 假设用户事先录过一段干净语音;VoxLock 的洞察是:通话开始时的前几秒本身就是天然的注册素材。具体规则:整段录音处理时取前 15 秒内能量最响的 3 秒;实时流处理时音频先原样透传,同时以 10 ms 帧做能量统计,累计比最近 2 秒内最安静帧高出至少 10 dB 的语音达到 3 秒后,才切换到隔离模式。这个设计隐含一个假设——主叫是最响、最早说话的人(耳机或手持电话场景成立)。与已有工作的本质区别在于:VoiceFilter-Lite 等方案的个性化依赖用户预注册,DNS 挑战个性化赛道用预录 clip,而 VoxLock 把提取谁的决策延迟到通话开始后数秒内自动完成,对代理而言输入接口退化为单一音频流;同时作者坚持用识别器 WER 而非信号指标定义提取成功,让结论直接对应代理的真实收益。

方法步骤详情

第一步,模型前向:3 秒样本过 enrollment 分支,其频谱帧与通话频谱帧做交叉注意力形成一路额外输入通道;同时 ECAPA-TDNN 逐帧提取样本特征,带级特征对其做注意力后逐带相乘。算法延迟 $(512-128)/16000 = 24$ ms。第二步,S1 仿真(4,000 步、6 秒样本):LibriSpeech 主叫与 1-2 个背景说话人混合,背景通常低 0-15 dB,一半例子与主叫同距离、其余在 1.5-5 米外的模拟房间,25% 过电话信道;声音样本取混合前 3 秒或主叫另一次发音。第三步,S2 真实串音(4,000 步):每步在仿真批上叠加 40 场 AMI 会议耳机音频;前 1,000 步用佩戴者独说的 4 秒窗加同耳机的他人串音(抬升 0-12 dB),后 3,000 步改为 8 秒纯串音中贴入 3-4 秒主叫片段。第四步,S3 长通话(800 步、30 秒样本):修复连续说话的主叫在 40 秒内衰减 20 dB 的淡出缺陷。第五步,S4 距离与房间(400 步):主叫与背景距离独立采样,加真实 AMI 房间底噪。全程损失为负 SI-SDR,AdamW(权重衰减 0.01、梯度裁剪 5),含 ECAPA 分支全部权重训练;学习率 S1/S2 为 $10^{-4}$(S2 末段衰减到 $10^{-5}$),S3/S4 为 $3\times10^{-5}$。

技术新颖性

技术新颖性体现在组合而非单点发明:骨干、ECAPA 条件化、SI-SDR 损失都来自已有工作(REAL-TSE/WeSep、SpeakerBeam 一脉),新意在四处。其一,无注册的采样协议与训练联动:训练时声音样本被刻意做成混合前 3 秒、另一次发音、干净或带噪等多种形态,使模型学会接受来自通话自身的、不完美的参考,而经典 TSE 只用干净注册音频训练。其二,训练课程由真实缺陷驱动:S3 针对长通话淡出(连续说话 40 秒衰减 20 dB)、S4 针对距离捷径(模型曾学会保留离得近的人),并以 S1 加 1,000 步的两个控制组证明泄漏改善确实来自真实串音数据而非更多训练步数。其三,评估协议:以识别器输出定义 WER/missed/leak 三指标,按人做 bootstrap 置信区间、冻结盲测集,这些做法在 TSE 文献中少见。其四,工程闭环:enrollment/chunk 双 ONNX 图使流式与整段处理在浮点上完全一致,8-bit 量化版仅损失 0.16 个 WER 点。

实验结果

Krisp 基准(Table 1,265 条真实录音):VoxLock WER 4.95%、漏词 4.22%、泄漏 0.11 词/分钟,对未处理(23.21%、66.48 词/分)提升显著;与 Krisp VI 2.5 Default(5.30%)统计打平,显著优于 HD(5.79%)、ai-coustics L/S(6.84%/6.91%)、Sanas(9.38%)、起点 REAL-TSE(9.81%)、Hush、DeepFilterNet3、TIGER 与 SAM Audio;live() 模式 5.15% 仍低于 Krisp Default。85.3 分钟纯背景音频仅 9 个背景词进入转写(Krisp Default 130 个)。代价:几乎无背景的电话场景 WER 从 3.82% 升到 5.36%,办公室/呼叫中心则从 29.31%/25.13% 降到 4.83%/4.90%。AMI 134 窗(Table 2):VoxLock 10.12% 全场最低、泄漏 16 词;ai-coustics S 泄漏仅 8 词且差异显著,说明并非全面碾压。盲测 AMI 400 窗(Table 3):WER 从 42.95% 降到 10.63%,泄漏 98.19 降到 1.17 词/分;给错人样本时 VoxLock 漏掉 17% 主叫词(正确样本 8%),REAL-TSE 漏 61%、WER 69.92%,说明模型确实用了样本但也学会保留下近端主说话人。阶段消融(Table 4):S1 贡献最大(Krisp 9.99 降到 5.61%,盲 AMI 降到 11.07%),S2 把泄漏 2.25 降到 0.20,S3/S4 主要改善 Krisp(最终 4.95%、0.11);两个 S1 加 1,000 步控制组(5.60%/2.55 与 6.06%/5.35)证明泄漏改善依赖真实串音而非步数。

Krisp benchmark, 265 real recordings. Missed: caller words lost (%). Leak: background words per minute of background-only speech (85.3 min). Δ: system minus VoxLock (whole file), 95% interval; * VoxLock significantly better. †264 files.
Table 1: Krisp benchmark, 265 real recordings. Missed: caller words lost (%). Leak: background words per minute of background-only speech (85.3 min). Δ: system minus VoxLock (whole file), 95% interval; * VoxLock significantly better. †264 files.
AMI, 134 windows (7 people). Leak counts in parentheses (7.5 min of background-only speech). Δ: system minus VoxLock; * VoxLock significantly better.
Table 2: AMI, 134 windows (7 people). Leak counts in parentheses (7.5 min of background-only speech). Δ: system minus VoxLock; * VoxLock significantly better.
Blind AMI set, 400 windows (16 people), frozen before scoring. Leak per minute of background-only speech (23.1 min). Rows are VoxLock unless named. Δ: row minus the first row; * interval excludes zero. ‡399 windows.
Table 3: Blind AMI set, 400 windows (16 people), frozen before scoring. Leak per minute of background-only speech (23.1 min). Rows are VoxLock unless named. Δ: row minus the first row; * interval excludes zero. ‡399 windows.
Stages. WER and leak on Krisp and the blind AMI set. The two control rows each continue S1 for 1,000 steps at learning rate 10−4. §The Table 1 checkpoint, extracted again for this run; the two extractions are not identical, and 40 of 265 files have different error counts.
Table 4: Stages. WER and leak on Krisp and the blind AMI set. The two control rows each continue S1 for 1,000 steps at learning rate 10−4. §The Table 1 checkpoint, extracted again for this run; the two extractions are not identical, and 40 of 265 files have different error counts.
查看结构化数据
任务指标本文基线提升
Krisp 真实录音基准(265 条) 主叫词错误率 WER 4.95%(live() 模式 5.15%) 未处理 23.21%;最佳商用 Krisp VI 2.5 Default 5.30% 对未处理降低 18.26 个百分点(95% CI [+15.50, +20.82]);对 Krisp Default 低 0.35 点但无显著差异
Krisp 基准背景语音抑制 背景词泄漏(词/分钟) 0.11 词/分钟(85.3 分钟共 9 词) Krisp Default 1.52 词/分(130 词);未处理 66.48 词/分(5,674 词) 比 Krisp Default 少约 93%,对未处理显著(CI [+15.50, +20.82] 为 WER 差)
盲测 AMI(400 窗、16 人、评分前冻结) 主叫词错误率 WER 10.63% 未处理 42.95%;REAL-TSE 起点 14.75% 对未处理降低 32.32 点(CI [+25.11, +38.88]);对起点降低 4.12 点(CI [+2.49, +5.50])
盲测 AMI 背景词泄漏(词/分钟) 1.17 词/分钟 REAL-TSE 起点 12.18 词/分;未处理 98.19 词/分 比起点降低约 90%,比未处理降低约 98%
AMI 会议窗(134 窗、7 人) 主叫词错误率 WER 10.12%(全场最低,泄漏 16 词) 最强商用 ai-coustics VF 2.2 S 11.85%(泄漏 8 词);未处理 33.03% 对 ai-coustics S 低 1.73 点(CI [+0.09, +3.86],显著);但泄漏多于对手 8 词且差异显著
CPU 流式部署(Xeon 2.2 GHz 单线程) 单线程占用与延迟 40 ms 块占用 77%,延迟 = 块长 + 24 ms 算法延迟 无处理基线(无额外算力) 8-bit 量化版 Krisp WER 5.11%,比 float32 仅高 0.16 点,质量几乎无损

局限与改进

作者明确承认:模型只在英语上训练、仅支持 16 kHz、设计为单主叫;自动采样规则假设主叫是最响最早说话的人,若背景说话人主导开头几秒就会锁错人(Table 3 中给错样本时 WER 从 10.63% 恶化到 23.23%、漏词率升到 16.97%);两个主要对比集(Krisp、134 窗 AMI)在开发期间都被看过并非盲评,且每个 AMI 窗都以主叫开头,恰好有利于自动采样规则;Krisp 基准来自被比较的厂商,其 CC BY-NC 4.0 许可禁止商用;所有转写来自同一识别器家族(Parakeet TDT 0.6B),结论可能与该识别器特性耦合;结果来自单次训练,各阶段依据上一次结果设计,不构成受控消融。我的补充观察:bootstrap 区间未做多比较校正,且 AMI 同会议的说话人不独立、区间偏窄;泄漏指标依赖距主叫语音 0.25 秒以上的判据,对转写时间对齐误差敏感;live() 模式在切换时需重算最多 30 秒音频,输出停顿 2-5 秒;所有系统统一用先听 3 秒再隔离的协议,未探索其他启动策略;电话场景的 +1.54 点 WER 代价提示模型在无可滤内容时会轻微损伤语音。

独立分析的弱点

第一,采样启发式脆弱:最响最早规则在主叫迟开口、免提远场、多人先后进入对话时会失效,失效模式是静默地锁错人而非报错(错样本 WER 23.23% 对 10.63%)——改进方向是引入说话人日志/聚类挑选并输出置信度,低置信时让代理请求用户确认。第二,评估与单一识别器绑定:WER 结论可能被 Parakeet 的鲁棒性放大或缩小,应在 Whisper、wav2vec2 等多识别器上复验,并补报 SI-SDR 以便与 TSE 文献对接。第三,纯语音场景有可测代价:电话场景 WER 从 3.82% 升到 5.36%,说明模型在无可滤内容时会损伤语音——可加噪声/串音检测门控,仅在检测到第二说话人时启用隔离。第四,单语言单主叫:中文等多语言、多人会议场景完全不适用。第五,数据与协议瑕疵:AMI 用于选 checkpoint、Krisp 暴露了 S3/S4 要修的问题,非盲评估可能高估泛化;Krisp 行使用厂商发布的输出,文本归一化与自家管线不一致。第六,切换开销:live() 启动时一次性重算最多 30 秒、输出停顿 2-5 秒,可改为增量 warm-up 或后台预计算。

未来方向

作者提出的方向:扩展到多语言与窄带电话信道(8 kHz)、支持多主叫、设计比最响最早更稳健的自动采样规则。基于成果可延伸:其一,把采样与说话人日志联合,通话中动态切换目标,例如多人会议为每人维护一路隔离流,供并行转写;其二,与语音活动检测、唤醒词结合,把 3 秒语音门槛与代理对话状态对齐,减少纯语音场景的 WER 损伤;其三,量化与蒸馏——8-bit 版已达 5.11% WER,可进一步做 INT4/结构化剪枝并部署到设备端 NPU;其四,端到端代理评测:目前只测转写质量,应测轮次理解、误打断、任务完成率等下游指标;其五,评估协议改进:报告多识别器结果、做多比较校正、构建真正盲测的多语言真实通话集;其六,把 S2 风格的真实串音批数据构造方法推广为通用课程,供其他 TSE 与降噪模型借鉴;其七,探索距离信息(Lin et al.)与样本条件互补的融合,缓解锁错人风险;其八,把词泄漏与漏词指标标准化为 TSE 社区的下游评测基准。

复现评估

复现条件相当友好。开源情况:模型权重、两个 ONNX 图、Python 包(VoxLock 1.2.1)、训练评测代码与逐文件评测分数都在 GitHub 与 HuggingFace 公开;起点 checkpoint 是 REAL-TSE 挑战在 WeSep 中以 Apache-2.0 发布的因果 tfmap_context BSRNN(27M 参数)。算力:单块 NVIDIA L4 完成全部 9,200 步训练(S1 4,000 + S2 4,000 + S3 800 + S4 400),整段推理比实时快 40 倍;CPU 部署只需 onnxruntime 1.31.1 单线程,40 ms 块占用 77%。数据:Krisp 基准公开但为 CC BY-NC 4.0(禁商用),AMI 与 LibriSpeech 是公开语料。门槛主要在数据管线(仿真混合生成、AMI 串音批构造)与商用对比系统的 API——作者已丢失 ai-coustics 密钥,盲测集上的部分商用对比无法复现。总体评估:复现本文主结果难度中低,单个研究者数天内可完成训练与评测,但完整复现全部商用系统对比需要各厂商 SDK 与商业许可。

相似论文推荐