神经网络自然语言模型的一般化结构形式
一个神经网络自然语言模型当然需要神经网络的结构层次,但是在进入神经网络之前,怎么把单词表示成要输入的词向量,这也是一个非常重要的问题。其实,神经网络语言模型主要分两大部分,第一,输入词向量的表示问题,第二,神经网络结构的选择问题。只要处理好这两方面的问题,剩下的就交给训练了,当然其中还有一些细节。本文所描述的是一个一般化的多层神经网络结构,首先要说明一些标记记号:
假设一个神经网络函数为
再假设,给定一个矩阵
转化单词为特征向量
首先,每一个单词都有一个索引,网络的第一层就是通过一个查询表(lookup table)把单词索引映射为一个特征向量。
对每一个单词
其中,
通过对这些特征向量的连接可以输入到后续的神经网络层中。
扩展到单词的离散特征
更详细地,可以把每个单词向量更细分一下,即每个单词可以由多个离散的特征组成(这个对于英语语言来说,汉语好像没有这个问题)。比如一个单词,它有词根,它的小写的结尾和它大写的开头等特征,由这些特征组成这个单词的特征。
一般来说,假设一个单词由
上面那是一个单词的由多个离散特征向量拼接表示的特征向量。
那么,单词序列
其中,矩阵中的每一列为一个单词的由多个离散特征向量拼接表示的特征向量。
其实,我认为这种离散特征可以不被考虑,因为这些参数都是随机初始化的,并且在传入网络中训练,最后得到的词向量应该都会一样的,可能比较好的是,这种离散化可能提取每个词的词根向量和大小写向量。
神经网络的输入方法
有两种方法把单词向量输入到神经网络中去,一种是基于窗口的方法;另一种是基于句子的方法,也称为卷积方法。
基于窗口的方法
基于窗口方法认为一个单词的标注主要依赖于它近邻的单词,因此,要标注一个单词,我们使用一个固定大小为
从下面一张图中可以清楚看出模型的结构:
每一个词由多个离散特征组成,通过设定窗口,再把对应各个单词的离散特征向量从查询表(记住,此查询表是需要训练的,得到的每一列是各个单词的词向量,即word embedding 或 word representation,但是具体地技术细节怎么实现训练呢?)中抽出,拼接成一个列向量,然后再经过标准的神经网络训练,此监督学习方法可以得到词性标注(POS),命名实体识别(NER)等,得到的副产品就是词向量。
基于卷积的方法
使用基于窗口的方法能解决大多数自然语言处理工作,但是对语义角色标注(SRL)力有所逮,因为假设一个单词标注依赖于一个前面的动词,但这个动词在窗口之外,那么它就不太可能标注正确,这种情况下,标注一个单词需要整个句子。这时候,基于卷积的方法就派上用场了。该卷积方法又称为时间延迟神经网络(TDNNs)。
卷基层:卷基层可以看做窗口方法的一般化,给定一个序列,其可以表示成为一个矩阵
其中,权重矩阵
最大池化层:卷积层的输出的大小依赖于句子长度的大小,由于神经网络的全连接层需要输入固定长度大小的特征,因此局部特征向量需要整合为一个全局特征向量,一般的最大池化层是取平均或取最大值,由于句子中大多数单词对于一个要标注单词的语义角色没多大影响,所以取平均操作没多大意义,所以可以用最大化方法。给定一个由卷积层
给出它的结构图形:
从上图可以清楚看出卷积层和最大池化层的操作,然后就是进入标准的神经网络结构了。
对于标准的神经网络,训练量十分庞大,如果是单纯的要训练词向量的话,可以使用Word2vec模型,它更改了神经网络中的一些结构,使得训练更具有效率,详情可看word2vec以及GloVe总结。
参考文献
【Ronan Collobert, Jason Weston, Leon Bottou, Michael Karlen, Koray Kavukcuogluy, Pavel Kuksaz】Natural Language Processing (almost) from Scratch
【Yoav Goldberg】A Primer on Neural Network Models for Natural Language Processing