sp5.3 Sequence models & Attention mechanism

seq2seq模型:比如翻译 可分成编码器(Encoder)和译码器(Decoder)两部分
前面这个RNN (可以是GRU或LSTM )输出一个向量 然后 后面部分 每次输出一个翻译后的单词
别忘这也是监督学习啊 有翻译过的真实句子 和后面解码网路算loss
 
类似的img2seq图像描述 还是卷积输出一个向量
最后的Softmax换成一个RNN作为译码器
 
 
 
机器翻译模型 和之前的语言模型相似 不同在于以前a0开头 现在有了编码网络 就是原句输入进去
机器翻译其实是一个输入为法语的条件下,以对应的英语作为输出的语言模型,
所以机器翻译的过程也就相当于建立一个条件语言模型(Conditional Language Model)的过程。
 
 
如何挑选好的翻译
如果随机输出的话 有好有坏,现在要找概率最大那个 利用beam search算法
 
为什么不用贪心算法 贪心是挑选一个词后 继续找第二个最佳的词 一个一个的
这样并不好 我们要的整句话一次性的最佳
 
 
 
利用beam search集束搜索 不会考虑一个结果 而是可以设置 称为束宽考虑几个
其实B=1就是贪婪算法了
1 解码 取前B个概率最大的词 比如这里设为3 束长Bean Width代表译码器中每个时间步的预选单词数量
第一个翻译出的词 取前三个最大概率的 会把结果保存在内存里 这里y1还是个softmax一万维度的
2第二步,分别将三个预选词作为第一个时间步的预测结果y⟨1⟩输入第二个时间步,得到预测结果y^⟨2⟩,也就是条件概率值p(y^⟨2⟩∣x,y⟨1⟩): 别忘了还有前一步的x
这里有三次计算 因为前一步保存翻译出三个词
 
 
第二步选完单词以后 现在有10000*3个项了 ,每个第一步单词对应一万嘛
然后从所有的这三万项里 选出概率相乘最大的前三项 可能是 in septaber jane is jane was
此时第一步的septerber就不保存了 并不是一直三个三个分叉 我们在所有句子当中只要三个而已
现在有三个网络了
 
 
第三步:重复 现在有三个网络了 还是依次softmax输出 然后算整体概率
有可能都集中在第一个网络中 那么后两个都不保存了 永远都是三个网络
 
beam search集束搜索 改进
缺点:
1 当句子太长时候 概率是连乘的 可能会出现数值下溢的问题 计算机精度不够
改进:加个log 里面相乘 就变相加了 而且log函数也是单调增的 最大化条件概率p和 最大化log是一样的
 
2 还会有个问题是 会倾向于输出简短的句子 因为最大化p连乘 是小于1的 越乘越小
log也有这个问题呀 因为log小于1 是负数
改进 :归一化 除单词长度 别忘log最后得负数啊 除以大的数 反而变大了 减少了对输出长的惩罚 长度上还有个α参数
用最下面的式子打分对每个句子
选择宽度B 宽度越大 计算量越大 一般10以下
当B很大的时候几乎没改进了比如设个1000到3000
束搜索也能看启发式搜索 但是不想BFS NFS那样一定能找到结果
束搜索误差分析:判断是RNN(编码器+解码器)模型出现问题 还是束搜索出现问题
单纯增大B宽度可能并没有效果
这里y*作为人工最佳结果
计算P预测值 和P实际值 谁的概率大 当然两者最好也提前长度归一化一下
case1 就是发现P*实际的得分高 说明RNN没问题 因为rnn就是输出概率最大的 是搜索算法不能给你找一个好词
case2 P实际得分比P预测低 说明RNN除了问题
多试几个例子 看到底是哪个出了问题
 
 
 
 
Bleu得分:多个同样好的翻译结果时候 如何评估 Understudy替补演员
BLEU(Bilingual Evaluation Understudy)双语替补评估
设计思想与评判机器翻译好坏的思想一致:机器翻译的结果越接近专业的人工翻译,则评估的分值越高。
 
直接计算机器翻译的每个单词是否出现在原句中 有缺陷 比如例子中全是the
改进 就是 统计参照句子中 每个词最多出现几次 就是个上限分
比如这里the出现两次 机器翻译中的单词从这个the最多只能得2分
 
 
bigrams二元词组(相邻两词)不仅仅根据单个的单词来定义Bleu得分
首先找出全部相邻词次数 和参照句子相邻词作对比 统计下次数
 
