如何学习语言模型?

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

    我原本以为只要用语料库中的每一个双词组合进行训练,就可以根据前面的词预测下一个词,但这样做就无法根据多个前置词来预测下一个词了。

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

  2. 在我的当前实现中,我设置了批量大小为20,词汇量为10000,因此我有20个结果矩阵,每个矩阵有10000个条目(参数?),损失是通过将20个真实矩阵与这些结果矩阵进行比较来计算的,真实矩阵中只有实际下一个词的索引为1,其他条目为零。这是否是正确的实现?我得到的困惑度大约为2,并且在迭代过程中几乎没有变化,这显然不在通常的范围内,通常应该是大约100左右。


回答:

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

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

因此我有20个结果矩阵,每个矩阵有10000个条目(参数?)

是的,每个解码步骤都是这样。

这是否是正确的实现?我得到的困惑度大约为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。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注