1 基础模型
例如将法语翻译成英语,构建的翻译网络分成两步。1)建立一个网络,称之为encoder network,是一个RNN结构。RNN结构中的单元可以是GRU,也可以是LSTM。每个时刻只向该网络输入一个法语单词;当接收完所有单词之后,这个人NN网络会输出一个向量来代表这个输入序列。2)接着建立一个网络,称之为decoder network。每个时刻输出一个英文单词,直到它输出句子的结尾标记。
将图片生成关于图片的描述类似于上述过程。
2 选择最可能的句子
对翻译出来的法语,需要我们选出最好的最可能的翻译句子,即使得一下的条件概率最大化:
为什么不用greedy search贪婪搜索呢?
贪婪搜索就是逐词的找到其概率最大的那个词,通过第一个词来确定第二个。但是这样会导致局部最优,从整体上看可能并不是我们想要的结果。
3 集束搜索
总共分成3步。1)选出第一个词。首先在decoder端的第一个输出,是在所有词库中选择出概率最大的3个词做为起始词。即p(y<1>|x)最大。2)针对每个起始词,都在decoder端的第二个时刻输出一个所有词库里的最优词,使该词与第一个词的联合条件概率最大,即p(y<1>,y<2>|x)最大。3)依次继续寻找联合条件概率最好的第三个词,以此类推。
4 改进集束搜索
4.1 归一化
改造概率函数,求概率的均值,进行归一化。用a=x来控制归一化的程度。
4.2 选择B
一般选择B=10, 科研中为了精度000或者3000。可按照实际情况进行设置。
5 集束搜索误差分析
分别计算翻译对的句子(y表示)和翻译错的句子(y^表示)的条件概率,即比较p(y|x)与p(y^|x)的大小,从而来判断错误的预测应该归咎于RNN还是beam search
(1)若p(y|x) > p(y^|x),则说明RNN并没有错,是beam search的错。
(1)若p(y|x) <= p(y^|x),则说明beam search并没有错,是RNN的错。
6 Bleu score
翻译模型有时可能会输出多个都很正确的结果,通常会使用bleu score来评估。
我们可以通过一元匹配和二元匹配来计算bleu score。一元是在人工标注中出现的单词的正确率,二元是在人工标注中出现二元组的正确率。
用Pn表示Bleu score on n-grams only.分别计算处机器翻译的句子的P1,P2,P3,P4;然后求均值得到平均的Bleu score。还需要在均值项上乘以一个惩罚因子BP(brevity penalty)。
7 注意力模型
对于很长的句子,我们希望RNN不要记忆太长的东西,而像人类一样一部分一部分的翻译,这样就引出了注意力机制,帮助决定将注意力放在多长的上下文上。
输入记为S<0>,第一个时刻S<1>的输出应该是jane,为了使这个输出更准确,需要去回看一下输入的第一个单词或者与第一个单词相邻的单词是啥。这个回看的过程就是注意力的过程,用a<1,1>表示第一个输出需要给第一个输入多少注意力,翻译的过程不是词的一对一,因此可能第二个输入也会影响到第一个输出,因此用a<1,2>表示预测第一个词需要给多少注意力给第二个输入的单词。
a<t,t'>代表着预测的单词需要给多少注意力给输入单词的激活项a。
8 Speech Recognition语音识别
语音识别就是根据音频x,任务是要自动生成文本y。
1 采用上述类似的注意力模型:
2 CTC损失函数来做语音识别
9 触发字检测
这个类似于小米,百度的智能音箱。说出关键词会做指定的操作。解决触发文字检测的一种方法,预先设置检测标签为0,然后随着音频的输入,当检测到激活关键词的时候,就将标签置为1。