我正在R中构建语言模型,以根据前面的单词预测句子中的下一个单词。目前我的模型是一个简单的ngram模型,带有Kneser-Ney平滑。它通过在训练集中找到具有最大概率(频率)的ngram来预测下一个字,其中平滑提供了一种内插低阶ngrams的方法,这在高阶ngram具有低频率并且可能不提供可靠预测的情况下是有利的。 。虽然这种方法运行得相当好,但在n-gram无法捕获上下文的情况下它会失败。例如,&#34;外面温暖而阳光充足,让我们去...&#34;并且&#34;外面很冷,下雨,让我们去...&#34;将建议相同的预测,因为在最后的n-gram中没有捕获天气的上下文(假设n <5)。
我正在研究更高级的方法,我找到了text2vec包,它允许将单词映射到向量空间,其中具有相似含义的单词用相似的(近)向量表示。我有一种感觉,这种表示可能有助于下一个单词预测,但我无法弄清楚如何定义训练任务。我的问题是,如果text2vec是用于下一个单词预测的正确工具,如果是,那么可以用于此任务的合适预测算法是什么?
答案 0 :(得分:6)
您可以尝试char-rnn
或word-rnn
(google一点点)。
对于字符级模型R / mxnet实现,请查看mxnet examples。可能有可能使用text2vec GloVe嵌入将此代码扩展到字级模型。
如果您有任何成功,请告诉我们(我的意思是text2vec或/和mxnet开发人员)。对于R社区,我将是非常有趣的案例。我想进行这样的模型/实验,但仍然没有时间。
答案 1 :(得分:1)
Your intuition is right that word embedding vectors can be used to improve language models by incorporating long distance dependencies. The algorithm you are looking for is called RNNLM (recurrent neural network language model). http://www.rnnlm.org/