chain model

chain类似马尔科夫,TDNN虽然体现了context,但是前后马尔科夫性。用了bi-gram的phone。

1 chain model相对tdnn变化?
1)准则方面:由帧级别的准则变为一个片段或一段语音的准则
2)数据方面:由于低帧率原因,加入了一些扩充数据的方法
3)网络结构方面:可以跨层连接

2 chain model前端的变化?
HMM tri-phone聚类后变为bi-phone,并且HMM状态之间可以跳跃转移而不是相邻之间,以用来适应后面网络结构的变化。

#

2016年Google发布的Wavenet语音合成系统。

Wavenet的系统架构非常有意思,融合了dilated CNN,残差网络,CTC,LSTM中的门,1*1卷积核等经典结构:

  1. CTC可以说是现在端到端语音识别系统的标配,它解决了文本序列和神经网络模型输出的一对多映射问题,因此可以搭建端到端系统。
  2. 11卷积核的研究最早见于14年的论文Network In Network,后来谷歌在Inception的模型中发扬光大。它的作用是整合多通道信息进行非线性变换,并且可以进行通道升降维(卷积核都有升降维的左右,但11卷积核的优点是参数更少),因此在神经网络模型中可以跳跃链接(见Residual部分,匹配相连层的通道数)。
  3. 残差神经网络结构的核心是将之前的输入跳跃连接到n层后的输出,可以解决深层网络的梯度弥撒问题;Wavenet模型采用分block策略,每个block的输入和输出相加,然后再作为下一个block的输入,每层包含128。
  4. 经典的门结构见于LSTM模型,可以对输入信息进行有效选择,应用在长距离(长时)有效信息相关性的架构中,比如自然语言处理。
  5. dilated CNN模型可以增加卷积核的感受野,利用更长距离的上下文信息:

程序实现中,采用的策略有:

  1. Xavier权值初始化策略;
  2. 每次epoch的数据随机打乱策略;
  3. Batch Normalization策略;
  4. 因为硬件资源GPU的限制,目前只实现了3个block,每个block包含五层dilated卷积层;
  5. 采用Adam参数学习策略。

扩展阅读

目前主流的语音识别系统普遍采用基于深度神经网络和隐马尔可夫(Deep Neural Networks-Hidden Markov Model,DNN-HMM)的声学模型,其模型结构如图 1所示。声学模型的输入是传统的语音波形经过加窗、分帧,然后提取出来的频谱特征,如 PLP, MFCC 和 FBK等。而模型的输出一般采用不同粒度的声学建模单元,例如单音素 (mono-phone)、单音素状态、绑定的音素状态 (tri-phonestate) 等。从输入到输出之间可以采用不同的神经网络结构,将输入的声学特征映射得到不同输出建模单元的后验概率,然后再结合HMM进行解码得到最终的识别结果。

最早采用的网络结构是前馈全连接神经网路(Feedforward Fully-connected Neural Networks, FNN)。FNN实现固定输入到固定输出的一对一映射,其存在的缺陷是没法有效利用语音信号内在的长时相关性信息。一种改进的方案是采用基于长短时记忆单元(Long-Short Term Memory,LSTM)的循环神经网络(Recurrent Neural Networks,RNN)。LSTM-RNN通过隐层的循环反馈连接,可以将历史信息存储在隐层的节点中,从而可以有效地利用语音信号的长时相关性。

【语言模型】- 综述

基础

RNN CNN的发展

lstm
cudnn-lstm
sru

softmax的发展

