如何学习语言模型


  1. 我正在尝试使用基于Penn树库(PTB)语料库的LSTM训练语言模型。

    我在想,我应该简单地对语料库中的每一个双字进行训练,这样它就可以在给定前一个单词的情况下预测下一个单词,但之后它就无法基于多个前一个词来预测下一单词了。

    那么,训练一个语言模型到底是什么呢?

  2. 在我目前的实现中,我的批量大小为20,词汇表大小为10000,因此我有20个10k条目的结果矩阵(参数?),并且通过与20个10k0条目的基本事实矩阵进行比较来计算损失,其中只有实际下一个单词的索引为1,其他条目为零。这是一个正确的实施吗?我对大约2感到困惑,它几乎不会随着迭代而改变,这肯定不在通常的范围内,比如说大约100。

那么,训练语言模型到底是什么呢?

我认为你不需要用语料库中的每一个bigram进行训练。只需使用序列到序列模型,当你预测前一个单词的下一个单词时,你只需选择概率最高的一个。

所以我有20个10k条目的结果矩阵(参数?)

是,每解码一步。

这是一个正确的实现吗?我对大约2感到困惑,它几乎不会随着迭代而改变,这肯定不在通常的范围内,比如说大约100。

您可以先阅读一些开源代码作为参考。例如:单词rnn-tensorflow和字符rnn-tensorflow。困惑很大-log(1/10000),大约是每个单词9(这意味着模型根本没有经过训练,完全随机选择单词,随着模型的调整,复杂性会降低,所以2是合理的)。我认为你的陈述中的100可能意味着每句话的复杂性。

例如,如果使用tf.contrb.seq2seq.sequence_loss来计算复杂度,如果将average_across_timestepsaverage_across_batch都设置为True作为默认值,则结果将小于10,但如果将average_across_timesteps设置为False,并且序列的平均长度约为10,则结果约为100。

最新更新