• TF-mask & Spectral Gain (噪声抑制算法中的Gain)
  • AEC Method (补缺,待定)
  • Streaming ASR (看起来关注的人比较多)

前面写了一篇文章介绍了一下自己一直在维护的APS项目,完稿的时候我还没有公开代码,这是因为当时发现,我在一些public的数据集上训练的ASR模型和paper里已有的结果存在比较大的gap。ASR部分的代码写的时间是比较早的,不过那时都是在实验室的一些内部数据上做训练和测试,一直没有在Librispeech,WSJ这些集子上看看结果,所以此前并没有意识在这个问题。为了找到根源所在,缩小差距,从去年年底开始,我陆续花了一些功夫一一核对了问题可能存在的环节,包括特征,模型,解码,评估等等。虽然最后也没有找到什么明显的bug。但是在这个过程中我把自己一度重点怀疑的环节:解码的逻辑翻来覆去check了好几遍,这篇文章就算做个小总结吧。

阅读全文 »

本篇文章拖了一段时间,说一下几个常见的复矩阵操作问题。在传统的信号处理方法中,频域是定义在复数域($\mathbb{C}$)中的,所以我们经常会在算法中看到复数矩阵上的诸如求逆,求行列式,特征值分解等操作,比如adaptive beamforming(求逆,特征值),WPE(求逆)和CGMM(求逆,行列式)等等。最近几年,基于NN的前后端联合建模这块大家做的比较多,多通道上要结合自适应波束,WPE,或者使用一些最大似然估计的无监督损失函数,就需要将上述操作包络到网络中参与训练。因此如何在仅支持实数操作的DL框架(比如PyTorch)中进行这些复矩阵操作且保证梯度可传就成为了一个首先要被解决的问题。

阅读全文 »

在过去的接近两年时间内,我断断续续的在维护着一个我自己称之为APS的项目。本篇文章用来记录一下其背后的开发历程和相关感悟。

2019年三四月的时候,我在腾讯的实习即将结束,一方面是出于找补遗憾,另一方面是有实验室的需求,我着手做了一些E2E ASR的实验。这里花一点笔墨解释一下遗憾的源由。从2017年下半年开始,我的主研究方向(就是手头工作)逐渐的过渡到前端方面,后端声学模型就只是停留在使用kaldi训练hybrid的模型和看一些paper上。而在此之前,E2E ASR这条线上我只成功的做过CTC的相关实验,attention的一些方法,在做过一些调研(可以参考之前的文章)之后(受限于当时的编码能力和认知程度),完成编码过后的我并没有得到正常的结果,遗憾因此产生(也算是给自己留了一个坑吧)。经过一年多的学习和实践的锻炼之后,到了2019年初这个时间点,我觉得自己在各方面能力有了一些进步(我又可以了),所以是时候开始填上ASR这个小缺憾了,便开始了最初的编码。

阅读全文 »

最近几年语音的各项任务上也开始用上transformer的模型了,前段时间大家在谈论conformer的时候,我看了一下Transformer-XL里面提出的相对位置编码表示方法。原论文我在开始看的时候感觉符号层面有些混乱,向量和矩阵容易有些分不清,因此自己在后续实现的时候花了一些功夫思考和整理。本篇文章用于记录一下我自己对使用相对位置编码时,self-attention计算的相关分析和理解。

首先做一下符号化,本文统一用大写表示矩阵,小写表示向量,为了简便起见均没有加粗,向量默认遵从列向量规范。query,key,value对应的投影(变换)矩阵定义为$W^Q, W^K, W^V$,通过线性运算(矩阵乘法)得到参与dot attention计算的$Q, K, V$。在self-attention(也就是encoder里面的一般用法)里面,query,key和value值是相同的,这里用$X$统一表示,即:

阅读全文 »

硕士毕业之前看到了一些关于语音分离上进行无监督训练的文章,觉得很有意思,想在本篇文章中小结一下。语音前端的包含的诸多任务,比如增强,分离,去混,去回声等等,核心都在于解决如何从观测信号中生成目标信号这一问题。传统算法会根据不同的声学场景下进行数学建模,产生信号模型,之后引入一些假设先验进行求解。Deep Learning兴起之后,方法论逐渐变成了从人为生成的大量成对数据中使用网络直接进行信号生成或者中间变量的估计,比如mask等等。在此之下,了解求解问题对应的信号模型的另一个作用就是指导我们生成匹配的成对数据,用于网络训练,这一过程也叫数据模拟(data simulation)。人为的数据生成有至少两个显而易见的优势,一是理论上无穷的训练样本,二是可以拿到ground truth的参考信号(否则无法进行网络训练这一监督学习的过程)。而相对应的,也会遗留下一个所谓data mismatch的问题,即产品中模型需要在实录环境下工作,而训练阶段网络仅仅只见到了人工模拟的数据。对于语音前端中的诸多问题,我们很难从实录的信号中获取信号模型里对应的目标信号(这里不同于ASR的抄本,无法做人工标记),比如增强任务中的降噪语音,分离任务中的单说话人,去混任务中的early part等等。因此理论上如果能缓解数据层面的mismatch,是有希望继续提升前端模型在实际场景中的表现的。

阅读全文 »

WPE作为经典的去混算法,在20世纪初由日本NTT的研究人员提出,并在之后被陆续发展,近些年随着声学前端研究热度的提升,远场语音识别需求的增加以及各类测评竞赛的举办,WPE在工业界和学术界得到了广泛的应用。Google在为Google Home做多通道声学建模的一系列工作中,也包含了WPE在online下对声学模型的优化工作。目前关于WPE有两个方向的工作已经陆续完善,一是信号上做joint WPE和beamforming,separation的工作,这个在WPE提出之后就已经有学者开始了研究,二是和deep learning 相结合,使用神经网络估计WPE step中依赖的统计量,之后做去混或者和后续其他模块联合训练 ,比如增强分离模型,声学模型等等。本篇文章打算先梳理一下WPE相关的一些知识,之后谈目前STOA的DNN support WPE的思路。

阅读全文 »

今天来总结一下在我过去的一些任务上用到的一些一维卷积技巧,主要是depthwise和transposed conv1d。之所以写一篇文章是觉得存在两方面的好处,其一是可以加深对现代神经网络架构中卷积操作逻辑的理解,二是能提升编码和运算上的效率,让代码本身更加简洁。

阅读全文 »

2019年我只对setk贡献了一些边边角角的东西,没有大的方面的改动。当初写的时候,也多是出于我自身实践上的一些需求,才将常见的操作以脚本的形式固定。但是随着技术的进步,工具链的完善和自身认识的加深,以前的某些需求,在我有了更加高效和便捷的实现方式之后,便没有继续在setk中进行集成。本篇文章主要记录一下过去一年的更新和随之产生的一些想法。

先结合这个工具集合主要包含的部分说一下2019年的更新。1)数据IO和可视化,2)数据预处理,3)数据仿真,4)特征提取,5)评估与后处理。

阅读全文 »

由于新冠疫情,学校开学延迟,因此短期内大家还是要维持远程办公的状态。我这边的需求,一是访问实验室内部的wiki, 二是计算资源,也就是服务器。但是由于学校的vpn的问题,连接经常处于极不稳定的状态,因此十分影响心态和效率。本篇文章简单记录了一下如何使用frp跳过学校vpn,远程连接学校服务器。

阅读全文 »