2016-04-21 31 views
3

我在R中建立一個語言模型,根據前面的單詞預測句子中的下一個單詞。目前我的模型是Kneser-Ney平滑的簡單ngram模型。它通過在訓練集中找到具有最大概率(頻率)的ngram來預測下一個單詞,其中平滑提供了插值低階ngram的方式,這在高階ngram具有低頻並且可能不提供可靠預測的情況下是有利的。雖然這種方法工作得相當好,但它在n-gram無法捕獲上下文的情況下失敗。例如,「外面溫暖陽光充足,讓我們去......」和「外面很冷,下雨,讓我們去...」將會提出同樣的預測,因爲沒有捕捉到天氣的背景在最後的n-gram中(假設n < 5)。用R中的text2vec來預測下一個單詞

我正在研究更先進的方法,並且我找到了text2vec包,它允許將單詞映射到向量空間,其中具有相似含義的單詞用類似(近似)向量表示。我有一種感覺,這種表示可以有助於下一個單詞預測,但我無法弄清楚如何確切定義訓練任務。我的問題是,如果text2vec是用於下一個單詞預測的正確工具,並且如果是,那麼可以用於此任務的合適的預測算法是什麼?

回答

1

您的直覺是正確的,詞嵌入向量可以用來通過結合長距離依賴關係來改善語言模型。您正在尋找的算法被稱爲RNNLM(遞歸神經網絡語言模型)。 http://www.rnnlm.org/

+0

你知道RNNLM是否有R實現? – Sasha

+0

可能不會是我的猜測。 – Aaron

6

您可以嘗試char-rnnword-rnn(谷歌一點點)。 對於字符級模型R/mxnet實現,請看mxnet examples。可能有可能使用text2vec GloVe嵌入將此代碼擴展到字級模型。

如果您將取得任何成功,請告訴我們(我的意思是text2vec或/和mxnet開發人員)。對於R社區,我將是非常有趣的案例。我想執行這樣的模型/實驗,但仍然沒有時間。

2

有一個實現的解決方案作爲使用詞嵌入的完整示例。事實上,來自Makarenkov等人的論文(2017)名爲語言模型與預訓練(GloVe)詞嵌入呈現循序漸進的實施訓練語言模型,使用循環神經網絡(RNN)和預先訓練的GloVe詞嵌入。

在本文中,作者提供了運行代碼的說明: 1.下載預先訓練好的GloVe矢量。 2.獲取文本以訓練模型。 3.打開並調整主 函數內的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的角度解決這個問題。 (如果他可以進一步評論,這將是很好的)。