这几年明显感觉做分离增强这块的人越来越多了,一方面学术研究上逐渐成为了一个热点,不断的有新的模型和思路产生,一方面工业界想将技术落到具体的产品中,也必将面临实际声学环境中的各种噪声,说话人干扰问题。我曾经从新人的角度,考虑如下三个因素,推荐对语音感兴趣的人从前端开始着手:1)相比识别任务,没有特征提取,解码,对齐这些繁杂的操作,门槛相对低了很多;2)前端处理的结果,可以通过样例直观的感受到,相比识别WER和解码结果这种反馈度不高的结果,趣味性和吸引力要高很多;3)对数据的依赖较低,识别需要一定量的数据积累,抄本也需要依赖人工标注,而增强分离这些任务,做一些toy的东西,用开源的数据和噪声仿真就行了。当然这些是基于目前主流的深度学习方法所下的论断,在此之前,声学,信号等领域的大佬们已经用他们的才智对抗这些问题很多年了,形成了非常完备的理论系统,如果要深入那些方法的话,数学统计理论的要求自然不可与我们现在单纯训模型并论。

阅读全文 »

本篇文章主要说一下多通道的Hybrid声学模型。Google在CLDNN之后,大约在2015年到2017年之间围绕远场语音识别,做了一系列 [1-6] 的工作,相关的技术也被用在了Google Home [7] 上。17年的时候我看了其中的一部分,觉得工作做的很漂亮,一骑绝尘,一枝独秀。原因主要有两方面,其一是多通道声学模型是一个比较新的概念,当时很少见其他高校和公司有相关的工作,基本还停留在神经网络的架构阶段,其二是Google的产出速度非常惊人,而且思路明确,环环相扣。17年之后,Google甩手开始做端到端(E2E)方面的工作,学术界和工业界也开始紧紧跟着不放,之前的工作关注度相比之下,明显低了很多。最近看到Amazon在icassp2019上有了两篇文章 [8-9],再加上面试百度时他们聊了一些神经网络前端的事(后来确实花功夫宣传了),我就想聊一下这方面的工作和认识。

阅读全文 »

今天谈一下多通道分离算法里面一个比较成熟的系列,spatial clustering。在声源分布比较分散的情况下,这个算法有着稳定的表现,mask估计也比较准确。NTT在这块做了很多工作,在CHiME3到CHiME5的历次测评中,此算法的合理使用均拿到了十分不错的结果。因为聚类算法都是无监督的,所以相比用网络去估计mask,它的一个好处是不存在数据层面的mismatch,加上复杂度上不算高,online实现也比较简单,因此我觉得它是一套具有优势和潜力的算法。

阅读全文 »

最近陆续有了一些看了本博客的读者加微信讨论一些问题,我才发现原来自己挂的这个玩意竟然是有人看的。为什么这么说呢,因为从本站点挂到云上起,我就没有在任何社交平台上公开过本博客的链接,即使是github上host的repo我也是设置成私有的状态,所以访客们能够来到这个站点,看来是google在背后起作用了。从内容上说,本站点上的东西并不全面,很多时候是自己看了或者接触了点新的东西,心血来潮想写点什么。所以这里面就存在一个问题,我最初的接触或者理解可能是肤浅的,所以写下的东西未必准确到位,存在误导读者的风险。这也是我不想把这里的内容发布到公共平台上的原因之一。如果看官有什么问题的话,可以加我微信讨论,这一点上我还是非常欢迎的(当然伸手党等人除外)。

阅读全文 »

区别于以频域的标签(比如谱特征,时频掩码等)作为学习目标再通过iSTFT将结果转成时域信号的方法,一般会把直接以目标语音为参考,在时域上计算对应代价函数并优化网络的方法称为端到端(End-to-End,E2E)的方法。现在看来,做增强/分离的文章里面已经很少见频域+掩码预测/语谱回归的方法了,基本就是拿来做个基线的参考。而不断被提出的模型或者架构,也多是跟随这种E2E的思路,否则很难在性能上有所突破。本篇文章会介绍几种在分离领域中直观简单的实现方法。

阅读全文 »

