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

    我在想我应该简单地训练语料库中的每个二元组,这样它就可以在给定先前单词的情况下预测下一个单词,但是它无法根据多个前面的单词预测下一个单词。

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

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

4

1 回答 1

1

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

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

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

是的,每一步解码。

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

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

例如,如果使用tf.contrib.seq2seq.sequence_lossaverage_across_timesteps计算复杂度,如果将和都设置为默认值,则结果将小于 10 average_across_batch,但如果average_across_timesteps将序列大约是 10,它将是大约 100。

于 2017-11-15T02:27:35.387 回答