作者编语:在说话人识别社区里,cross-domain问题,即跨域问题,是很常见和十分地影响着识别性能。这次想聊一下cross-domain问题,顺便带一下货[狗头]~我先从任务和应用场景的角度来谈cross-domain是怎样常见哈。

先从最简单的看,根据采集到的第一手音频文件属性,有分为8KHz,和16KHz(44.1KHz默认降采样到16KHz再处理)。把16KHz作为注册集,8KHz作为验证集,用8KHz模型去识别,这场景是经典的cross-domain问题。对于自由说的(文本无关)说话人识别,8KHz音频常见是走电话信道,有G.711 a/u-law、G.729等编解码格式,还常见以amr-nb、8kbps的mp3压缩保存8KHz音频;而16KHz音频,来源也很多,可以是手机、平板、电脑、视频等等,编解码格式也很多样,例如aac、mp4、flac、silk等等;由于该场景的注册与验证的音频信道差异很大,所以也被称之为跨信道的说话人识别。
另一方面,由于8KHz音频原生的采样点数是比16KHz少了一半,同一人的两句不同采样率音频在听感上是会有明显差异,大家可以尝试一下sox降采样听听:
sox 16k.wav -r 8000 -b 16 -t wav 8k.wav
采样点的降低,会让听感没有原来16KHz的细腻,这同样会影响着模型的识别性能,因为能建模的信息量直接少了一半;而且跨信道比对的分数,相比同信道(8KHz vs 8KHz)的会出现一定的分布差异,这会影响着阈值的设定和校准。
除了16KHz vs 8KHz跨信道识别,还有这些常见的cross-domain场合:
  • 跨语种的/跨方言的,例如普通话与粤语之间,粤语与客家话之间,普通话与英语之间等;
  • 跨设备的,例如平板与手机之间,视频流与其它等;
  • 跨时变的(time-drifting),例如2012年注册的声纹,在2022年去验证,或者生理成长的等;
  • 病理的,感冒的,带口罩的等;
  • 跨环境的,跨场景的,例如卧室与公园,餐厅与办公室,访谈与综艺等,引入噪声变化;
  • 跨时长的,例如15秒与60秒之间,体现在音素量差异;
  • 跨方位的,近场与远场的,与麦克风的角度差异,是正对手机屏幕还是正对手机底部等;
  • 同设备跨麦克风的,例如固话的外放与手提,手机的蓝牙耳机与线控耳机等,会引入设备固有噪声;
  • 跨编解码格式的,例如MP4和aac之间、8bit和16bit之间等;
  • 跨降噪算法的,降噪算法很多种,注册和验证采取的策略不同也会有影响,例如体现在滤波器上。
以上列举的也包括了16KHz vs 16KHz、8KHz vs 8KHz的情况,但情况太多,没法全部枚举出来~当然,也是有注册和验证都近似一个domain的,例如:
  1. 门禁系统;
  2. 车载中控;
  3. 手机的数字密码锁;
  4. 智能音箱。
第一个是固定物理设备和地理位置,周边环境相对稳定,可控成分很大;后三个是固定了物理设备和有一定的环境变化。这些场景常见于交互的物理设备,但要考虑到它们的特殊性,就是文本相关和半相关,例如唤醒词、命令词和数字串,这需要兼顾到声纹隐私和防攻击问题。
以上说到的都是针对注册集vs验证集,如果以训练集与测试集(注册集+验证集)的domain不同来看,这也属于cross-domain的范畴。这情况常见于刚提到的文本相关和半相关任务。若有印钞加持,去收集足量的文本相关和半相关训练集,那肯定是很完美的训练方法,相当于parallel training;如果没有的话,那只能用文本无关的训练集去实现,那会是跨文本和跨设备的训练。
最后,还有些cross-cross-domain的情况(称之为open更恰当):
  1. 防攻击,对于未见过的攻击算法,例如新型TTS、VC,新的高保真扬声器,这些可以归类于open attack;
  2. 声学事件,炒菜与烧开水之间,烟花与枪声等。
说完现象,接下来说一下解决的方法。
  1. 加数据,这方法很彻底很直接,让训练集尽可能囊括目标测试集的场景,适用于以上所有情况。但实际上,这是很难枚举完的,现实中有很多边界情况,而且加数据是昂贵和耗时,并且要加正确的数据才能work,不能一味地加;
  2. 数据增强,例如加卷积和加性噪声,变音量变tempo,加编解码的转换,做spec-agu等等;
  3. 提升网络的识别精度,加深加大换结构魔改loss function都是可行的;
  4. transfer learning,这里有很多细方向。对于神经网络来说,有少量标签可以做fine-tuning和multi-task learning,无标签的可以做semi-supervised learning自我学习等等;对于backend来说,可以对PLDA做adaptation,可以换mean.vec,甚至是对raw embeddings做CORAL等等。
关于transfer learning和说话人识别,如果是xvector直接cosine,那可选方案有NN和最终分数;如果是xvector搭配PLDA这套方案,可选可以是对NN做fine-tuning,也可以选择对backend的模型做adaptation。而这篇文章,我想谈谈backend这方面的运用。
我们先看通用基本的架构:

通用的
training和eval之间没有任何关系,我们仅能以traning的xvector来训练mean.vec、pca、lda、plda等等。如果能采集到和eval同一个domain的开发集,即dev set,那接下来我们可以从以下三个地方对backend进行adaptation:
Voiceai Systems to NIST Sre19 Evaluation: Robust Speaker Recognition on Conversational Telephone Speech
目前有从raw xvector上源头进行改造,有从负责打分的PLDA上改造,有从分数结果上改,图来源:
Rongjin Li, Dongpeng Chen, and Weibin Zhang, “Voiceai systems to nist sre19 evaluation: Robust speaker recognition on conversational telephone speech,” in ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2020, pp. 6459–6463.

