- 作者:韩信子@ShowMeAI
- 教程地址:http://www.showmeai.tech/tutorials/35
- 本文地址:http://www.showmeai.tech/article-detail/227
- 申明:版权所有,转载请分割平台与作者并注明出处
珍藏ShowMeAI查看更多精彩内容
本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整顿所得,对应的课程视频能够在这里查看。
引言
在ShowMeAI前一篇文章 自然语言解决与词嵌入 中咱们对以下内容进行了介绍:
- 词嵌入与迁徙学习/类比推理
- 词嵌入学习办法
- 神经概率语言模型
- word2vec(skip-gram与CBOW)
- GloVe
- 情感剖析
- 词嵌入打消偏见
本篇介绍自然语言解决中对于序列模型的高级常识,包含Sequence to sequence序列到序列模型和注意力机制。
1.Seq2Seq 模型
1.1 Seq2Seq构造
Seq2Seq(Sequence-to-Sequence)模型可能利用于机器翻译、语音辨认等各种序列到序列的转换问题。一个 Seq2Seq 模型蕴含编码器(Encoder)和解码器(Decoder)两局部,它们通常是两个不同的 RNN。
如图,为Seq2Seq模型典型的机器翻译利用,这个Seq2Seq网络中,蕴含编码网络(encoder network)和解码网络(decoder network)两个RNN模型子结构,其中encoder编码网络将输出语句编码为一个特征向量,传递给decoder解码网络,实现翻译输入。
提出 Seq2Seq 模型的相干论文:
Sutskever et al., 2014. Sequence to sequence learning with neural networks
Cho et al., 2014. Learning phrase representaions using RNN encoder-decoder for statistical machine translation
1.2 Seq2Seq相似构造利用
这种编码器-解码器的构造也能够用于图像形容(Image captioning)工作。这个工作要依据给定的图像,「翻译」出对应的内容形容。
要实现上述工作,能够这么做:
① 第1步:将图片输出到CNN(例如预训练好的AlexNet/VGG/Inception),去掉最初的Bleu层,则倒数第2层这个全连贯层的输入,就相当于图片的特征向量(编码向量),表征了图片特色信息。
② 第2步:将上述过程失去的图像信息表征向量输出至RNN,即decoder解码网络中,进行解码翻译输入。
图像形容的相干论文:
Mao et. al., 2014. Deep captioning with multimodal recurrent neural networks
Vinyals et. al., 2014. Show and tell: Neural image caption generator
Karpathy and Fei Fei, 2015. Deep visual-semantic alignments for generating image descriptions
2.贪婪搜寻解码
2.1 机器翻译解码过程
下面提到的简略机器翻译模型与ShowMeAI后面文章 序列模型与RNN网络 提到的语言模型相似,只是用编码器的输入作为解码器第一个工夫步的输出(而非0向量)。因而机器翻译的过程其实相当于建设一个条件语言模型。
对应上图,是一个典型的机器翻译编码解码过程。解码器进行预测输入词的过程,后果可能有好有坏。咱们心愿找到能使条件概率最大化的翻译,即
\( arg \ max_{y^{\left \langle 1 \right \rangle}, \dots , y^{\left \langle T_y \right \rangle}}P(y^{\left \langle 1 \right \rangle}, \dots , y^{\left \langle T_y \right \rangle} \mid x)\)
2.2 贪婪搜寻
如下为吴恩达老师课程中的一个例子,翻译成英文有多个翻译候选:
Jane visite I'Afrique en septembre.
→ Jane is visiting Africa in September.
→ Jane is going to be visiting Africa in September.
→ In September, Jane will visit Africa.
→ Her African friend welcomed Jane in September.
最间接能想到的解决办法是贪心搜寻(greedy search):贪婪搜寻依据条件,解码器的每个工夫步都抉择概率最高的单词作为翻译输入。
例如,首先依据输出语句,找到第一个翻译的单词「Jane」,而后再找第二个单词「is」,再持续找第三个单词「visiting」,以此类推。
2.3 贪婪搜寻毛病
但上述贪婪搜寻办法存在一些毛病。
① 因为贪婪搜寻每次只抉择概率最大的一个词,没有思考该单词前后关系,概率抉择上有可能会出错。
- 例如,下面翻译语句中,第三个单词「going」比「visiting」更常见,模型很可能会谬误地抉择了「going」,而错失最佳翻译语句。
② 贪婪搜寻总体运算老本也比拟高,运算效率不高。
优化贪婪搜寻最常应用的算法是集束搜寻(Beam Search)。
3.集束搜寻解码
3.1 集束搜寻办法
相比于贪婪搜寻每次都抉择预测概率最大的词,集束搜寻(Beam Search)会每次保留预测概率最大的\( B\) 个单词(\( B\) 示意取概率最大的词个数,为可调超参数)。
3.2 集束搜寻示例
上面针对前一节的机器翻译例子,取\( B=3\) 做一个开展解说:
① 依据集束搜寻,首先从词汇表中找出翻译的第1个单词概率最大的B个预测单词。对应到上例中是:in,jane,september。
概率示意为:\( P(\hat {y}^{\left \langle 1 \right \rangle} \mid x)\)
② 再别离以in,jane,september为条件,计算每个词汇表单词作为预测第二个单词的概率。从中抉择概率最大的3个作为第二个单词的预测值,失去:in september,jane is,jane visits。
概率示意为:\( P(\hat {y}^{\left \langle 2 \right \rangle} \mid x,\hat {y}^{\left \langle 1 \right \rangle})\) 。
到这时,失去的前两个单词的3种状况的概率为:
$$P(\hat {y}^{\left \langle 1 \right \rangle},\hat {y}^{\left \langle 2 \right \rangle} \mid x)=P(\hat {y}^{\left \langle 1 \right \rangle} \mid x)\cdot P(\hat {y}^{\left \langle 2 \right \rangle} \mid x,\hat {y}^{\left \langle 1 \right \rangle})$$
③ 用同样的办法预测第三个单词。
别离以in september,jane is,jane visits为条件,计算每个词汇表单词作为预测第三个单词的概率。从中抉择概率最大的3个作为第三个单词的预测值,失去:in september jane,jane is visiting,jane visits africa。
概率示意为:\( P(\hat {y}^{\left \langle 3 \right \rangle} \mid x,\hat {y}^{\left \langle 1 \right \rangle},\hat {y}^{\left \langle 2 \right \rangle})\) 。
到这时,失去的前三个单词的3种状况的概率为:
$$P(\hat {y}^{\left \langle 1 \right \rangle},\hat {y}^{\left \langle 2 \right \rangle},\hat {y}^{\left \langle 3 \right \rangle} \mid x)=P(\hat {y}^{\left \langle 1 \right \rangle} \mid x)\cdot P(\hat {y}^{\left \langle 2 \right \rangle} \mid x,\hat {y}^{\left \langle 1 \right \rangle})\cdot P(\hat {y}^{\left \langle 3 \right \rangle} \mid x,\hat {y}^{\left \langle 1 \right \rangle},\hat {y}^{\left \langle 2 \right \rangle})$$
④ 依照同样的办法以此类推,每次都取概率最大的三种预测。最初,抉择概率最大的那一组作为最终的翻译语句。
Jane is visiting Africa in September.
特地的,如果参数\( B=1\) ,就等同于贪婪搜寻。理论利用中,依据效率要求、计算资源和准确度要求来设置\( B\) 的取值。个别\( B\) 越大,机器翻译越精确,但计算复杂度也会越高。
3.3 优化:长度标准化
长度标准化(Length Normalization)是对集束搜索算法的优化形式。咱们察看公式
$$arg max \prod^{T_y}_{t=1} P(\hat {y}^{\left \langle t \right \rangle} \mid x, \hat {y}^{\left \langle 1 \right \rangle}, \dots , \hat {y}^{\left \langle t-1 \right \rangle})$$
当很多个小于1的概率值相乘后,会造成数值下溢(Numerical Underflow),即失去的后果将会是一个电脑不能准确示意的极小浮点数。一种解决办法是取\( log\) 值,并进行标准化:
$$arg \ max \frac{1}{T_y^{\alpha}} \sum^{T_y}_{t=1} logP(\hat {y}^{\left \langle t \right \rangle} \mid x, \hat {y}^{\left \langle 1 \right \rangle}, \dots , \hat {y}^{\left \langle t-1 \right \rangle})$$
公式中,\( T_y\) 代表翻译后果的单词数量,\( \alpha\) 是超参数归一化因子可调整(若\( \alpha=1\) ,则齐全进行长度归一化;若\( \alpha=0\) ,则不进行长度归一化。个别令\( \alpha=0.7\) )。标准化用于缩小对输入长的后果的惩办(因为翻译后果个别没有长度限度)。
后面也探讨到了:集束宽\( B\) 的取值影响后果:
- 较大的\( B\) 值意味着可能更好的后果和微小的计算成本。
- 较小的\( B\) 值代表较小的计算成本和可能体现较差的后果。
通常来说,\( B\) 能够依据理论需要选取一个10以下的值。
与广度优先搜寻和深度优先搜寻等准确的查找算法相比,集束搜索算法运行速度更快,然而不能保障肯定找到最精确的翻译后果。
3.4 误差剖析
集束搜寻是一种启发式搜索算法,有可能找不到最优的翻译后果。当Seq2Seq模型+集束搜寻构建机器翻译等利用没有输入最佳后果时,咱们能够通过误差剖析来判断问题呈现在RNN模型还是集束搜索算法中。
例如,对于下述两个由人工和算法失去的翻译后果:
\( (y^\ast)\) Human:\ Jane\ visits\ Africa\ in\ September.\
\( (\hat{y})\) Algorithm:\ Jane\ visited\ Africa\ last\ September.\
这个例子中,咱们发现翻译后果的前三个单词差别不大,以其作为解码器前三个工夫步的输出,失去第四个工夫步的条件概率\( P(y^\ast \mid x)\) 和\( P(\hat{y} \mid x)\) ,比拟其大小,咱们有如下的论断:
- 如果\( P(y^\ast \mid x) > P(\hat {y} \mid x)\) ,阐明是集束搜索算法呈现谬误,没有抉择到概率最大的词;
- 如果\( P(y^\ast \mid x) \le P(\hat {y} \mid x)\) ,阐明是RNN模型的成果不佳,预测的第四个词为「in」的概率小于「last」。
咱们能够构建表格对谬误的case进行汇总剖析,综合判断谬误呈现在RNN模型还是集束搜索算法中。
如果谬误呈现在集束搜索算法中,能够思考增大集束宽\( B\) ;否则,须要进一步剖析,看是须要正则化、更多数据或是尝试一个不同的网络结构。
4.Bleu 得分
4.1 Bleu计算形式
上述咱们始终以机器翻译为例给大家做解说,上面咱们介绍一下机器翻译的评估办法,咱们会用Bleu(Bilingual Evaluation Understudy)得分评估机器翻译的品质,核心思想是「机器翻译的后果越靠近于人工翻译,则评分越高」。
原始的Bleu计算方法将机器翻译后果中每个单词在人工翻译中呈现的次数作为分子,机器翻译后果总词数作为分母,计算失去,但这种简略粗犷的形式容易呈现谬误。例如,机器翻译后果全副选定高频呈现,又恰好在人工翻译后果中的词(比方上图的the),则依照上述办法失去的Bleu为1,显然有误。
改良的计算方法是将每个单词在人工翻译后果中呈现的次数作为分子,在机器翻译后果中呈现的次数作为分母。
4.2 从unigram到n-gram
上述统计,以单个词为单位的汇合称为unigram(一元组)。咱们能够以两两间断的词为单位统计,叫做bigram(二元组):对每个二元组,能够统计其在机器翻译后果(\( count\) )和人工翻译后果(\( count_{clip}\) )呈现的次数,计算Bleu得分。
同样的形式,还能够统计以\( n\) 个单词为单位的汇合,称为n-gram(多元组),基于n-gram的Blue得分计算公式为:
$$p_n = \frac{\sum_{\text{n-gram} \in \hat {y}}count_{clip}(\text{n-gram})}{\sum_{\text{n-gram} \in \hat {y}}count(\text{n-gram})}$$
对\( N \) 个\( p_n\) 进行几何加权均匀失去:
$$p_{ave} = exp(\frac{1}{N}\sum^N_{i=1}log^{p_n})$$
4.3 长度惩办
Bleu存在的1个问题是:当机器翻译后果比拟短时,比拟容易能失去更大的精确度分值(容易了解,因为输入的大部分词可能都呈现在人工翻译后果中)。
对长度问题的改良办法之一,是设置一个最佳匹配长度(Best Match Length),若机器翻译的后果短于该最佳匹配长度,则须要承受简短惩办(Brevity Penalty,BP):
$$BP = \begin{cases} 1, &MT\_length \ge BM\_length \\ exp(1 - \frac{MT\_length}{BM\_length}), &MT\_length \lt BM\_length \end{cases}$$
优化调整过后的Bleu得分为:
$$Blue = BP \times exp(\frac{1}{N}\sum^N_{i=1}log^{p_n})$$
相干论文:Papineni et. al., 2002. A method for automatic evaluation of machine translation
5.注意力模型
5.1 注意力机制
回到机器翻译问题,有时候翻译的句子很长,如果对整个语句输出RNN的编码网络和解码网络进行翻译,成果会不佳。具体表现是Bleu score会随着单词数目减少而逐步升高,如下图所示。
一种解决长句的办法是将长语句分段,每次只对其一部分进行翻译。人工翻译也是采纳这样的办法,高效精确。
这种「部分聚焦」的思维,对应到深度学习中十分重要的注意力机制(attention mechanism)。对应的模型叫做注意力模型(attention model)。
5.2 注意力模型(Attention Model)
下图为注意力模型的一个示例。模型的底层是一个双向循环神经网络(BRNN),「双向」是指的每个工夫步的激活都蕴含前向流传和反向流传产生的激活后果:
\( a^{\langle t\prime \rangle} = ({\overrightarrow a}^{\langle t\prime \rangle}, {\overleftarrow a}^{\langle t\prime \rangle})\)
模型的顶层是一个「多对多」构造的循环神经网络,咱们以第\( t\) 个工夫步为例,它的输出蕴含:
① 同级网络前一个工夫步的激活\( s^{\left \langle t-1 \right \rangle}\) 、输入\( y^{\left \langle t-1 \right \rangle}\)
② 底层BRNN网络多个工夫步的激活 \( c\) ,其中\( c\) 计算形式如下(留神分辨\( \alpha\) 和\( a\) ):\( c^{\left \langle t \right \rangle} = \sum_{\left \langle t \prime \right \rangle}\alpha^{ \left \langle t,t\prime \right \rangle }a^{\left \langle t \prime \right \rangle}\)
咱们对下面的公式开展解说:
① 参数\( \alpha^{\left \langle t,t\prime \right \rangle}\) 代表着\( y^{\left \langle t \right \rangle}\) 对\( a^{\left \langle t \prime \right \rangle}\) 的「注意力」,总和为\( 1\) (体现调配到不同局部的注意力比重):
$$\sum_{\left \langle t \prime \right \rangle}\alpha^{\left \langle t,t\prime \right \rangle} = 1$$
- \( \alpha^{\left \langle t,t\prime \right \rangle}\) 的计算是应用Bleu失去的,即:\( \alpha^{\left \langle t,t\prime \right \rangle} = \frac{exp(e^{\left \langle t,t\prime \right \rangle})}{\sum^{T_x}_{\left \langle t \prime =1 \right \rangle}exp(e^{\left \langle t,t\prime \right \rangle})}\) ,所以也肯定能保障总和为1。
② 上式中的\( e^{\left \langle t,t\prime \right \rangle}\) 是通过神经网络学习失去的。假如输出为\( s^{\left \langle t-1 \right \rangle}\) 和\( a^{\left \langle t,t\prime \right \rangle}\) ,则能够通过下图这样一个简略的神经网络计算失去:
注意力模型在其余畛域,例如图像捕获方面也有利用。它的一个毛病是工夫复杂度较高。
Attention model能无效解决很多机器翻译问题,例如上面的工夫格局归一化:
July 20th 1969 → 1969-07-20
23 April, 1564 → 1564-04-23
下图将注意力权重可视化:
上图中,色彩越白示意注意力权重越大,色彩越深示意权重越小。可见,输入语句单词与其输出语句单词对应地位的注意力权重较大,即对角线左近。
相干论文:
Bahdanau et. al., 2014. Neural machine translation by jointly learning to align and translate
Xu et. al., 2015. Show, Attend and Tell: Neural Image Caption Generation with Visual Attention:将注意力模型利用到图像标注中
6.语音辨认
语音辨认是另外一个十分典型的NLP序列问题,在语音辨认工作中,输出是一段音频片段,输入是文本。咱们有时会把信号转化为频域信号,也就是声谱图(spectrogram),再借助于RNN模型进行辨认。
以前的语音识别系统通过语言学家人工设计的音素(Phonemes)来构建,音素指的是一种语言中能区别两个词的最小语音单位。当初的端到端系统中,用深度学习就能够实现输出音频,间接输入文本。
要应用深度学习训练牢靠的语音识别系统,要依赖海量的数据。在语音辨认的学术研究中,要用到长度超过3000小时的音频数据;如果是商用零碎,那么超过一万小时是最根本的要求。
语音识别系统能够用注意力模型来构建,一个简略的图例如下:
如果上例中,语音辨认的输出为10s语音信号序列,采样率为100Hz,则语音长度为1000。而翻译的语句通常很短,例如「the quick brown fox」,蕴含19个字符。咱们会发现\( T_x\) 与\( T_y\) 差异很大。为了让\( T_x=T_y\) ,能够对输入做一些解决,比方对相应字符反复,比方退出一些空白(blank),如下:
上式中,下划线 示意空白,\( \sqcup\) 示意两个单词之间的空字符。这种写法的一个基本准则是没有被空白符 宰割的反复字符将被折叠到一起,即示意一个字符。
通过退出了反复字符和空白符、空字符,能够让输入长度也达到1000,即\( T_x=T_y\) 。这种模型被称为CTC(Connectionist temporal classification):
相干论文:Graves et al., 2006. Connectionist Temporal Classification: Labeling unsegmented sequence data with recurrent neural networks
7.触发词检测
触发词检测(Trigger Word Detection)罕用于各种智能设施,通过约定的触发词能够语音唤醒设施。例如Amazon Echo的触发词是「Alexa」,小米音箱的触发词是「小爱同学」,百度DuerOS的触发词是「小度你好」,Apple Siri的触发词是「Hey Siri」。
咱们能够应用RNN模型来构建触发词检测零碎。如下图的输出语音中蕴含一些触发词。RNN检测到触发字后输入1,非触发字输入0。这样训练的RNN模型就能实现触发字检测。
上述模型的毛病是,训练样本语音大部分片段都是非触发词,只有多数的触发词局部,即正负样本分布不均。
一种解决办法如下图所示,对触发词左近的数据处理,将左近的RNN输入都调整为1。这样简略粗犷解决后,相当于减少了正样本。
参考资料
- Sutskever et al., 2014. Sequence to sequence learning with neural networks
- Cho et al., 2014. Learning phrase representaions using RNN encoder-decoder for statistical machine translation
- Mao et. al., 2014. Deep captioning with multimodal recurrent neural networks
- Vinyals et. al., 2014. Show and tell: Neural image caption generator
- Karpathy and Fei Fei, 2015. Deep visual-semantic alignments for generating image descriptions
- Papineni et. al., 2002. A method for automatic evaluation of machine translation
- Bahdanau et. al., 2014. Neural machine translation by jointly learning to align and translate
- Xu et. al., 2015. Show, Attend and Tell: Neural Image Caption Generation with Visual Attention
- Graves et al., 2006. Connectionist Temporal Classification: Labeling unsegmented sequence data with recurrent neural networks
ShowMeAI系列教程举荐
- 图解Python编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解AI数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程
- 图解机器学习算法:从入门到精通系列教程
- 机器学习实战:手把手教你玩转机器学习系列
- 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
举荐文章
- 深度学习教程 | 深度学习概论
- 深度学习教程 | 神经网络根底
- 深度学习教程 | 浅层神经网络
- 深度学习教程 | 深层神经网络
- 深度学习教程 | 深度学习的实用层面
- 深度学习教程 | 神经网络优化算法
- 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架
- 深度学习教程 | AI利用实际策略(上)
- 深度学习教程 | AI利用实际策略(下)
- 深度学习教程 | 卷积神经网络解读
- 深度学习教程 | 经典CNN网络实例详解
- 深度学习教程 | CNN利用:指标检测
- 深度学习教程 | CNN利用:人脸识别和神经格调转换
- 深度学习教程 | 序列模型与RNN网络
- 深度学习教程 | 自然语言解决与词嵌入
- 深度学习教程 | Seq2seq序列模型和注意力机制