MECT: Mixture of Experts with CNN-Transformer Network for Speaker verification
Yu Zheng, Jinghan Peng, ChangHao Zhang, Jian Liu, Weiqiang Wang
cs.SD, cs.AI, eess.AS
2026-09-21
蚂蚁把帧级四专家 MoE 塞进 CNN-Transformer 声纹网,MECT-B2 仅 9.57M 参数就把 Vox1 minDCF 打到 0.012,因果重训后 100ms 分块几乎不掉点。
说话人确认要判断两段语音是不是同一个人。骨干已经从 ECAPA-TDNN、ResNet 变体走到 CAM++、ReDimNet 这类 CNN 与 Transformer 的混搭,再往上就是把 w2v-BERT 2.0 这种五亿级自监督模型拿来微调。Mixture-of-Experts 在大语言模型里是标配,声纹这边此前只出现在预训练模型的微调阶段,用来混合不同层的表征。从头监督训练的声纹网里,还没人认真试过。
落地还有一个更硬的约束:门禁和通话质检经常等不到整句话说完,必须按百毫秒级的块往外吐嵌入。非因果模型按短块切着跑,准确率会塌。
蚂蚁集团 Machine Intelligence 的 MECT 把 MoE 嵌进 CNN-Transformer 骨干,并给了一套因果重训的流式抽嵌入方案。仓库名 AntSpeaker。
骨干沿用 ReDimNet 的 reshape-dimension:CNN 抽局部频谱,Transformer 看时序,中间把频率维和通道维揉到一起。相对 ReDimNet,MECT 改了四处结构。
残差相加放到 BatchNorm 和 ReLU 之后,不再放在前面。位置编码改成两层 1D 卷积。下采样和通道扩展直接走 ResNet block 里的卷积步幅,不再单独加一层。block 之间用普通 shortcut,不用 ReDimNet 的 dense connection。论文给出的原因很直接:dense 没带来收益,还多算力。
MoE 替换的是 Transformer 前馈网络的第一层线性投影,按两个轴组了四种变体。路由粒度可以是整句,也可以是逐帧;权重可以让全体专家加权(Dense),也可以只走 Top-K(Sparse)。
帧级 Dense 最直观:每一帧过一个线性门控,Softmax 出 N 个权重,所有专家都算一遍再加权。帧级 Sparse 同一套门控,只激活 Top-K。句级两种先把整句平均池化,再出一套全句共用的路由权重,所有帧走同一组专家。
网络分四段,block 数 2/4/5/3,频率维从 80 收到 10。四个尺寸由通道数 C 和每个 block 里 ResBlock 个数 M 控制:A 系列 C=16,B 系列 C=32;带 1 的 M=2,带 2 的 M=3。Transformer 隐层固定 64。前端是 80 维 log Mel 滤波组,句级池化用 ASTP(Attentive Statistics Pooling,按注意力加权后再算均值和标准差),损失是 SphereFace2,嵌入 192 维。
流式给了三条路。M1 把各块嵌入直接平均。M2 把特征拼起来再池化。M3 把卷积改成只在时间维左侧补零、注意力加上因果掩码,整网重训;推理时缓存卷积感受野、注意力的 KV,以及 ASTP 的帧特征和 Softmax 前的注意力 logits。
消融在 VoxCeleb2 上训练、VoxCeleb1 上测试。无 MoE 基线 9.40M 参数,四套协议平均 EER 0.84、minDCF 0.064。最好的配置是帧级 Dense、4 个专家:平均 EER 0.80、minDCF 0.059,相对下降 4.7% 和 7.8%,参数只涨到 9.57M。专家数窗口很窄。2 个专家平均 EER 0.86,略差于无 MoE;5 个专家把 Vox1-O 从 0.27 送回 0.35。Vox1-H 的 EER 上,四专家 Dense 和无 MoE 都是 0.85,并没有拉开。
对外对比用的就是这套帧级 Dense 四专家。
| 方法 | 参数 | Vox1-O EER / minDCF | Vox1-E | Vox1-H |
| ReDimNet2-B6 | 10.45M | 0.29 / 0.027 | 0.52 / 0.050 | 0.99 / 0.104 |
| MECT-B2 | 9.57M | 0.27 / 0.024 | 0.46 / 0.048 | 0.85 / 0.082 |
| W2V-BERT 2.0(加 VoxBlink2) | 587M | 0.14 / 0.020 | 0.31 / 0.032 | 0.73 / 0.071 |
| MECT-B2(加 VoxBlink2 + AS-Norm) | 9.57M | 0.22 / 0.012 | 0.28 / 0.026 | 0.52 / 0.048 |
相对 ReDimNet2-B6,MECT-B2 把 Vox1-H 的 EER 从 0.99 降到 0.85(相对 14%),minDCF 从 0.104 降到 0.082(相对 21%)。加上 VoxBlink2,再做 AS-Norm 和 QMF 分数校准,minDCF 到 0.012、0.026、0.048,论文据此写成 VoxCeleb1 上的最好结果。同一套校准下,W2V-BERT 2.0 的 Vox1-O EER 仍低一截(0.12 对 0.22),minDCF 则是 MECT 更好。
中文数据 CN-Celeb 上,MECT-B2 换成帧级 Sparse Top-4、8 个专家。EER 4.87、minDCF 0.297;同设定的 ReDimNet2-B6 是 5.22 / 0.321,去掉 MoE 是 5.01 / 0.303。相对 ReDimNet2 分别降 6.7% 和 7.5%。
流式数字更刺眼。非因果模型切 100ms,M1 的 Vox1-O EER 从离线 0.27 崩到 12.34,M2 崩到 7.50。1 秒块还能用:M2 到 0.39。因果重训之后,离线基线变成 0.38 / 0.59 / 1.05,100ms 分块仍是 0.38 / 0.60 / 1.06,几乎贴着离线。
第一层 MoE 的路由跟音素对上了。擦音和塞擦音(如 /s, z/)主要进专家 E2,权重 0.65 到 0.88;元音主要进 E0,权重 0.40 到 0.55。训练没有音素标签。
给要部署声纹的人,价值分两块。
一块是小模型去碰大模型的校准分数。9.57M 参数、14.43 GMACs(2 秒片段、只计骨干),大约是 W2V-BERT 2.0 参数量的六十分之一。加了 VoxBlink2 和后端校准之后,minDCF 能压过它。算力并不更省:ReDimNet2-B6 是 13.11 GMACs,MECT-B2 还略高,赢在误差。
另一块是 100ms 分块。门禁和通话中途拦截等不到整句。因果重训把短块崩盘按住了,代价是离线 EER 从 0.27 升到 0.38。
MoE 本身是渐进改进:平均 EER 降 4.7%,多 17 万参数。Dense 四专家在推理时四个全算,并不省 FLOPs,多的是按帧的门控容量。VoxCeleb 用 Dense、CN-Celeb 用 Sparse,换数据可能要重做这一步消融。
A1 到 B2 四档,3.78M 到 9.57M,可按端侧预算选。代码已开源。
「最好结果」写在 minDCF 上。Vox1-O 的 EER,校准后的 MECT-B2 仍明显落后 W2V-BERT 2.0(0.22 对 0.12)。两个指标哪个更贴近业务,论文没有讨论。
消融里 Vox1-H EER 没有被 MoE 拉开。专家数从 4 加到 5,Vox1-O 直接回退。这不像一个宽平台,更像一个窄点。
因果流式只报了分块准确率,没有墙钟延迟。「100ms」是音频块长度,不是端到端耗时。KV 和 ASTP 缓存实验里没有封顶,长时会话的内存没有测。
音素分工只看了第一层,用 Allosaurus 对齐后做相关,不是因果证据。后面几层的专家在干什么,论文没给。