语言模型发展(增量介绍)

  1. Class-Based n-gram Models of Natural Language(1992), Peter F. Brown et al. [pdf]
  2. An estimate for an upper bound for the entropy of English (1992), [pdf] 神经概率语言模型的第一篇论文,使用了WordNet作为先验知识;
  3. An empirical study of smoothing techniques for language modeling(1996), Stanley F. Chen et al. [pdf]
  4. A Neural Probabilistic Language Model(2000), Yoshua Bengio et al. [pdf]
  5. A new statistical approach to Chinese Pinyin input(2000), Zheng Chen et al. [pdf]
  6. A Neural Probabilistic Language Model(2003), Yoshua Bengio et al. [pdf]
  7. Hierarchical probabilistic neural network language model(2005) [pdf] 在【2】的基础上将词汇分层得到的,优化了算法的时间复杂度;
  8. Discriminative n-gram language modeling(2007), Brian Roark et al. [pdf]
  9. Three new graphical models for statistical language modelling (2007) Hinton et al. [pdf]
  10. A scalable hierarchical distributed language model(2009) Hinton et al. [pdf] 在【9】的基础上将词汇分层得到
  11. Neural Network Language Model for Chinese Pinyin Input Method Engine(2015), S Chen et al. [pdf]
  12. Efficient Training and Evaluation of Recurrent Neural Network Language Models for Automatic Speech Recognition(2016), Xie Chen et al. [pdf]
  13. Exploring the limits of language modeling(2016), R Jozefowicz et al. [pdf]
  14. On the State of the Art of Evaluation in Neural Language Models(2016), G Melis et al. [pdf]

ngram

分类汇总

按照粒度

  • char-based model
  • subword-based model - no OOV rate, smaller model size and better speed.
    • Subword Language Modeling with Neural Networks.
  • word-based model
  • phrase-based model

加速 - softmax

对损失函数的近似方法

加速 - rnn cell

  • vanila rnn
  • lstm
  • gru
  • qusi-rnn
  • sru

nnlm

经典/传统 rnnlm

正则化约束

subword - lm

char - lm

-

  • faster-rnnlm

lm应用

模型融合

rescore策略

其他trick

  • oov的penalty
    -

参考

latendy controlled 的 BLSTM

必须要等到一句话说完了才开始去做解码,得到结果,就造成说完这句话后要等很久才能拿到结果,这当然是坏处,但为什么大家还是那么着迷呢,因为好处是精度特别高,准确程度高。

我们做的工作就是能够把识别的延迟降下来,使得它能够在边说话就边解码,而不是像以前一样,要等到这句话结束后才能够进行解码,达到一个既快又好的效果。

参考: 15 年的时候,阿里 latendy controlled 的 BLSTM 模型,叫 LC-BLSTM 模型

Low frame rate latendy controlled 的 BLSTM

原来语音识别的帧率大约是 100 帧每秒,每秒钟要计算100个 frame,运算量不容忽视,所以我们去年有一个方法叫 Low frame rate,把 100 帧每秒的速率,降到三分之一,相当于同样是 1 秒钟的语音,处理起来只需要原来运算量的三分之一了。同时保证了跟以前一样甚至更好的精度。

声学模型

语音识别有一个重要的模型叫声学模型,就是来模拟a,o,e,b,p,m,f 是怎么发音的,这个也是提高语音识别准确率的重要手段。

research

CLDNN:
NIN:

第一个前沿问题是如何构建更有效的序列到序列(Sequence-to-Sequence)直接转换的模型,目前最佳的解决方案是把 CTC 与
Attention 结合起来,CTC有持续信息,可根据后面的语音信号生成词,这有助于
Attention生成更好的表达,两者结合比CTC、Attention各自训练效果更好,所以是一个1+1大于2的结果。

当前主流

LSTM、CNN并未占工程主流。没有超过Kaldi最有模型TDNN+chain。(不靠谱的回答)

NPM 与Yarn

Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。它的目的是解决这些团队使用 npm 面临的少数问题,即:

  • 安装的时候无法保证速度/一致性
  • 安全问题,因为 npm 安装时允许运行代码

npm

npm是Node.js的包管理工具(package manager)。
为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,再使用,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。

更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。

npm已经在Node.js安装的时候顺带装好了

