tacotron2 & 注意力机制 & self-attention学习

我们在机器翻译、语音识别、语音合成、语音转换等任务中,常常需要对序列数据进行处理,传统的方法不但繁琐且效果有限,目前常见的端到端seq2seq方法很值得学习。

1. 序列到序列

序列到序列最早应用于机器翻译领域,后面推广到语音合成等领域。该模型是针对输入和输出序列长度不相同的情况下,即建模两种不同域的映射关系。

  • 序列到序列包含编码器(encoder)和解码器(decoder)两个部分。编码器和解码器常用LSTM等网络构成,将一个域的序列转换到另一个域的序列。
  • 编码器网络负责接收源句子的embedding并提取特征;解码器网络负责将编码文本解码输出成翻译的语言。这两个过程分别称为编码和解码的过程。
  • 编码器输出编码文本(encoder_out),为decode开始标志位( frame)。在编码器中,所有的字符将embedding成为一个词向量再进行编码。由于解码器(decoder)是一个自回归的过程,对于第一个decoder单元,则使用一个初始化的全零向量()作为解码过程的起始状态。
  • 在这里插入图片描述
    但是LSTM网络在长序列下,序列尾难以关注到序列头部的信息,这无疑局限了机器翻译的性能。为了在翻译过程中,将注意力面向全局,有了注意力机制与序列到序列的结合

2. 注意力机制Attention

(1)why attention?

在Attention诞生之前,已经有CNN和RNN及其变体模型了,那为什么还要引入attention机制?主要有两个方面的原因,如下:

  • 计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
  • 优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离依赖问题,且信息“记忆”能力并不高。

(2)什么是注意力机制?

当我们读一句话时,大脑会首先记住重要的词汇,这样就可以把注意力机制应用到自然语言处理任务中,于是人们就通过借助人脑处理信息过载的方式,提出了Attention机制。
在这里插入图片描述
从本质上理解,Attention就是从大量信息中有筛选出少量重要信息,并聚焦到这些重要信息上,忽略大多不重要的信息。权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

(3)典型的—自注意力机制self-attention

自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。
为什么自注意力模型(self-Attention model)在长距离序列中如此强大?卷积或循环神经网络难道不能处理长距离序列吗?
答:当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络CNN或循环网络RNN进行编码来得到一个相同长度的输出向量序列,无论CNN还是RNN其实都是对变长序列的一种“局部编码”:CNN显然是基于N-gram的局部编码;而对于RNN,由于梯度消失等问题也只能建立短距离依赖。要解决这种短距离依赖的“局部编码”问题,建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一 种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互,另一种方法是使用全连接网络。全连接网络虽然是一种非常直接的建模远距离依赖的模型, 但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。
这时用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(self-attention model)。由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列。

下面看一个例子:
下列句子是我们想要翻译的输入句子:

The animal didn’t cross the street because it was too tired

这个“it”在这个句子是指什么呢?它指的是street还是这个animal呢?

对于我们来说能很简单的判断出来,但是对于机器来说,是很难判断的,self-attention就能够让机器把it和animal联系起来。当模型处理这个单词“it”的时候,自注意力机制会允许“it”与animal,street建立联系。以编码过程为例,随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词(计算注意力得分),帮助模型对本单词更好地进行编码。
在这里插入图片描述
第一步就是从每个单词的词向量中生成三个向量。也就是说对于每个单词,通过网络预处理,生成词嵌入embedding,再分别与三个权重矩阵相乘,生成三个向量:一个查询向量(Query)、一个键向量(Key)和一个值(Value)向量。
在这里插入图片描述
一个简单比喻就是在档案柜中找文件。查询向量q就像一张便利贴,上面写着你正在研究的课题。键向量k像是档案柜中文件夹上贴的标签。当你找到和便利贴上所写相匹配的文件夹时,拿出它,文件夹里的东西便是值向量v。
在这里插入图片描述
将单词的查询向量分别乘以每个文件夹的键向量,得到各个文件夹对应的注意力得分(这里的乘指的是向量点乘,乘积会通过 softmax 函数处理)。
乘积的方式常见的有两种,如下所示:
在这里插入图片描述
注意力得分为A‘:(当然,也可以不用softmax,用relu等)
在这里插入图片描述
最后,将每个文件夹的值向量乘以其对应的注意力得分,然后求和,得到最终自注意力层的输出。
在这里插入图片描述
总结起来就是如下公式:
在这里插入图片描述
例如:
在这里插入图片描述
在当前词的Query向量与同序列其他单词的Key向量和Value向量相乘的过程中,其他词的含义会融入到注意力算出来的Z向量中。其中,Z向量可称之为注意力上下文(attention_context)。每个序列将产生等于序列字符个数的Z向量,而每个Z向量都隐含了整个序列的上下文信息。所谓的注意力机制,正是在当前词向量的生成过程中,渗透进句子的上下文信息。基于不同方式的注意力机制,计算方式不同,渗透进句子信息的侧重点也有所不同。tacotron2中使用的是位置敏感注意力机制,凸显出位置二字。

引入注意力机制的机器翻译流程图:
在这里插入图片描述

3. tacotron2

Tacotron2是由Google Brain 2017年提出来的一个语音合成框架。是一个完整神经网络语音合成方法。模型主要由三部分组成:

  • 声谱预测网络:一个引入注意力机制(attention)的基于循环的Seq2seq的特征预测网络,用于从输入的字符序列预测梅尔频谱的帧序列。
  • 声码器(vocoder):一个WaveNet的修订版,用预测的梅尔频谱帧序列来生成时域波形样本。
  • 中间连接层:使用低层次的声学表征-梅尔频率声谱图来衔接系统的两个部分。
    在这里插入图片描述
    声谱预测网络主要包含一个编码器和一个包含注意力机制的解码器。编码器把字符序列转换成一个隐层表征,解码器接受这个隐层表征用以预测声谱图。

编码器Encoder:

编码器模块包含一个字符嵌入层(Character Embedding),一个3层卷积,一个双向BiLSTM层。

  • 输入字符被编码成512维的字符向量;
  • 然后穿过一个三层卷积,每层卷积包含512个5x1的卷积核,即每个卷积核横跨5个字符,卷积层会对输入的字符序列进行大跨度上下文建模(类似于N-grams),这里使用卷积层获取上下文主要是由于实践中RNN很难捕获长时依赖;卷积层后接批归一化(batch normalization),使用ReLu进行激活;
  • 最后一个卷积层的输出被传送到一个双向的LSTM层用以生成编码特征,这个LSTM包含512个单元(每个方向256个单元)。

解码器Decoder:
在这里插入图片描述
括号内为测试时观测到的特征维度。由于使用的声码器为LPCnet,BFCC维度为36维。以上的Q、K、V向量仅方便理解的粗略划分,请勿较真。可以将tacotron2的注意力机制类比到自注意力机制的计算方式,需要生成三个向量,用于注意力的计算。在训练过程中,Q向量包含了音频与文本的混合信息,K向量包含了累加注意力权重与当前注意力权重之和(位置敏感注意力的精髓所在),累加注意力权重过程中体现了位置信息,有助于防止语音合成过程的错漏字情况,V向量则为encoder输入的编码文本,将在decoder过程中逐步输入。
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值