machine-learning - 如何学习语言模型?

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

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

    我认为我应该简单地训练语料库中的每个二元组,以便它可以根据前面的单词预测下一个单词,但随后它就无法根据多个前面的单词来预测下一个单词。

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

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

最佳答案

So what exactly is it to train a language model?

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

so I have 20 resulting matrices of 10k entries (parameters?)

是的,每一步解码。

Is this a right implementation? I'm getting perplexity of around 2 that hardly changes over iterations, which is definitely not in a right range of what it usually is, say around 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设置为True,结果将小于10 为 False 并且序列的平均长度约为 10,则约为 100。

关于machine-learning - 如何学习语言模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47297321/

相关文章:

python - tensorflow 语音_命令错误: Unsuccessful TensorSliceReader constructor

python - 如何进行编码(阿拉伯语 إعراب Parsing)Python?

python - n-gram 马尔可夫链转换表

python - tensorflow LSTM 模型中的 NaN 损失

python - ValueError : Error when checking input: expected input_3 to have shape (34, )但得到形状为(36,)的数组

machine-learning - 我应该为每个子集构建不同的模型吗

machine-learning - 定义文本分类中的词汇量

statistics - 给定一个文档,选择一个相关的片段

python - 处理 RNN/LSTM 中的缺失数据(时间序列)

algorithm - 线性局部嵌入残差方差 Matlab