语音识别中的transformer(只用encoder)语言模型理解
语音识别中的transformer(只用encoder)模型:
RNN基础结构:
在RNN当中,tokens是一个一个被喂给模型的。比如在a3的位置,模型要等a1和a2的信息都处理完成后,才可以生成a3。
Attention:
如图,蓝色方框为一个attention模型。在每个位置,例如在a2处产生b2时,attention将会同时看过a1到a4的每个token。此外,每个token生成其对应的输出的过程是同时进行的,计算不需要等待。
Transformer基础结构:
- 1.编码器模块结构:
由N个编码器层堆叠而成
每个编码器层由两个子层连接结构组成
第一个子层连接结构包括一个多头自注意力子层、规范化层和一个残差连接
第二个子层连接结构包括一个前馈全连接子层、规范化层和一个残差连接
- 2.为什么要用Q,K,V:
[KQV详细理解]
- 3.为什么要用多头注意力:
举一个不一定妥帖的例子:当你浏览网页的时候,你可能在颜色方面更加关注深色的文字,而在字体方面会去注意大的、粗体的文字。这里的颜色和字体就是两个不同的表示子空间。同时关注颜色和字体,可以有效定位到网页中强调的内容。使用多头注意力,也就是综合利用各方面的信息/特征。
- 4. Feed-Forward Layer
这里就是将Multi-Head Attention得到的提炼好的向量再投影到一个更大的空间(论文里将空间放大了4倍)在那个大空间里可以更方便地提取需要的信息(使用Relu激活函数),最后再投影回token向量原来的空间
- 5.为什么只用encoder:
考虑音节序列与汉字是一一对应关系,不涉及到序列长度不相等的关系,所以Decoder端并不适合拼音转汉字这种定长序列的处理,因此只选择Transformer的Encoder结构并对其进行适当调整,即在输出部分增加一个全连接层和Softmax层。
vim /espnet/espnet/nets/pytorch_backend/lm/transformer.py
语言模型整体实现音素序列到文字序列的解码过程,建模单元为汉字。在预训练的过程中输入端为带音调的汉语音节序列,经过词嵌入层Embedding转化为对应的词向量,词向量维度为256,并加入位置编码。模型由多个相同的编码模块组成,每一个模块由多头自注意力Multi-Head Attention和一个全连接的前馈神经网络Feed-forward组成,此外每层采用残差之后对该层进行归一化(Layer-Normalization)。经过数据编码层之后先经过多头自注意力模块得到一个加权之后的特征向量,将其送到下一个前馈神经网络模块作为输入,这个全连接有两层,第一层的激活函数是Relu,第二层是一个线性激活层。至此数据在每个模块中计算完毕,其输出作为下一个模块的输入进行相同的计算。本文中多头注力参数heads=2,对编码器使用4层自注意力模块进行堆叠。
- 点赞
- 收藏
- 关注作者
评论(0)