神经网络语言模型中,词向量为什么可以随着模型的迭代而改变?
在神经网络语言模型中,通常我们认为词向量是模型的输入。
对此不太熟悉的朋友可以参考博客:自然语言处理NLP(3)——神经网络语言模型、词向量
神经网络语言模型的架构是这个样子的:
然而,在模型训练的过程中,输入层的词向量可以随着模型的迭代而改变,就像调整上图中的权重:一样。
可能很多人有同样的疑问:词向量作为模型的输入,怎么能改变呢?
朋友们可以先仔细思考一下这个问题~
(强行分割线……)
实际上完全不矛盾,因为神经网络语言模型真正的输入根本就不是词向量。
其实,神经网络语言模型真正的输入是各个词的one-hot向量,上图中的look-up表 将其转化为词向量之后才输入网络中。而真正的输入:one-hot向量是完全不变的。
如果还是有些疑惑的话,我们来举个例子:
假设词汇表中有20w个词,词向量的维度为100维。
简单起见,我们只将一个词 输入网络。
很明显,词 可以表示为一个1*20w的one-hot向量,其中只有一位值为1,其他维度的值均为0。
经过了一个大小为20w*100的look-up表之后, 被表示成了1*100的向量——也就是我们通常所说的词向量。
在模型训练过程中,可以随着模型迭代而逐渐变化的是这个100维的词向量,更深一步地说,逐渐变化的其实是这个大小为20w*100的look-up表。
其实,在这个描述中,look-up表和网络中的权重在意义上完全相同!
推广到多个词,过程完全相同,只是在将各个词转化为词向量之后需要进行拼接或者其他操作即可。
理解了上面的过程,对这个问题就有了答案:
在模型训练过程中,真正的输入是表示各个词的one-hot向量,look-up表类似一个权重矩阵,将one-hot向量转化为词向量,再进行后续操作。可以将look-up表看作一个特殊的权值矩阵,在模型迭代过程中,表中的权值可以变化,以更好地拟合模型输出。
如果本文中某些表述或理解有误,欢迎各位大神批评指正。
谢谢!