恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Transformer在语音去噪中的应用:模型演进与工程实践
首页
资讯中心
/
Transformer在语音去噪中的应用:模型演进与工程实践
Transformer在语音去噪中的应用:模型演进与工程实践
发布时间:2026/9/30 6:20:46
语音去噪这块我坚持做下来也有六七年了。从最传统的谱减法、维纳滤波到后来CNN、RNN再到现在满屏都是Transformer相关的论文技术更迭确实快得让人喘不过气。最近我在集中整理一批基于Transformer的语音去噪深度学习模型论文顺手把里面的共性和差异做了个总结这篇内容就是从我的阅读笔记里整理出来的。这篇内容比较适合三类人看一是刚入门语音增强、想系统了解模型演进路线的同学二是手里有去噪需求、正在纠结选哪个模型落地的朋友三是想理解Transformer为什么能拿来降噪、以及它和CNN/RNN到底差在哪的爱好者。我不会只罗列论文标题而是把模型背后的设计动机、结构上的共同点、训练时容易踩的坑都拆开讲最后再分享一些我实际训练和调优时的经验。1. 语音去噪到底在解决什么问题1.1 任务本质和评价指标语音去噪学术上一般叫语音增强Speech Enhancement目标是从带噪语音里恢复出干净的语音信号。噪声可能是马路上的车流声、空调的嗡嗡声、餐厅里的多人说话背景声也可能是混响带来的晚期反射声。这个问题本质上是一个信号重建问题输入是“干净语音噪声”的混合我们要把噪声那一部分剥离掉同时尽可能保留原始语音的细节、音色和可懂度。衡量去噪效果业界常用的指标有三个这里先简单说一下后面讲论文时会频繁提到。PESQ语音质量感知评估范围大概是-0.5到4.5分数越高越好它主要反映人耳感知到的语音质量。STOI短时客观可懂度范围0到1越接近1说明语音越容易听懂这个指标对语音可懂度的刻画很敏感。SI-SDR尺度不变信噪比单位是dB越高说明增强后的语音和干净语音在波形层面越接近。如果做实时系统还要额外关心RTF实时系数也就是处理1秒音频需要多少秒的计算时间。RTF小于1才能做到实时。这三个指标和RTF基本就是论文对比阶段最常出现的四个数字。1.2 传统算法为什么会被深度学习取代在深度学习普及之前主流的去噪方法是谱减法、维纳滤波和基于统计模型的MMSE估计器。这些方法有个共同的假设噪声是平稳的或者可以通过语音间隙估计出来。但现实世界的噪声往往是非平稳的比如街道上突然响起的鸣笛、键盘敲击声这些方法处理起来就很吃力容易出现残留的“音乐噪声”听起来刺耳不自然。深度学习方法进入之后思路变成了“学习一个从带噪语音到干净语音的映射”。最早是拿全连接网络去预测幅度谱的增益后来CNN能捕捉局部时频特征RNN/LSTM能建模时间上的长程依赖效果越来越好。但真正让我觉得领域开始质变的还是Transformer出现之后它把“全局建模”这个能力带到了语音增强里。我在整理论文时发现一个明显的趋势早期语音增强模型大多围绕“局部感受野”做文章而现在越来越多工作选择Transformer作为主干或者把Transformer和卷积、循环网络结合。这个转变不是偶然的下面我从原理角度拆一拆。2. 为什么Transformer会进入语音去噪2.1 CNN和RNN的瓶颈在哪里CNN在语音增强里确实很能打特别是时域卷积网络TCN和空洞卷积出现后模型的感受野可以做得很大。但大感受野往往要靠很深的网络或者很大的空洞率来堆否则只能看到局部上下文。而语音信号有一个特点一个音素的发音长度不固定说话的快慢也会拉伸或压缩时间维度的依赖范围。想用固定卷积核去覆盖所有可能的长短依赖本质上效率很低。RNN和LSTM可以处理变长时间依赖但它们的问题也很明显计算是顺序的无法并行。训练长语音时时间步一多反向传播的路径很长容易出现梯度消失或梯度爆炸。虽然LSTM缓解了一部分但训练效率和并行性还是差强人意。Transformer走的是另一条路它用自注意力机制直接计算任意两个位置之间的相关性不依赖距离所以可以并行地看到全局上下文。在语音里去理解这句话的含义就是第50帧的语音可能和第200帧有强相关性Transformer一次计算就能建模这个关系不需要中间隔一大堆卷积层。2.2 自注意力如何建模语音的“上下文”自注意力机制用一句话概括每个位置都会和其他位置做相似度计算然后按相似度加权汇总信息。放到语音去噪里这就变成了一个很自然的“上下文聚合”过程。我打个比方你在嘈杂的餐厅里听朋友说话大脑并不是只靠当前这一个字来判断内容的而是会结合前面半句话、语调、口型变化等信息来“脑补”被噪声盖住的字。自注意力做的事情和这个很像它会让每一帧的语音表示都去“看”其他帧的表示把有用的信息聚合过来从而把被噪声污染的部分修复出来。但Transformer直接用在语音去噪上也有两个天然矛盾一是语音频谱是二维结构时间轴和频率轴的依赖性质完全不同二是自注意力的计算量是序列长度的平方语音一长就是几千帧直接全局注意力会导致计算量爆炸。所以论文里大量的设计实际上都在解决“怎么把注意力用在合适的位置、用合适的粒度”。2.3 从语音分离借来的“双路径”设计我在读论文时发现现在很多语音去噪的Transformer结构源头其实在语音分离领域。SepFormer这篇论文提出了一个双路径Dual-Path结构把输入序列切分成多个小块先在每个小块内部使用Transformer建模局部依赖再做一次全局的Transformer建模块与块之间的依赖。这个设计漂亮地把计算复杂度从“帧数的平方”降到了“块内帧数的平方块数的平方”。语音去噪领域很快就把这个思路吸收进来了不过做了一些调整因为去噪通常不需要分离出多个说话人只需要估计一个目标语音即可。但“局部建模全局建模”交替的思路几乎成了现在基于Transformer的语音增强模型的标配。3. 我读到的几类代表性Transformer模型3.1 频域双阶段Transformer小模型也能出效果先说一篇我很喜欢的论文TSTNNTwo-Stage Transformer for Speech Enhancement。它的核心思路可以概括为“先在频率维度做注意力再在时间维度做注意力”。为什么要先频率再时间因为语音的频带之间是有相关性的一个元音的共振峰往往横跨多个频带频率维度的注意力能把这些相关频带的信息聚合起来。做完频率维之后再把序列转成时间维度让模型去捕捉上下文语音的动态变化。整个模型不用CNN、不用RNN几乎纯Transformer结构参数量也非常小特别适合对模型大小有要求的场景。但这类“频域幅度谱估计”的思路有个通用问题它通常只估计幅度掩膜相位直接用带噪语音的相位代替。这个假设在低信噪比场景下会拖后腿因为相位被噪声破坏得很严重直接用原相位会导致增强后的语音听起来不干净有种“罐子音”。3.2 时域Conformer把波形直接端到端处理另一类代表工作是CTS-Net全称是Conformer-based Time-domain Speech Enhancement Network。它的做法在语音增强里相对激进不把音频转成频谱而是直接输入波形。CTS-Net的设计里有一个关键组件时间卷积网络合并多头自注意力这就是Conformer结构。TCN负责提取局部波形特征自注意力负责捕捉长距离的上下文依赖。这样做的好处是模型不会因为“直接使用带噪相位”而损失质量因为它在时域端到端学习能同时优化幅度和相位。这类模型的效果通常比频域模型更自然但缺点也明显时域波形采样率较高比如16kHz意味着每秒16000个采样点输入序列长度非常长训练显存和计算量都不小对工程落地来说压力会大一些。3.3 双分支和多分支融合的思路第三类值得注意的工作是“双分支”结构设计。它们一般把模型拆成两个并行分支一个分支处理幅度谱另一个分支处理复数谱或者相位信息最后在模型某个阶段做特征融合。这个设计背后有一个很朴素的观察幅度和相位本质上是一体的但它们的失真模式不一样。幅度估计不准人听起来会觉得音量忽大忽小相位估计不准语音会变“闷”或者发虚。如果把两个分支分开建模再通过注意力机制融合模型就有能力同时优化两个维度。和传统的复数卷积网络比如DCCRN相比这类双分支结构在引入Transformer之后建模长程依赖的能力更强特别是对背景噪声变化大的场景效果提升更明显。3.4 模型对比与适用场景速查我不建议一上来就看最新论文而是建议先建立“模型分类”的概念这样检索文献会快很多。下面这份对比是根据我总结的几类代表性结构整理出来的。模型风格输入表示核心结构优点主要局限适合场景频域双阶段Transformer幅度谱Transformer 频率/时间双阶段注意力参数少、结构简单、训练快相位使用带噪语音低信噪比上限受限轻量部署、快速验证、算力受限环境时域Conformer原始波形TCN 多头自注意力端到端学习幅度与相位语音更自然序列长、显存和计算开销大离线高音质、对实时性要求不极端双分支/复数谱Transformer幅度谱复数谱并行分支 跨分支注意力同时兼顾幅度与相位失真更低结构复杂、训练难度高追求高指标、复杂噪声场景双路径Transformer风格时频嵌入序列块内自注意力块间自注意力长序列建模高效全局一致性好切块长度和块数需要调参长语音、非平稳噪声严重的场景4. 训练Transformer去噪模型的实操要点4.1 数据准备与合成策略很多人以为语音去噪模型训练丢一堆带噪语音进去就行实际上数据合成方式极大影响了模型上限。最常用的做法是“干净语音噪声”按随机信噪比混合。我的习惯是把信噪比控制在-5dB到20dB之间做随机采样这样模型既见过极嘈杂的“地狱难度”也见过轻度噪声的场景不容易偏向某一种噪声强度。噪声库的选择上主流是DNS Challenge的公开数据、MUSAN和Freesound。但我实际操作中会额外混合两类数据一类是音乐噪声因为语音和音乐在频谱上的重叠方式与人声背景不同单独加进去能增加鲁棒性另一类是带混响的语音用简单的人工冲激响应做卷积能模拟房间反射。如果不加混响模型在真实房间里的表现会明显下降。训练集中的干净语音也要做清洗。我见过不少新手直接拿网上爬的语音训练结果里面自带底噪、剪辑爆音模型学会了“清洁语音里的噪声”越训练效果越怪。建议用域名标准的数据集或者统一做静音检测和响度归一化。4.2 特征、掩膜与损失函数的选择Transformer去噪模型既可以吃频谱特征也可以吃波形特征。频域模型通常把幅度谱的log域特征作为输入训练目标是理想比值掩膜IRM或者复数理想比值掩膜cIRM。直接回归幅度谱有时也能做但掩膜的方式让模型更专注于“增益调整”收敛稳定性会更好一些。损失函数是最影响听感的环节之一。我踩过的最深的一个坑是只优化SI-SDR loss波形层面的指标提升很快但听感上会偶尔出现金属声和过增强。后来我改成多目标联合损失用SI-SDR和multi-resolution STFT loss一起训练。STFT loss的作用是约束频域结构能有效减少“频谱空洞”让增强后的语音听起来更平滑自然。一个可以参考的训练目标组合是主损失用SI-SDR副损失加multi-resolution STFT loss权重可以按1:1到1:0.5之间调。加入L1 loss有时能让收敛更稳定但权重不宜过大否则模型会偏保守降噪力度不够。4.3 训练稳定性的三个关键细节Transformer模型在语音增强任务上比CNN更容易出现训练震荡我把它归结为三个容易被忽略的细节。第一是学习率调度。Transformer类模型最好配合warmup策略前几千步用很小的学习率让位置编码和注意力分布稳定下来再逐步升到峰值。我一般用Noam方式调度warmup步数设在4000到8000之间batch比较大时可以适当缩短。第二是梯度裁剪。自注意力计算过程中序列越长梯度范数越容易突然飙升。梯度裁剪最大值设在1.0到5.0之间能明显减少NaN出现。如果还出现NaN优先检查数据里是否有异常音频或者输入特征有没有除零问题。第三是LayerNorm的位置。现在的主流实践是pre-norm也就是把LayerNorm放在自注意力之前这样训练更稳定但表达能力略低于post-norm。如果你发现模型“能训但效果上限不高”可以尝试换成post-norm并配合更小的学习率但这个组合对超参数敏感新手建议先保持pre-norm。5. 模型训练与部署中踩过的坑5.1 不收敛、震荡和性能回退第一个高频问题是模型完全不收敛。如果模式崩溃成“直接复制输入”或者loss一直下不去先别急着调结构我一般按顺序排查训练数据里干净语音和噪声是不是有重复、信噪比分布是不是太极端、学习率是不是太大、mask目标值有没有越界。80%的情况是数据或超参数的问题跟模型结构无关。第二个问题是训练到中期时loss开始震荡甚至回退。这种情况大概率是学习率没有降下来或者某个batch里的数据特别难。处理方法比较简单降低峰值学习率、加大batch size、把特别难的样本按概率过滤掉。Transformer模型训练时对batch size比较敏感batch太小会导致自注意力统计量不稳定效果波动很大。我还会在训练时开启EMA指数移动平均对参数做平滑处理。虽然会多占一份模型参数的内存但推理时用EMA参数往往比直接用最后一轮参数的效果更稳这在语音增强任务里尤其明显。5.2 音乐噪声与语音失真的排查增强后的语音出现音乐噪声原理想起来并不复杂模型把某些频段的能量估计成了噪声在频谱上留下孤立的“小洞”听感上就像背景有细微的吱吱声。这个问题在频域掩膜模型里比较常见尤其是信噪比不高的时候。排查思路主要有三条。第一把训练目标从IRM改成cIRM因为复数域的掩膜能保留相位信息频谱结构更完整。第二在训练时加入时域损失或STFT损失强制模型生成平滑的频谱而不是只追求某个指标。第三检查模型是否对静音段噪声过度压制如果静音段被压得太狠会形成“忽静忽噪”的呼吸感。可以在静音段加一点噪声容忍让输出有自然的环境底噪。如果模型输出的语音发闷、发虚大概率是高频信息丢得太多。可以尝试把输入特征从16kHz提升到48kHz采样率或者引入高频和低频分开预测的“双子带”结构。这两个方案都会增加计算量但对音质提升很明显。5.3 实时推理与位置编码的取舍离线模型部署到实时系统时会遇到一个很现实的问题Transformer的自注意力是全局的但实时场景只能看到当前帧和过去的帧不能看到未来。解决方案一般是对注意力加因果掩码让每一帧只能关注自己之前的内容。这样RTF会受一定影响但延迟可控。还有一个坑是位置编码。如果训练时把音频固定成2秒推理时遇到3秒的音频有些位置编码方案会表现很差。建议优先使用相对位置编码比如旋转位置编码RoPE它对变长输入的泛化性更好而且对长序列相对位置的建模也比较合理。我自己在部署时还发现量化对Transformer去噪模型的影响比CNN大尤其是多头注意力中softmax后的分布对数值精度比较敏感。int8量化后指标下降明显的话可以退一步用layer-wise量化或者只量化部分卷积层保留注意力的浮点精度。我把典型问题和处理思路整理成一张表方便排查时对照。现象可能原因处理建议训练不收敛学习率过高、数据分布异常降低峰值学习率检查数据清洗与信噪比范围loss震荡回退学习率未降到合理区间、batch太小增加warmup或降低峰值lr增大batch size输出有音乐噪声IRM造成频谱空洞、mask过于激进换cIRM目标加入STFT多尺度损失语音发闷发虚高频丢失、相位不准确尝试复数掩膜或双子带高频单独建模变长输入效果骤降绝对位置编码泛化差改用RoPE等相对位置编码推理RTF过高序列太长、注意力全局计算做因果改造、限制注意力窗口、尝试轻量模型6. 选型建议与一点个人体会6.1 按场景选型如果你和我一样经常要在“效果”和“工程成本”之间做取舍下面几个选型判断可以帮你省不少试错时间。想要快速做一个能跑的语音去噪服务且对时延有要求优先选TSTNN这类轻量频域Transformer模型。它结构简单训练资源要求不高部署也不难。想要离线场景下的高音质增强可以试试时域Conformer这类端到端模型代价是显存和推理耗时都会上去。如果面对的是非常复杂的噪声环境比如多人说话背景、突发噪声同时存在建议上双分支或者复数域的Transformer模型虽然训练难度高一些但上限明显更高。另外建议在项目早期就把评估方案定下来PESQ和STOI这种客观指标只是参考千万不要只盯指标要留出足够时间做主观试听对比。我见过很多论文里指标漂亮但实际一听“塑料味”很重的模型这在项目交付里是过不了关的。6.2 我对未来趋势的观察从论文里能明显感觉到Transformer模型在语音去噪里正在和两个方向结合一个是扩散模型用扩散模型做语音修复的后处理能把增强后的语音再“精修”一遍听感自然很多代价是速度慢另一个是自监督预训练先把模型在大量无标注音频上预训练再用带噪、干净语音对做微调在小数据集上也能训出不弱的效果。轻量化也是绕不开的话题。很多论文都在尝试把大Transformer模型蒸馏到小模型上或者用线性注意力替代softmax注意力来降低计算复杂度。对于做产业落地的人来说关注这类工作比单纯刷指标更有实际价值。6.3 最后分享一个小技巧训练Transformer去噪模型时我会在数据合成阶段加入“困难样本挖掘”。具体做法是每轮训练先让模型对一些盲测样本做前向推理找出误差最大的几条噪声类型然后在下一轮的训练数据里提高这类噪声的出现比例。这个方法听起来简单但对非平稳噪声的处理能力提升非常明显算是我做语音增强以来性价比最高的训练技巧之一。语音去噪这个方向做久了你会发现模型结构固然重要但真正决定上限的往往是数据和训练策略的细节。希望这篇总结能帮你少踩一些我已经踩过的坑。