一、Many to one

  • 情感分析
      存在许多有标签的句子,将这些句子使用RNN读一遍,然后取RNN得最后一个输出作为预测情感的结果进行分类。

循环神经网络应用|深度学习(李宏毅)(六)

  • 关键词提取
      使用RNN将多篇带有关键词标签的文章读一遍,然后把最后一个最后一个输出拿出来做attention,然后将结果放到前馈网络中去,最后输出文章的关键词。

循环神经网络应用|深度学习(李宏毅)(六)

二、Many to Many

  • Many to Many (输出较短)
      在语音辨识中,可以将声音讯号(Acoustic Features)按照每一固定时间(如0.1s)划分为多个输入向量得到一个序列,然后使用RNN训练该序列,网络会输出RNN对应标签中的哪一个字。

循环神经网络应用|深度学习(李宏毅)(六)

  将网络输出进行trimming就可以得到该输出对应的标签为“好棒”。

循环神经网络应用|深度学习(李宏毅)(六)

  但是这样网络仍然存在问题,网络无法区分“好棒”和“好棒棒”。CTC(Connectionist Temporal Classification)可以很好地解决这个问题,CTC添加了一个额外的符号“φ”来代表“null”,使用CTC进行识别的结果如下:

循环神经网络应用|深度学习(李宏毅)(六)

  由于网络的输出比语音的label要长,无法确定每一帧与字符之间的对应关系,因此使用枚举的方式,将所有的可能都当做正确来进行训练。

循环神经网络应用|深度学习(李宏毅)(六)

  以下为使用CTC进行语音识别的一个例子:

循环神经网络应用|深度学习(李宏毅)(六)

  • Many to Many (输出长度无限制)
      这一部分指的是输入和输出都是序列,但是具有不同的长度(Sequence to sequence learning)。
  1. 机器翻译
      在机器翻译中,可以将一种语言的序列丢进RNN中,然后取RNN得最后一个输出当做输入继续训练,然后将每一个输出当做输入继续训练就可以得到另一种语言的一个序列:

循环神经网络应用|深度学习(李宏毅)(六)

  但是这样的话不能确定什么时候停下来结束翻译,因此加入一种字符“===” (断)来表示翻译结束:

循环神经网络应用|深度学习(李宏毅)(六)

  1. 语法解析

循环神经网络应用|深度学习(李宏毅)(六)

  使用RNN来训练一些句子使其输出句子的语法序列,训练得到的模型就可以用来解析句子的语法结构:

循环神经网络应用|深度学习(李宏毅)(六)

  1. 文本自编码器
      对文本的特征提取可以使用RNN来训练文本的自编码器,通过自编码器可以学习到文本的特征信息。自编码器的Encoder将一个句子中的词的词向量作为输入,然后将最后一个输出作为输入传入Decoder,使Decoder输出一个一模一样的句子出来,因此Encoder的输出就包含了句子的特征信息。

循环神经网络应用|深度学习(李宏毅)(六)

  另外一个文本自编码器的例子是一个四层的LSTM,这个自编码器的Encoder将句子分别获得不同的向量,然后将得到的向量继续编码得到整个document的向量。自编码器的Decoder先将Encoder的输出还原成句子的向量,然后在继续Decode还原会原来的文本内容。

循环神经网络应用|深度学习(李宏毅)(六)

  1. 语音自编码器
      RNN自编码器也可以使用语音信号作为输入,也就成为了语音自编码器,该网络可以将语音信号转换成固定长度的向量。在将编码得到的向量进行可视化以后可以看到具有相同或相似单词的声音讯号会距离比较近:

循环神经网络应用|深度学习(李宏毅)(六)

  语音自编码器可以用来进行语音搜索、听歌识曲这样的工作,假如有一个语音数据库,可以将数据库中的语音数据划分为多个segment,然后编码这些数据的segment得到其编码向量,在进行搜索时就可以将搜索的声音讯号获得其编码向量来比较与数据库中数据的编码向量的相似度即可。其过程如下:

循环神经网络应用|深度学习(李宏毅)(六)

  其网络结构如下:

循环神经网络应用|深度学习(李宏毅)(六)

  经过自编码器编码的语音讯号通常具有一定的规律,比如在下图中将一个单词的“f”换成“n”会使得编码向量向同样的方向变化:

循环神经网络应用|深度学习(李宏毅)(六)

  1. 聊天机器人

  使用RNN还可以用来做聊天机器人,RNN接收问题序列作为输入,输出对应的回答:

循环神经网络应用|深度学习(李宏毅)(六)

三、Attention-based Model

  • Attention-based Model介绍
      除了RNN还有另一种使用记忆的模型叫做Attention-based Model,这个模型可以看做RNN的一种进阶版本。
      在Attention-based Model中,机器会存储“记忆”在memory中,当外界需要获取某些信息时机器会组织存储的记忆来给出对应的回答:

循环神经网络应用|深度学习(李宏毅)(六)

  在该模型中会有一个DNN或者RNN作为中央处理器来接收输入并且根据输入来操纵一个Reading Head Controller,从而从机器的memory中获取对应的数据:

循环神经网络应用|深度学习(李宏毅)(六)

  Attention-based Model还有一个进阶的版本,在这个模型中DNN或RNN还会操纵一个Writing Head Controller,从而可以实现将数据存储到对应的memory中,这个模型就是神经图灵机(Neural Turing Machine):

循环神经网络应用|深度学习(李宏毅)(六)

  • 阅读理解(Reading Comprehension)
      Attention-based Model可以用来做阅读理解(Reading Comprehension),模型会将资料进行语义分析得到语义的向量,当一个Query输入到中央处理器中时,中央处理器就会多次移动探头获取相应的信息来进行响应:

循环神经网络应用|深度学习(李宏毅)(六)

  下图为使用Attention-based Model进行的一次实验,其中Hop1、Hop2、Hop3代表时间,蓝色区块代表探头的位置,最终根据问题机器给出了正确的回答:

循环神经网络应用|深度学习(李宏毅)(六)

  • 图像问答(Visual Question Answering)
      训练数据中的图像会经过CNN得到对应的向量,当外界的Query输入到中央处理器中时,中央处理器就会多次移动探头获取相应的信息来回答输入的图像由什么组成的问题:

循环神经网络应用|深度学习(李宏毅)(六)

  其架构如下:

循环神经网络应用|深度学习(李宏毅)(六)

  • 语音问答(Speech Question Answering)
      这部分的实验使用的是托福听力考试的资料,模型会将训练数据的语音进行语音识别然后对识别的结果进行语音分析得到memory中存储的记忆,模型也会对问题进行语义分析然后从memory中找到对应的答案:

循环神经网络应用|深度学习(李宏毅)(六)

  下图实验结果中前五个是不使用神经网络的朴素方法,可以看到使用神经网络的方法得到的准确率是相对比较高的:

循环神经网络应用|深度学习(李宏毅)(六)