4

我正在 R 中构建一个语言模型,以根据前面的单词预测句子中的下一个单词。目前我的模型是一个简单的 ngram 模型,带有 Kneser-Ney 平滑。它通过在训练集中找到具有最大概率(频率)的 ngram 来预测下一个单词,其中平滑提供了一种插入低阶 ngram 的方法,这在高阶 ngram 具有低频率并且可能无法提供可靠预测的情况下可能是有利的. 虽然这种方法工作得相当好,但在 n-gram 无法捕获上下文的情况下它会失败。例如,“外面很暖和,阳光明媚,我们去...”和“外面很冷,正在下雨,我们去...”将提出相同的预测,因为没有捕获天气的上下文在最后一个 n-gram 中(假设 n<5)。

我正在研究更高级的方法,我发现了 text2vec包,它允许将单词映射到向量空间,其中具有相似含义的单词用相似(接近)向量表示。我有一种感觉,这种表示可能有助于下一个单词的预测,但我无法弄清楚如何准确地定义训练任务。我的问题是 text2vec 是否是用于下一个单词预测的正确工具,如果是,那么可用于此任务的合适预测算法是什么?

4

3 回答 3

6

您可以尝试char-rnnword-rnn(谷歌一点)。对于字符级模型 R/mxnet 实现,请查看mxnet 示例。或许可以使用 text2vec GloVe 嵌入将此代码扩展到单词级模型。

如果您有任何成功,请告诉我们(我的意思是 text2vec 或/和 mxnet 开发人员)。我将成为 R 社区非常有趣的案例。我想进行这样的模型/实验,但仍然没有时间。

于 2016-04-27T11:21:59.770 回答
2

有一个已实现的解决方案作为使用词嵌入的完整示例。事实上,Makarenkov 等人的论文。(2017 年)名为 Language Models with Pre-Trained (GloVe) Word Embeddings 提出了使用循环神经网络 (RNN) 和预训练的 GloVe 词嵌入训练语言模型的分步实现。

在论文中,作者提供了运行解码的说明: 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 角度解决问题很有用。(如果他能进一步发表评论,那就太好了)。

于 2017-08-11T23:05:32.183 回答
1

您的直觉是正确的,词嵌入向量可用于通过合并长距离依赖关系来改进语言模型。您正在寻找的算法称为 RNNLM(递归神经网络语言模型)。http://www.rnnlm.org/

于 2016-04-21T22:29:16.707 回答