这些改造都是能work的,起码我实现验证过哈~对于raw xvector的改进,思想是很彻底的,因为训练集本身是最原始,如果训练集能一开始被自适应到目标域,那后面的模型都会符合目标域特点。但难点是训练集与开发集的匹配度;而有监督的PLDA,它负责着拉开类间距离和比对分数输出,而且它对高斯分布有足够的敏感,对这里迁移统计量是很好的,但提升效果有限;AS-Norm,是个猛药,拔高力度很大,常见于各类challenge比赛,但这里会存在对称性问题。

对于PLDA的adaptation提升有不少优秀的工作,例如:

Daniel Garcia-Romero, Alan McCree, Stephen Shum, Niko Brummer, and Carlos Vaquero, “Unsupervised domain adaptation for i-vector speaker recognition,” in Proceedings of Odyssey: The Speaker and Language Recognition Workshop, 2014, vol. 8.

Kong Aik Lee, Qiongqiong Wang, and Takafumi Koshinaka, “The coral+ algorithm for unsupervised domain adaptation of plda,” in ICASSP 2019-2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019, pp. 5821–5825.

对于raw xvector,CORAL和fDA的工作比较出名:

Baochen Sun, Jiashi Feng, and Kate Saenko, “Return of frustratingly easy domain adaptation,” in Proceedings of the AAAI Conference on Artificial Intelligence, 2016, vol. 30.
Md Jahangir Alam, Gautam Bhattacharya, and Patrick Kenny, “Speaker verification in mismatched conditions with frustratingly easy domain adaptation.,” in Odyssey, 2018, vol. 2018, pp. 176–180.
Pierre-Michel Bousquet and Mickael Rouvier, “On robustness of unsupervised domain adaptation for speaker recognition,” in InterSpeech, 2019.

CORAL的思想是从对齐协方差上入手的。假设目标域in-domain是,源域out-of-domain是,那CORAL是要寻找一个转换矩阵A使得两者的Frobenius范数最小:


使上式=0时,可得解析解是:



可以看得到,转换矩阵A是和inD与ooD的协方差有关,文章中把第二部分称之为whitening,第一部分是re-coloring;另外为了矩阵满秩,论文尝试过给两个协方差赋予单元矩阵,有以下伪代码:
CORAL
而feature-distribution adaptor,则是对协方差矩阵的组合进行了SVD分解,在特征值上做了进一步约束。fDA认为小特征代表着矩阵变换中的次要转换方向,甚至是nuisance,这是可以适当地做上采样,而大特征是可信能保留的,所以有:
feature-distribution adaptor
fDA的思想是合理的,因为多维矩阵可以看作是个多次的转换操作,这里面会有主要,次要和与主方向相抵的转换存在,更多去关注主要方向能起到收敛效果,类似于attention一样。但这里会有一个问题,当训练集与开发集失配程度较大,同时开发集内部很复杂,是从多个不同domain采集到汇集起来的dev set,那直接在这做上采样是不合适的。
基于以上CORAL和fDA的考虑,我在ICASSP2022(已接受)中提出了新的无监督自适应算法CORAL++:
Li R, Zhang W, Chen D. The CORAL++ Algorithm for Unsupervised Domain Adaptation of Speaker Recogntion[J]. arXiv preprint arXiv:2202.01092, 2022.

伪代码如下:

CORAL++
想法有几点,
  • 在CORAL的解析解中,真正会影响着转换矩阵A的是,毕竟对于同一个模型,是固定的,所以要着重对进行优化;

  • 由于是个实对称矩阵,所以我选择了EVD快速计算出特征值,但考虑到了复杂多样的in-domain数据,直接用固定的上采样参数去处理是不合理的,可以看下图:


原始的
unlabeled data是in-domain的开发集,能看到蓝色分了两块并交错在红色的cn-celeb和黄色的vox-celeb之中,这说明蓝色本身并不是一个很规矩好处理的对象。所以我尝试了对inD数据做了Z-Norm的处理,在这个基础上再做上采样。这有几个好处,Z-Norm可以突出相对关键的分量,把key和nuisance拉开,它在多样的inD数据上能使得参数的微调更简单容易,在不同的inD数据上能做到参数的可复用性。而上采样是要大于0的数,在论文里我采用了0.5。
引入了参数来控制满秩的灵敏度。这个方法其实在CORAL的原论文中有讨论过,即Return of frustratingly easy domain adaptation中,但CV任务里这个参数不敏感,所以固定了1。我在说话人识别中发现调节这个参数是可能带来增益的。
基于以上三点,实现CORAL++(以前我把CORAL++命名是CORALs)能把ood的数据映射到ind中,效果如下:


CORAL++
能看出训练集和无标签开发集从原来交错变为重叠在一起,这在最终的效果上也有较大提升:

总的来说,CORAL++的core idea是抑制滋扰的特征值,高亮关键的特征值。划重点的想法比较朴素,要实现的方式很多,不一定是只能用在无监督迁移学习的背景,在有监督中有am-softmax一类的hard sampling,pooling layer的attention等等都能看到影子。
本文作者

黎荣晋

VoiceAI声扬科技AI中心算法研究员,本科毕业于中南大学,硕士毕业于厦门大学xmuspeech语音组,从事说话人识别、防录音攻击、语音转换等多个领域算法研究,拥有多篇顶会论文和专利。