Introduction
近年来RNN被广泛的应用于基于神经网络的NLP任务当中,比如说语言模型,QA等等,并且通常来说由RNN的相关结构能够在这些任务当中取得state of art的表现。
不过呢,虽然RNN相关的网络在NLP任务中表现十分优异,但是其也有一些非常显著的缺点,比如说当一个语料库所对应的词表数量非常大的情况下,整个模型的大小也会随之变大。比如,当我们使用RNN构建语言模型的时候,我们首先将词语从one-hot的向量,通过词嵌入的手段,转变为一个稠密的向量形式(如Word2Vec),并且所有词转变后构成一个embedding matrix,而当这个语料中的词语非常多的时候,将会导致这个matrix非常的大,大到我们使用GPU训练的时候,都没有办法将它放到GPU的显存里面。与此同时,除了模型会变的非常大以外,整个模型的训练开销也会随着词表的增大而急速增长。
在RNN LM或者相关的模型的计算中,最耗费时间的一个步骤在于计算预测词的概率,因为必须要通过softmax去计算概率值,而softmax需要计算一个规则项,该规则项需要遍历整个词表。
为了解决这个由于词表增大,而导致的模型大小和计算速度上的开销急剧增大的问题,这篇文章提出了一种新颖的做法,就是在做词嵌入的时候,将一个词对应的词嵌入拆成两部分,一部分可以理解为行嵌入部分,另一部分是列嵌入部分,并且这两部分都是共享的,只保证每个行和每个列的组合,只对应一个词。在传统的RNNLM做法中,一个词的词嵌入表示是一个独立的、唯一的表示,如果有V个词,那么就需要有V个向量来表示。而在这个RNNLM中,由于词嵌入的表示,由行向量和列向量组成,并且行列向量都是共享的,那么对于V个词的预料,那么其