文章目录
B站地址: 深度学习与人类语言处理
人类语言包含了语音(audio)和文字(text)两种形式。
因此语音和文字的处理都可以看成是自然语言处理。
1. 语音识别概述
语音识别是首先需要将语音转换成对应的向量序列(如:维度为d序列长度为T),而输出则是对应的长度为N的V种不同的文字tokens,在实际识别过程中,识别出来的文本token序列长度往往会小于初始语音序列长度,如图所示:
1.1 Token的表示
Token:常用的Token类型有以下几种:
- Phoneme:发音的基本单位,用于表示当前文本的发音音节,缺点是需要语言学的先验知识,构建token的过程比较复杂,如图所示:
- Grapheme:书写的基本单位,如英文中书写的基本单位是单个字母,以及需要考虑到空格和其他标点符号,中文对应的基本单位是单个文字,中文不需要考虑空格,使用这种token比较考验模型学习上下文关系的能力,如图所示:
- Word:采用词汇作为token,对于英文来说词汇量很大,对于中文来说很难用词汇来对文本进行划分,还有很多其他语言,词汇量十分庞大;
- Morpheme:可以传达意思的最小单位,在英文中如前缀、后缀、词根等都可以作为token,如图所示:
- Bytes:各个符号采用不同的编码后的字节来表示,如图:
2019年在同语音识别相关的100篇语音领域较权威的国际会议文章的token表示采用方式统计如下:
从语音到文本的研究中,生成的文本可以是各种各样的形式,如:
Word Embedding:直接从语音生成对应的word embedding,然后采用生成的词嵌入向量进一步作为网络的输入:
Translation:直接根据语音进行翻译,并最终输出翻译的结果:
Intention Classification:根据输入的语音,判断当前语境下说话人即将进行的活动,并以文本形式输出:
Slot filling:根据语音,提取出语音中的预设的关键信息并以文本形式输出:
1.2 Acoustic Feature
在语音特征的提取过程中,往往是采用滑动窗口对数字语音信号进行遍历,提取其中的数据,如采用长度为25ms的窗口,hop length为10ms,如果当前数字信号的采样频率是16kHz,则25ms的窗口内会包含400个采样点。特征提取过程有三种形式:
采样点:第一种是直接提取窗口内采样点的数值,每个窗口转换成对应的400维的向量,1s的语音信号,会被转换成100帧的数据,即当前特征(1s的语音信号)表示为长度T为100,维度为400的向量表示;
MFCC:对范围内的采样点进行傅立叶变换,并进一步提取倒谱系数,则每一帧的时刻可以对于39维的向量;
filter bank output:也可以是未经log变换,未提取倒谱系数的filter bank output,此时每一帧对于80维的向量。
具体计算是,首先waveform的数字语音信号经过傅立叶变换被转换成频谱图,然后经过频谱图采用不同的滤波器进行处理会得到对应的时序向量表示,再进一步取log以及离散余弦变换,就能够得出最终的MFCC,如图所示:
2019年的语音特征使用情况统计:
现有的语音识别数据库:
2. 语音识别深度学习模型
2.1 Listen,Attend,and Spell(LAS)
Listen:输入为音频特征向量表示,采用编码器进行编码,提取出语音中重要的内容并转换成对应的特征输出,能够去除掉语音中的杂音,提取出与内容本身相关的数据。
其中Encoder可以是双向的RNN,也可以是一维的CNN(可进行重叠)进行特征转换(如图),还可以是self-attention层:
在进行特征处理后,语音信号的downsampling也很重要,相较于图像,语音信号包含的信息量会过多过于复杂,一种方式是根据时间顺序进行数据量的简化,如图:
还可以通过TDNN进行降维,或者采用self-attention进行局部信息处理,从而达到参数减少的目的:
Attention:通过初始化Z结合处理并降维后的特征生成对应的权重
Dot-product Attention:采用矩阵对h和z分别进行预算,使得h和z能够进行点乘运算。
Additive Attention:通过参数调整后将h和z相加,并通过tanh和网络运算计算出对应的权重。
通过
z
0
z_0
z0运算出来的权重会对向量进行加权求和,计算出当前状态下的运算结果
c
0
c_0
c0(Context Vector):
Location-aware attention:计算当前注意力权重时会考虑历史权重信息,并作为计算当前注意力权重的参数之一:
Spell:根据编码后的特征和Attention处理后,就可以进行当前token的预测,预测结果为实验中词汇表每个token的概率组成的向量,当前计算出的
z
1
z_1
z1作为下一个时间点的输入,以此类推进行预测:
训练过程中,将label转换成one-hot向量,同预测结果进行对比计算交叉熵损失:
在训练过程中,考虑加入teacher forcing策略,将前一个时间节点的ground-truth和当前ground-truth都应用到网络中,专注于通过前一个groung-truth生成当前ground-truth的学习过程:
但是LAS无法实现实时的语音识别。
2.2 CTC
CTC中引入空的Token的概念
ø
ø
ø:
因此CTC的训练可以看成:
在实时的声音预测中,是没有label的,因此在训练时无法实现交叉熵损失的计算,因此在无标签时,需要人为制造label,实现token的alignment,穷举所有可能的token情况作为ground-truth用于损失函数的计算:
2.3 RNN-T
在CTC中,当前预测过程时独立的,没有时序数据的影响,为了使得预测过程考虑到时序性,有一种方式就是在预测过程中采用RNN进行处理,这种模型即Recurrent Neural Aligner(RNA):
而RNN-T则是根据一个输入生成多个Token,会忽略掉ø的影响:
2.4 Neural Transducer
Neural Transducer将多个窗口内的向量作为输入,窗口移动步长是固定的,进行预测:
2.5 MoChA
MoChA则是动态的移动窗口,每次输出一个Token:
总结来看上述介绍到的语音识别的深度学习模型如下:
3. 语音识别传统模型
3.1 隐马尔可夫模型
在隐马尔可夫模型(HMM)中,希望模型能够实现在当前特征X下取得真实预测Y结果概率最大,而通过贝叶斯公式可以解析为以下两种分布的计算(和参数Y有关,因此可以不考虑P(X)),分别为:Acoustic Model(HMM)和Language Model,如图所示:
在HMM中的基本单位为states S,从发音的基本单位Phoneme转成Tri-phone,再转成state:
State会被转换成对应的特征X:
在HMM中需要考虑两种概率分布计算,一种是计算从某一个state跳到另一个state的概率,被称为Transition Probability,另一种是计算给定某个state生成某种acoustic feature的概率,被称为Emision Probability,常用GMM(同一个字母如c发音可能不同,cat和chat,因此对应的分布概率就不固定,因此不能用发音的基本单位作为HMM的最小输入,需要细分成state),但是state有很多,部分state出现次数很少,因此无法计算其对应的高斯分布,因此需要假设部分state的高斯分布是一样的,公用同一个GMM模型(Tied-state),最终形成了Subspace GMM,将不同的GMM模型放入概率分布池,每个state从池中选择一个最相近的分布:
有了两种概率分布模型后,需要确定state和acoustic feature的对应关系,进行alignment,则可以计算在当前state下的acoustic feature的概率,即穷举所有的alignment的情况下,生成各种acoustic feature的概率求和:
3.2 Tandem
该方法是将输入的MFCC特征通过DNN自主学习成同label更相关的特征,然后将提取出的特征作为HMM的输入:
3.3 DNN-HMM Hybrid
将HMM中的Emission Probability中的GMM分布换成DNN(或者CNN、LSTM等结构)来代替对应的概率分布模型,如图:
4. Alignment和Language Model
4.1 Alignment
在LAS中是根据特征和标签,网络自动学习预测实现端到端的预测过程。而在CTC和RNN-T这种实时预测的模型中,和HMM一样,需要进行alignment,通过alignment构造特征-和token之间的对应关系,则在特征X的情况下预测成标签Y的概率为穷举所有可能的情况下在,特征X所有可能的对应的alignment的概率和:
其中alignment的方式如下:
在HMM中,alignment是将token进行重复,穷举所有的可能情况:
CTC则可以重复token或者添加空符号,来实现穷举:
RNN-T则是以空来填补位置,且结束位置为空作为终止标志:
4.2 Language Model
- N-gram:生成对应token序列Y的概率分布为各个条件概率相乘的结果,但是当一些没有出现在训练集中的序列出现时,就无法很好的计算该序列对应的概率,因此需要搭配Language Model Smoothing技术,将概率小的序列设定成某个很小的值,避免为0,训练集中没有该序列组合不代表不可能出现:
- Continuous LM:统计token后出现其他token的次数,从而每个token都会对应一个向量,则一个token后接下一个token的次数为
v
⋅
h
v·h
v⋅h,目标就是使得对应相乘的结果和ground-truth越接近越好:
- NN-based LM:采用神经网络代替N-gram语言模型,网络用于学习前一个token情况下生成下一个roken的概率,整个序列以此类推结果相乘获取最终概率:
- RNN-based LM:若N-gram序列过长则参数会很多,因此可以采用RNN来实现训练过程;
LM和LAS怎么结合: