我正在R中建立一个语言模型,根据前面的单词来预测句子中的下一个单词。目前,我的模型是一个简单的ngram模型,带有Kneser-Ney平滑。它通过在训练集中找到具有最大概率(频率)的ngram来预测下一个单词,其中平滑提供了一种插入低阶ngram的方法,这在高阶ngram具有低频率并且可能不提供可靠预测的情况下是有利的。虽然这种方法工作得相当好,但在n元语法无法捕捉到上下文的情况下,它就失败了。例如,“外面温暖晴朗,让我们去……”和“外面很冷,正在下雨,让我们去……”会提出同样的预测,因为最后一个n元语法(假设是n<5)中没有捕捉到天气的上下文。
我正在研究更高级的方法,我发现了text2vec包,它允许将单词映射到向量空间,在向量空间中,具有相似含义的单词用相似(接近)的向量表示。我有一种感觉,这种表示可以对下一个单词预测有所帮助,但我不知道如何准确地定义训练任务。我的问题是,text2vec是否是用于下一个单词预测的合适工具,如果是,那么可以用于这项任务的合适的预测算法是什么?
发布于 2016-04-27 11:22:00
你可以试试char-rnn
或word-rnn
(谷歌一点)。有关字符级模型R/mxnet的实现,请看一下mxnet examples。也许可以使用text2vec GloVe嵌入将此代码扩展到词级模型。
如果您将取得任何成功,请让我们知道(我指的是text2vec或/和mxnet开发人员)。我将成为R社区的一个非常有趣的案例。我想执行这样的模型/实验,但仍然没有时间。
发布于 2017-08-11 23:05:32
有一个实现的解决方案,作为使用单词嵌入的完整示例。事实上,Makarenkov等人的论文。(2017) named Models with pre- training ( GloVe ) Word embeddings提供了使用递归神经网络和预训练的GloVe单词嵌入来训练语言模型的逐步实现。
在论文中,作者提供了运行de代码的说明: 1.下载预先训练好的GloVe向量。2.获取用于训练模型的文本。3.打开并调整main函数内部的LM_RNN_GloVe.py文件参数。4.运行以下方法:(a) tokenize_file_to_vectors(glove_vectors_file_name,file_2_tokenize_name,tokenized_file_name) (b) run_experiment(tokenized_file_name)
Python中的代码在这里是https://github.com/vicmak/ProofSeer。
我还发现@Dmitriy Selivanov最近使用它的text2vec包发布了一个不错的、友好的教程,它可以从R的角度解决这个问题。(如果他能进一步评论,那就太好了)。
发布于 2016-04-21 22:29:17
您的直觉是正确的,单词嵌入向量可以通过合并长距离依赖关系来改进语言模型。您正在寻找的算法称为RNNLM (递归神经网络语言模型)。http://www.rnnlm.org/
https://stackoverflow.com/questions/36780491
复制