如何学习语言模型?

时间:2017-11-15 00:05:15

标签: machine-learning nlp lstm language-model penn-treebank

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

    我在想我应该简单地训练语料库中的每个二元组,以便它可以预测下一个单词给出的前一个单词,但是之后它就不能根据前面的多个单词预测下一个单词。

    那么究竟是什么训练语言模型呢?

  2. 在我目前的实现中,我的批量大小= 20,词汇量大小为10000,所以我有20个10k条目(参数?)的结果矩阵,并且通过与20个真相进行比较来计算损失10k条目的矩阵,其中只有实际下一个字的索引是1而其他条目是零。这是正确的实施吗?我对2左右的困惑几乎没有改变迭代,这绝对不是通常的正常范围,比如100左右。

1 个答案:

答案 0 :(得分:1)

  

那么究竟是什么训练语言模型?

我认为你不需要训练语料库中的每个二元组。只需使用序列来对模型进行排序,当您预测给定前一个单词的下一个单词时,您只需选择具有最高概率的单词。

  

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

是的,每步解码。

  

这是正确的实施吗?我对2左右的困惑几乎没有改变迭代,这绝对不是通常的正常范围,比如100左右。

您可以先阅读一些开源代码作为参考。例如:word-rnn-tensorflowchar-rnn-tensorflow。困惑在于-log(1/10000),每个单词大约9 (这意味着模型根本没有训练并且完全随机地选择单词,因为正在调整模型的复杂性将是减少,所以2是合理的)。我认为你的陈述中的100可能意味着每句话的复杂性。

例如,如果使用tf.contrib.seq2seq.sequence_loss计算复杂度,如果您将average_across_timestepsaverage_across_batch都设置为True,则结果将小于10,但如果您将average_across_timesteps设置为False,序列的平均长度约为10,大约为100.