1. why sequence models?
序列模型是监督学习的一种,也就是其输入数据是带标签的。
如图给出了几个典型的序列模型的应用,如语音识别、音乐生成(输入可以为空,输出是时序的)、情感分析、DNA序列分析、机器翻译、视频行为识别、人名实体识别等,其特点是输入或输入或者输入输出是时序的。
2. Notation数学符号
下面以一个人名实体识别为例讲述表示符号,给出一句话X,识别里面所有的人名,为了使说明简单,这里的输出Y只简单标识每个单词是否为人名,这种表示方式并不是很好,有一些复杂的输出方式可以指出一个人名从哪里开始到哪里结束。
上图输入中有9个单词,那么第一步就是要把单词划分开,表示如下:
x<t> x < t > :表示第t个单词;
Tx T x :表示输入的单词总数,这里 Tx=9 T x = 9 ;
y<t> y < t > :为第t个单词的输出;
Ty T y :为输出总数,,这里 Ty=9 T y = 9 ;
以上是对单个样本的表示,若有i个样本的话,第i个样本表示如下:
x(i)<t> x ( i ) < t > : 表示第i个样本的第t个单词;
T(i)x T x ( i ) :表示第i个样本的输入的单词总数;
y(i)<t> y ( i ) < t > :为第i个版本的第t个单词的输出;
T(i)y T y ( i ) :为第i个样本的输出总数;
如何表示一个单词?
1. 首先建立一个词汇表vocabulary,也就是将表示方法中所有要用到的词列成一列
如下图,建立一个长度为10,000的词表,这对实际中的NLP来说太小了,商用中的词表有的三五万,也有的几十万甚至百万,这里仅用作说明的例子;
2. 用one-hot向量来表示单词
也就是每个单词用一个和词表长度一样的向量来表示,向量中除了这个单词所在位置为1,其余都为0,所以称之为one-hot。
如果遇到不在词表中的词,那么可以创建一个新的标记,叫做unknown Word,用UNK表示,之后会详细讨论这个问题。
3.Recurrent Neural Network Model循环序列模型
1)为什么不用标准神经网络?
实验发现用标准神经网络效果不好,主要原因有两点:
输入和输出在不同的样本中可以有不同的长度,即使能找到输入输出的最大值,对某个样本来说填充来使他达到最大长度,但是这种表示方式依然不够好;
标准神经网络不能讲从文本不同位置学习到的特征共享,比如在第一个位置学习到了Harry是一个人名,如果Harry再次出现在其他位置的时候,不能自动识别它是一个人名,还需要重新识别
2)什么是循环神经网络?
首先,将第一个单词 x<1> x < 1 > 输入神经网络,并预测 y^<1> y ^ < 1 > ;
然后,将第二个单词 x<2> x < 2 > 输入神经网络,同时将第一步计算的激活值 a<1> a < 1 > 也输入到神经网络,共同作用并预测 y^<2> y ^ < 2 > ;
重复第二步,直至把所有单词都训练完毕。
注意,由于在第一步之前没有任何输入,所以一般人为设置一个 a<0> a < 0 > 和 x<1> x < 1 > 一起输入到神经网络中, a<0> a < 0 > 最常见的初始化为0,不过也有人任意初始化。
在这个结构中输入和输出数目相等,如果输入和输出不等的话,网络结构还需要改变。
参数:
循环神经网络中的参数是共享的,从输入到隐藏层的参数表示为 wax w a x ,水平方向激活值向下一层输入的参数表示为 <