【问题标题】:how to learn language model? [closed]如何学习语言模型? [关闭]
【发布时间】:2018-04-28 01:59:05
【问题描述】:
  1. 我正在尝试使用基于 Penn Treebank (PTB) 语料库的 LSTM 训练语言模型。

    我在想我应该简单地用语料库中的每个二元组进行训练,以便它可以根据前面的单词预测下一个单词,但是它无法根据多个前面的单词预测下一个单词。

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

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

【问题讨论】:

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


    【解决方案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 都设置为默认值,则结果将小于10,但如果将average_across_timesteps 设置为为False,序列的平均长度约为10,它将约为100。

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 2011-02-04
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      相关资源
      最近更新 更多