P1代表一元词 就是单独一个单词 PN就代表是N相邻词 更好地衡量机器翻译与人工翻译差异
 
BP 简短惩罚 就是惩罚过短的句子
 
 
——————————————————
改进:
注意力模型:因为seq2seq编码解码对于长句子效果差
类比人翻译句子也是一点一点翻译,注意力有限不可能整段全看完一口气翻译全。
之前是一下子全读完然后编码
 
 
 
一个双向RNN在下面接收单词 这个相当于隐藏层 不输出Y了 输出A,另外一个RNN生成翻译
注意力模型不会看完整个句子,而是根据距离给个权重,后面单词对当前影响力小了相当于。
对于第一个输出Jane吧 模型会分配权重给每个单词
1这里α表示权重α <1,n >对于第一个翻译的词 句子中的词对其权重(注意力)
2 α<2,n>表示句子对于第二个翻译的词 下面输入单词的注意力 前一步翻译的第一个单词s1也会影响他
 
 
 
a^t 就是 时间步t 单词的特征值
S表示翻译 上下文C 就是刚才说的 利用注意力机制 传过去的 C1=α^(1,t') 权重* a^t'
t'原句中的每个单词 t翻译出的单词
只看上面的 其实也是一个RNN呀
 
 
注意力那块
相当于一步 的详解 前一步翻译出来的St-1 与下面层 每个单词出来的a1到at合起来(乘的是注意力系数α(t,Tlen))对当前步t产生一个影响C。
上下两个LSTM 下面是个双向的LSTM
 
 
 
 
要注意的是,该模型的运算成本将达到N^3
如何计算注意力α 注意力t'加起来应该是1
这里的注意力α 是由下面的a 和 上面的S共同决定的
 
计算α 通过一个e 本质是softmax 如何算e 通过s和a也用一个神经网络算
取决于上一个翻译出的单词s 缺点是时间复杂度是n3次方
st-1隐藏层 出来的 相当于a
 
 
 
 
应用 图片加标题 时间转换槽 不用写代码 直接自己学习转换
 
 
seq2seq应用 语音识别:
人听到的其实左下图颜色表明强度 横轴时间 纵轴频率
声音原本是空气震动 ---->> 音频预处理产生一个频率的图 颜色表示强度
 
 
 
也可用CTC方法(Connectionist Temporal Classification)损失函数计算方法
由于输入的是音频数据,采用RNN建立的语音识别系统中将包含多个时间步,且整个网络中输出的数量往往是小于输入的数量的(因为比如100赫兹10秒的 其实没几个词 但是样本就是10*100了),也就是说不是每一个时间步都有对于的输出。而CTC的主要优点,是可对没有对齐的数据进行自动对齐。
长度为10s频率为100Hz的语音作为输入 相当于每秒100个样本,则这段语音序列可分为1000个输入,分别输入RNN的时间步中,但是RNN最后输出可不是1000个输出。
因为10秒就说没几个单词吧。
会把重复的折叠起来,也会识别词语词之间空隙。
CTC损失计算方法允许RNN输出一个如图中所示的结果,允许以“空白(Blank)”作为输出的同时,也会识别出词之间存在的“空格(Space)”标记,CTC还将把未被“空白”分隔的重复字符折叠起来。
注意 空格和下划线是不一样的 会把下划线blank之间重复的字母折成一个 选B
 
————————————————————————
触发词检测
想要训练一个触发词检测系统,同样需要有大量的标记好的训练数据。使用RNN训练语音识别系统实现触发词词检测的功能时,可以进行如下图所示的工作:
触发词检测目前没有统一的比较好的算法
对音频输入后 定义标签Y 要是说了触发词 就标记为1 后面一小段也标记为1
缺点是不平衡的训练集 太多0了 只有喊得那个词是1
在以训练的语音数据中输入RNN中,将触发词结束后的一小段序列的标签设置为“1”,以此训练模型对触发词的检测。
 
这里不选CD啊 我们的标签值Y才是01 这里X是对音频预处理过后的样本
 
 
5courses outline

猜你喜欢

转载自www.cnblogs.com/hellodantong/p/9965273.html