去年四月份的时候,写了一些对这个repo的想法。最初并没有什么明确的目标,只是单纯的想在kaldi上写一些东西。我那时正在做enhancement相关的任务,最先在python+pytorch环境下跑出的结果,觉得在kaldi上做也不是很难,就想花一些功夫迁一下,把增强任务中一些固定的程序流程集成。最先是从最基本的(i)STFT开始,着手写了一些speech重构,谱,相位特征的一些基础命令。后来因为在nnet3上用Quadratic Loss训练mask模型的效果不错,就增加了一部分训练脚本,mask计算和后处理separation的代码,形成了一个围绕single-channel任务的工具闭环。增强相关的任务,包括特征提取,mask计算,网络训练,语音重构都可以在kaldi上做,验证一些数据的效果也是很快的(记得当时半天就把CHiME4上的一些任务做了重现)。所以当时README上写的就是”Speech Enhancement Toolkit based on Kaldi”。

阅读全文 »

本篇文章说一下波束形成中,对目标信号的协方差矩阵进行秩1的约束(Rank1 Constrained)这一操作。背后的原理之前在导向向量估计的PCA方法中已经进行了介绍,即理想情况下,单一方向声源的协方差矩阵秩$\mathbf{R}_x$为1:目标信号可以写成$\mathbf{s}_{t,f} = \mathbf{d}_f s_{t,f}$的形式,其中$\mathbf{d}_f$为导向向量,则$\mathbf{R}_f^s = r_s \mathbf{d}_f \mathbf{d}_f^H$的秩为1。由于实际估计的$\mathbf{R}_x$并不满足这一条件,因此可以用一个秩1的矩阵近似,这一过程可以用特征值分解来进行,对应的主特征向量便起到了导向向量的作用,可以用其作为估计。所以我们实际在使用含有导向向量的MVDR表达式,并用PCA方法进行估计时,背后其实已经使用了该原理。

阅读全文 »

考虑到后面的时间可能不会继续深入声学前端这块了,因此想着近期补充一些前面一直想写,没写的东西,趁着年底也算是做一些小结。这次先谈一谈前端中一个比较重要的概念,spatial。

在文献中,spatial和spectral成一对。以前做的声学模型,输入大多采用单通道,从谱上衍生的的声学特征,mfcc/fbank等等,因为这种情况下,谱上的特征区分性更加明显。但是如果可以获取麦克风阵列的多路输入,channel之间的delay就是一个非常重要的提示信息,也是所谓spatial的体现,Source Localization和Spatial Filter就是两个非常典型的应用。相比delay而言,channel之间在谱上的差别通常不会很大,因此,在传统的一些方法中,很少有使用inter-channel的spectral特征进行建模的方法,而以spatial的特征替代。

阅读全文 »

上一篇关于beamformer的文章应该是一年之前,刚入门的时候看了,理解有些粗浅,现在就一些细节上的问题(也是上篇文章中没有提及的地方)补充一些理解,后面实践加深会继续补充。

导向向量估计

首先,导向向量$\mathbf{d}_f$的估计,$\mathbf{d}_f$描述的是声源的方位信息,对波束形成器的指向性十分关键。目前常见的方法是用协方差矩阵$\mathbf{R}_{xx}$的主特征值进行估计,背后的假设在理想情况下,方向性声源的$\mathbf{R}_{xx}^\theta$是个秩为1的矩阵,即可以表示为:

阅读全文 »

这篇文章简单说一下AuxIVA算法,前段时间接触并实现了一下,有些结论和体会,在这里做一下小结。

BSS(Blind Source/Speech/Signal Separation)问题中根据信号混合的方式,可以分为instantaneous/convolutive两种,前者仅仅是简单的线性叠加,和convolutive不同,对信号源到麦克风之间的冲击响应不加以建模;如果根据信号源数目和观测(麦克风)数目划分,有determined和underdetermined两种,前者表示观测信道足够(大于等于信号源数目),后者对应数量不足的情况。因此,BSS问题可以组合成四种case,比较显而易见,underdetermined/convolutive的情况最为复杂。

BSS的解决方法,比较主流的是ICA[2]及其衍生算法,比如IVA[3],TRINICON[4]等等。相比Frequency-ICA,IVA的优点是不需要解决frequency上的置换问题,显得十分简洁。

阅读全文 »