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