针对encoder-docoder模型,在解码时,根据每一步解码时词典中对应的词的概率来选择哪一个词作为当前词的输出。即softmax层。
其中W的维度hidden_size*T,hidden_size表示RNN单元隐藏状态(输出)的维度,T表示词典的大小。其计算复杂度随词典的大小T的增加而增加,当词典过大时,计算复杂度大,需要内存也比较大。softmax层是最大的计算瓶颈。
为了减少内存的需求,T不能过大。下面介绍几种方法:
1、 强制限制T的大小,简单暴力,对于低频词,用<UNK>代替。当解码遇到<UNK>时,根据Attention机制,通过CopyNet或PointerNetwork从原文本中复制对应的词,常见的翻译模型就是这样处理的。
2、On Using Very Large Target Vocabulary for Neural Machine Translation 一文中介绍了一种基于重要度采样的方法,每次只使用目标词汇表的一部分来计算归一化分母,大大降低了每次参数更新的计算量,并且每次只更新目标词汇和采样词汇。
3、Abstractive Text Summarization using Sequence-to-sequence RNNs and Beyond 一文介绍了一种更简单的减少计算量的方法。每个mini-batch时
4、word2vec中用到的huffman树和负采样技术。
目标词汇 = 原文本词汇 + 高频词汇
const = count(原文本词汇) + count(高频词汇)
2和3的不同在于:2是翻译模型,原文本和目标文本具有不同的词典,3是摘要模型,原文本和目标文本具有相同的词典。