- 博客(141)
- 收藏
- 关注
原创 自监督预训练(三)wav2vec 2.0原理剖析
一、整体流程二、feature encoder理解Conv1dnn.Conv1d(in_channels=5, out_channels=20, kernel_size=3, stride=2)假设输入input=(batch, in_channels, in_len)batch=1in_channels=5,对应向量大小,比如word embeddingin_len=10,对应word的个数cnn内部kernel=(in_channels, kernel_size)=(5,3),相当
2021-04-17 09:36:52
19634
6
原创 自监督预训练(二) 语音部分
一、Predictive Coding系列CPC[4][8]Contrastive Predictive Coding包含三部分:编码网络多层CNN,将输入wave进行降采样,映射为隐层表示zt=genc(xt)z_t=g_{enc}(x_t)zt=genc(xt)自回归网络多层GRU,从隐层表示提取context信息,ct=gar(z≤t)c_t=g_{ar}(z_{\le t})ct=gar(z≤t)打分函数fk(xt+k,ct)=exp(zt+kTWkct)f_k(x_
2021-04-17 09:26:01
3016
3
原创 自监督预训练(一) 语义部分
pre-training技术在NLP领域得到了很好的应用,比如最近几年比较火的谷歌的BERT模型、OpenAI的GPT模型,在NLP各种类型的任务中都取得了很大的突破,大幅刷新了公开数据集的SOTA结果,由于最近在做语音预训练的一些工作,所以最近简单梳理了一下NLP领域pre-training技术的发展脉络。NLP领域的预训练技术主要有两大方向:第一个是基于feature的方法,这个是比较早期的一个做法,代表技术是ELMo技术第二个是基于finetune的方法,这个是最近几年大家都在用的方法,也是这
2021-04-17 09:22:02
2721
原创 重新开始写点东西
好长时间没有更新博客了,有些问题没有来得及回复大家,抱歉!最近国庆节好好反思了一下,感觉技术博客这种总结形式对个人的成长帮助还是蛮大的,所以打算重新捡起来。后面的文章打算在微信公众号上面更新了,更方便实时交流,主要包括以下内容:-平时技术的总结-语音方向的资讯-个人的胡思乱想欢迎大家关注,一起讨论进步...
2020-10-11 17:24:02
364
4
原创 生成对抗网络GAN(二) 语音相关
生成对抗网络GAN(二) 语音相关@(gan)多任务对抗学习[1] 为了获得对噪音的鲁棒性,引入多任务学习,分为三个网络: - 输入网络(绿色),用作特征提取器 - senone输出网络(红色),用作senone分类 - domain输出网络(蓝色),domain这里指噪音的类型,总共17种噪声为了增加对噪音的鲁棒性,增加了GRL层(gradient reversal layer),网络在反
2017-11-12 16:59:33
12124
2
原创 生成对抗网络GAN(一) 简介和变种
基本概念[1]目标函数零和游戏(zero-sum game) 纳什均衡 minimax算法 GAN借鉴了零和游戏的思想,引入生成网络和辨别网络,让两个网络互相博弈,当辨别网络不能辨别数据来自于真实分布还是生成网络的时候,此时的生成网络可以当做一个数据分布到另一个数据分布的转化器。 假设生成网络GG,辨别网络DD,noise数据zz,noise分布pz(z)p_z(z),data数据xx,da
2017-11-12 16:57:56
4264
原创 声学特征转换 kaldi工具
基本工具1.transform-featstransform-feats <transform> <input-feats> <output-feats>其中transform是对应的特征转化矩阵,如果transform是rxfilename形式,认为是speaker-independent;如果transform是rspecifier形式,有-utt2spk选项,认为是per-speaker,没有
2017-11-12 16:32:32
3564
原创 声学特征变换 LDA
含义Linear Discriminant Analysis 线性判别式分析是一种降维算法,特征经过映射以后,在新的空间有最大的类间距离和最小的类内距离;LDA降维的维度跟类别的个数有关 相关公式推导可以参考这篇博客kaldi实现特征降维特征做完splice以后进行降维steps/train_lda_mllt.shacc-lda #使用pdf-id作为类别,获得统计量est-lda #获得ld
2017-11-12 16:31:18
2938
原创 声学特征变换 STC/MLLT
背景Global Semi-tied Covariance (STC)/Maximum Likelihood Linear Transform (MLLT) estimation gmm建模方差使用对角矩阵的前提是假设特征之间相互独立,使用full或者block-diagonal矩阵可以对相关性的特征建模,但是参数增多。为了解决使用这个问题,有两种方法: - feature-space 使用DC
2017-11-12 16:30:15
2775
原创 声学特征变换 fMLLR
含义 当测试数据YY和模型Λx\Lambda_x不匹配的时候,可以通过变换的方式进行匹配[1]: - model-space 也就是Λx\Lambda_x转化为Λy\Lambda_y - feature-space 也就是YY转化为XX其中model-space的变换又可以分为两种: - unconstrained: 均值和方差无关 - constrained: 均值和方差变换是相同的形式
2017-11-12 16:29:24
7361
1
原创 声学特征 ivector
提取流程1.UBMuniversal background model[1] 使用GMM建模,UBM的训练通过EM算法完成,有两种方法: - 所有的数据训练出来一个UBM,需要保证训练数据的均衡 - 训练多个UBM,然后合在一起,比如根据性别分成两个,这样的话可以更有效的利用非均衡数据以及控制最后的UBM。2.supervector 使用MAP adaptation对UBM的高斯进行线性插值
2017-11-12 16:26:38
20019
1
原创 声学特征 PNCC
特点power-normalized cepstral coefficients相比于MFCC特征: - 在噪声和混响场景下提升识别效果,尤其在训练语料是clean语音的时候 - 相比于MFCC,计算量提升34.6%使用pncc相比mfcc,噪声和口音测试集可以得到10-15%的相对提升细节 和MFCC/PLP特征的整体对比如上图filter bank相比于MFCC的triangular fi
2017-11-12 16:25:02
9854
1
原创 声学特征 PLP
PLP的由来Linear prediction可以用来获得语音功率谱P(ω)P(\omega)的全极点模型A(ω)A(\omega),也可以把LP看做获取P(ω)P(\omega)的频谱包络的手段,参考前面的文章 由于LP对待所有频率一视同仁,它不符合人耳的听觉机理,比如人耳对于高于800Hz的感知会下降,对于中间频段更敏感。 为了解决这个问题,Hermansky在进行LP之前修改语音的功率谱P
2017-11-12 16:20:16
5518
原创 语音合成vocoder(五) synthesis
基本概念最小相位脉冲响应[1]可以保证波形在时域上基本不变。 根据频谱包络求出最小相位响应(减弱时域信号的相位失真),然后IFFT还原为语音信号 其中AA跟频谱包络有关合成流程合成[2]分为三步 1. 根据f0f_0确定脉冲的位置 对分帧的频谱插值获得脉冲对应的频谱spectrumspectrum 2. 时域周期信号 2.1 求出频谱包络中周期部分,然后过最小相位脉冲响应 peri
2017-05-17 18:21:40
3715
1
原创 语音合成vocoder(四) aperiodicity参数
基本概念 “aperiodicity” is defined as the power ratio between the speech signal and the aperiodic component of the signal它是跟混合激励有关的参数,为了获得自然的声音,激励源不能只使用周期信号,也需要包含一些非周期信号。一种典型的非周期信号是噪音。PLANTINUM[1]使用exci
2017-05-17 18:19:25
4524
原创 语音合成vocoder(三) spectral envelope参数
基本概念[1] spectral envelope的三个性质: - 包络线连接峰值,并且紧紧包裹幅度谱 - 包络线不能震荡太剧烈,需要平滑 - 包络线不能有corner语音信号可以模拟为激励脉冲序列与声道冲激响应的离散卷积,对于浊音信号 y(t)y(t)可以简化为基音周期为T0T_0脉冲串δ\delta和声道冲激响应h(t)h(t)的卷积: y(t)=h(t)∗∑n=−∞∞δ(t−nT0)
2017-05-17 18:17:51
6456
3
原创 语音合成vocoder(二) 基频参数
基本概念声带每开启和关闭一次的时间就是基音周期(pitch period),倒数即为音频频率(pitch frequency)[1]。 基音频率取决于声带的大小、厚薄、松紧程度,以及声门上下之间的气压差的效应等。最低可达80Hz,最高可达500Hz,老年男性偏低,小孩女性偏高。它反映了声调的变化。常用方法常用的有自相关方法和倒谱方法 Autocorrelation Function(ACF)运算
2017-05-17 18:13:57
5856
原创 语音合成vocoder(一) 概况
Question1: vocoder在合成中的角色???合成概况语音合成主要有波形拼接和参数合成两种方法[1]。波形拼接方法 使用原始语音波形替代参数,合成的语音清晰自然,质量相比于参数合成方法要好。PSOLA(pitch synchronous overlap add)算法可以对拼接单元的韵律特征进行调整。参数合成方法提取参数->HMM建模->合成参数->波形重建 合成中的vocoder
2017-05-17 18:11:22
16537
原创 boost库使用
boost C++库简介 linux下载安装大部分库不需要编译,使用的时候只需要include相应的hpp文件即可,少数库需要提前编译。 假设下载的库文件解压到目录/path/to/boost 使用boost数学库中的expint函数(matlab)#include "boost/math/special_functions/expint.hpp"#include <iostream>int
2017-04-22 08:57:04
2366
原创 端到端语音识别(四) raw wavform
现在的端到端语音识别的第一个“端”大部分还是使用人为设定的语音特征,比如FBANK/PLP,更高级的端到端语音识别输入是语音波形,输出是文字。 近几年也有一些工作是使用神经网络(比如CNN)来学习传统的特征提取步骤,取得了跟使用传统的语音特征相当的结果,当前这部分工作绝大多数还是基于传统的HMM框架来做,还没有跟CTC或者encoder-decoder相结合。CNNGoogle[1]分析了CNN跟
2017-04-20 19:55:13
4648
原创 端到端语音识别(三) Sequence to Sequence and Attention
Historyencoder-decoder2014年Kyunghyun Cho[1]提出了RNN Encoder-Decoder的网络结构,主要用在翻译上面。 encoder将变长的输入序列映射到一个固定长度的向量,decoder将该向量进一步映射到另外一个变长的输出序列,网络结构如下图: encoder: h⟨t⟩=f(h⟨t−1⟩,xt)\boldsymbol h_{\langle
2017-04-20 19:54:00
5658
2
原创 端到端语音识别(二) ctc
相关笔记CTC学习笔记(一) 简介 CTC学习笔记(二) 训练和公式推导 CTC学习笔记(三) 解码 CTC学习笔记(四) 解码-WFST CTC学习笔记(五) eesen训练源码HistoryICML-2006. Graves et al. [1] introduced the connectionist temporal classification (CTC) objective fu
2017-04-20 19:50:11
10178
原创 端到端语音识别(一) 概况
传统方法的局限性[1]HMMMarkovian Assumptionp(qt|q<t)=p(qt|qt−1)p(q_t|q_{<t})=p(q_t|q_{t-1}) 转移概率只跟前一个时刻有关,无法对长时依赖性建模。Conditional Independence Assumptionp(xt|x<t,q≤t)=p(xt|qt)p(x_t|x_{<t}, q_{\leq t})=p(x_t|q_t
2017-04-20 19:49:33
9858
原创 DTW(Dynamic Time Warping)算法
变量定义1.warping function F=c(1),c(2)...c(k)...c(K)F=c(1),c(2)...c(k)...c(K) 其中c(k)=(i(k),j(k))c(k)=(i(k),j(k)) 表示两个语音特征序列A和B之间的映射关系。 2.time-normalized distance D(A,B)=MinF[∑Kk=1d(c(k))⋅w(k)∑Kk=1w(k)
2017-04-20 19:47:29
5305
原创 kaldi 1d-CNN源码
CNN nnet/nnet-convolutional-component.h假设CNN相关参数如下###输入相关参数num_splice=3 #语音数据的左右context,此处左右一帧path_stride=5 #一帧
2017-03-15 21:33:43
2698
原创 kaldi 1d-CNN网络结构
生成nnet.proto utils/nnet/make_cnn_proto.py假设输入26维的fbank,feat_raw_dim=26,splice_num=8,delta_order=0: num_filters1=128 num_filters2=256 pool_size=3 pool_step=3 pool_type=MAX num_splice=8 patch_s
2017-03-15 21:23:40
4890
原创 kaldi feature extraction
支持提取mfcc/plp特征,和HTK特征的主要差别在于默认参数值的设定。使用选项-htk-compat=true以及合适的参数,可以得到htk特征。全局CMVNcompute-cmvn-stats假设帧数为i,特征维度为j,cmvn计算得到两个矩阵: (A1,A2,...,Aj,Aj+1)(A_1, A_2,...,A_j,A_{j+1}) (B1,B2,...,Bj)(B_1, B_2,..
2017-02-25 17:37:53
3877
2
原创 kaldi data preparation
主要两个文件夹data/train和data/langtrain需要手动创建三个文件 - utt2spk - text - wav.scp以上文件需要提前按照C++方式排序export LC_ALL=C然后可以调用steps下的脚本抽特征steps/make_mfcc.sh --nj 20 --cmd "$train_cmd" data/train exp/make_mfcc/train $m
2017-02-25 17:35:09
868
原创 kaldi NFS/GlusterFS
NFS详细介绍参考《鸟哥的LINUX私房菜-服务器架设篇》第十三章 主要流程server端配置安装两个软件:rpcbind和nfs-utils配置/etc/exports<DIR> *(rw,no_root_squash)启动nfs/etc/init.d/rpcbind start/etc/init.d/nfs start/etc/init.d/nfslock startchkco
2017-02-25 17:19:23
1129
原创 kaldi GridEngine
概况queue.ql: gridengine 多机运行 run.ql: 本地多进程,忽略除了JOB以外的其他参数queue.pl test.log echo foo \| awk 's/f/F/';基本格式queue.pl <options> <log-file> <command>其中command对于”|>;”这些shell会解析的符号需要做转义 queue.pl传入参数到qsub参数的对
2017-02-25 17:13:24
4660
原创 Deep Speech笔记
Deep Speech 1 Hannun, A., Case, C., Casper, J., Catanzaro, B., Diamos, G.,Elsen, E., Prenger, R., Satheesh, S., Sengupta, S., Coates,A., et al. (2014a).Deepspeech: Scaling up end-to-end speech recogn
2017-02-03 18:20:07
10763
原创 神经网络-CNN结构和语音识别应用
一、基本结构入门介绍:https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/ 参考deep learning. Ian Goodfellow的chapter9 cross-correlation: S(i,j)=(I∗K)(i,j)=∑M∑NI(i+m,j+n)K(m,n)S(i,j)=(I*K)(i,j)=\sum_M
2017-01-23 21:46:23
22970
5
原创 kaldi mmi/bmmi/mpe/smbr训练及源码
训练流程make_denlats.sh 产生1gram语言模型对应的解码网络nnet-latgen-faster产生denominator lattice,作为smbr训练的分母,充当竞争路径的作用align.sh 根据标注的reference作为G构建WFST解码获得最优路径,产生每一帧对齐的最好结果numerator alignment,作为smbr训练的分子,充当标准路径的作用g
2017-01-23 19:53:24
4218
原创 kaldi lattice
概况两种lattice结构Lattice结构FST的形式,weight包括两部分(graph cost和acoustic cost),输入是transition-ids,输出是words。 其中weight的graph cost包含LM+transition+pronunciation三部分。CompactLattice结构和lattice相似,区别在于它是接收机,输入和输出一样(都是words)
2017-01-23 19:52:26
8061
1
原创 kaldi 神经网络
overview type author CPU/GPU feature nnet1 Karel GPU单卡训练 使用pre-training,使用early stopping nnet2 Dan 支持多GPU训练,以及多CPU多线程 使用固定epoch个数,最后几个epoch参数平均 nnet3 Dan 是nnet2的扩展 支持更多的网
2017-01-23 19:50:58
5477
原创 神经网络-LFR model
CLDNN[1]不同的网络结构有不同的优势 - CNN擅长减少频率偏移 - LSTM擅长对时序信号进行建模 - DNN可以对特征做更高阶的抽象,更容易进行分类 CLDNN依次将CNN/LSTM/DNN进行串联组合成一个新的网络,相当于依次进行频域变化/时域关联/特征抽象,相比于单一的LSTM网络,可以获得性能的提升。delay constraint[2]对ctc模型来讲,在数据帧和输出l
2016-12-02 21:14:27
3496
原创 神经网络-pnorm
发展历史1.bagging算法Leo Breiman[1]在1994年提出了bagging算法,给定一个大小为 n的训练集D,Bagging算法从中均匀、有放回地选出 m个大小为 n’的子集DiD_{i},作为新的训练集。在这m个训练集上使用分类、回归等算法,则可得到m个模型,再通过取平均值、取多数票等方法,即可得到Bagging的结果。2.dropoutHinton[2]在2012年提出了drop
2016-12-02 21:12:08
4098
原创 arm平台和相关的矩阵运算库
一、arm平台ARM(Acorn RISC Machine,后改为Advanced RISC Machine)是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。类比于服务端的X86,其他的架构还有MIPS/PowerPC/DSP。差异参考这篇博文arm处理器架构 包括ARMv5/ARMv6/ARMv7-A/ARMv8-A等型号,对应的指令集和性能不同arm内核ARM在
2016-11-24 21:07:17
7041
原创 lstm(三) 模型压缩lstmp
lstmp结构对于传统的lstm而言 it=δ(Wixxt+Wimmt−1+Wicct−1+bi)i_t=\delta(W_{ix}x_t+W_{im}m_{t-1}+W_{ic}c_{t-1}+b_i) ft=δ(Wfxxt+Wfmmt−1+Wfcct−1+bi)f_t=\delta(W_{fx}x_t+W_{fm}m_{t-1}+W_{fc}c_{t-1}+b_i) ct=ft⊙ct−1+
2016-11-24 21:05:19
8407
原创 CTC学习笔记(五) eesen训练源码
essen源码参考https://github.com/yajiemiao/eesen,这里简单说一下涉及到训练前后向的核心算法源码实现。 以单句训练为准(多句并行类似),用到的变量 变量 含义 phones_num 最后一层输出节点个数,对应于|phones|+1 labels_num 一句话对应的标注扩展blank以后的个数,比如”123”扩展为”b1b2b3b” f
2016-11-24 20:58:58
6187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人