对比其他包管理器

  • npm在不使用-g参数时,默认把package安装在当前目录的node_modules下,不会污染系统环境
  • pip虽然可以指定安装目录,但是如果要换目录安装,你还需要更新配置文件(麻烦)。python的包安装要不污染环境,需要其它的工具实现。这样也有优势,可以共享,不占用磁盘空间。
    • 对于pip的使用,可以在virtualenv建立的虚拟环境下安装包,不会污染环境
  • package.json的写起来比setup.py爽……

npm和nodejs的关系

npm是nodejs的包管理工具,npm随nodejs一同安装 (从 Node.js 0.6.3 开始,npm 集成到了 Node.js 的安装包里面)

两者的关系相当于 pip -> python 或 gem -> ruby 或
maven 和 Java 之间的关系

npm与npx

如果你把NPM升级到最新版本,npm@5.2.0,可能会发现,它会安装一个新的包npx。

npx是一个工具,旨在提高从npm注册表使用软件包的体验 ,npm使得它非常容易地安装和管理托管在注册表上的依赖项,npx使得使用CLI工具和其他托管在注册表。它大大简化了一些事情,到目前为止,如何安装npx:

Yarn vs npm: 功能差异

扩展阅读

TDNN时延神经网络

CNN是受语音信号处理中时延神经网络(TDNN)影响而发明的。

1989年
本篇的大部分内容都来自关于TDNN原始文献【1】的理解和整理。该文写与1989年,在识别”B”, “D”, “G”三个浊音中得到98.5%的准确率,高于HMM的93.7%。是CNN的先驱。

简介

时延神经网络(Time delay neural network, TDNN)是一种多层神经网络,主要用来

  1. 区分平移不变的特征
  2. 在每一层建模上下文信息
  1. using a 3 layer arrangement of simple computing units, a hierarchy can be constructed that allows for the formation of arbitrary nonlinear decision surfaces.

模型

设计思想

  1. 要有多层,而且每层的units之间要有充分的交互
    1.

输入特征拼起来。前后10帧。另外一个思路:把DNN每一层之间建立一个联系,下一层的输入,不仅由上一层当前时刻输出,还把上一层前后输出都考虑。采用拼接的方式,增加了模型复杂度,可以拆分成两个矩阵。类似LSTM。

模型架构

TDNN 的 units 独立于时间位移(i.e. sequence position)识别特征,通常用于组建一个更大的模式识别系统。例如,将连续的音频转换为分类号的音素(phoneme)标签 stream 来做语音识别。

一个输入信号用延迟的复制s增强(augmented)作为其他输入,神经网络是时移不变的,因为它没有内部状态。

相关进展

TDNN+chain-model。。

16年,povey在kaldi的nnet3中增加chain-model。

FAQ

DNN网络可以用1维卷积实现吗?

把输入序列当成16通道1xn的图片即可。

扩展阅读

【深度学习-RNN系列】RNN的变种 以及提高RNN训练速度的多种方法

最受欢迎的两个循环单元是长短期记忆(LSTM)和门控循环单元(GRU),两者都可以将先前的记忆存储在隐藏状态,并使用门控机制来确定应该在何种程度将先前的记忆应与当前的输入结合。但是,由于其循环的结构,RNN不能并行计算。因此,训练RNN需要花费大量时间,这限制了学术研究和工业应用。

为了解决这个问题,一些学者尝试在NLP领域使用卷积神经网络(CNN)来代替RNN。但是,CNN无法获得序列的顺序信息,而顺序信息在NLP任务中非常重要。

线性激活函数

简介

瓶颈

  1. 训练速度
  2. 模型收敛 (梯度消失、弥散)

针对LSTM结构的加速策略

  • 合并input gate和forget gate:GRU、SRU
  • 合并cell state和hidden state: GRU、
  • 分割成多个子序列来实现并行化 SRNN。它在不改变循环单元的情况下,能够比标准RNN快得多
    -

针对模型收敛的优化

  • LSTM
  • shortcut

TOD

SRU+slice。有必要吗?貌似没必要了。SRU中计算