2016-04-21 27 views
3

私は、Rで言語モデルを構築して、前の単語に基づいて文中の次の単語を予測します。現在、私のモデルはKneser-Neyスムージングを使った単純なngramモデルです。それは、スムージングが低次ngramを補間する方法を提供するトレーニングセットにおいて最大確率(頻度)を有するngramを見つけることによって次の単語を予測する。これは高次ngramが低頻度であり、信頼できる予測を提供しない場合に有利であり得る。この方法は合理的にうまくいくが、nグラムが文脈を捉えることができない場合には失敗する。たとえば、「暖かくて晴れていて、外に出よう...」「外に寒くて雨が降っている、行ってみましょう...」は、天気の状況が捕捉されないため、同じ予測を示唆します最後のnグラムで(nと仮定すると< 5)。R内のtext2vecで次の単語を予測する

私はより高度な方法を検討しており、同様の意味を持つ単語が同様の(近い)ベクトルで表されるベクトル空間に単語をマップすることを可能にするtext2vecパッケージを発見しました。私は、この表現が次の単語予測に役立つと感じていますが、訓練作業をどのように定義するかを正確に把握することはできません。私の疑問は、text2vecが次の単語予測に使用する正しいツールであるかどうかです。もしそうなら、このタスクに使用できる適切な予測アルゴリズムは何ですか?

答えて

1

あなたの直感は、単語の埋め込みベクトルを使用して、遠距離依存を組み込むことによって言語モデルを改善することができます。あなたが探しているアルゴリズムは、RNNLM(リカレントニューラルネットワーク言語モデル)と呼ばれています。 http://www.rnnlm.org/

+0

RNNLMのR実装があるかどうか知っていますか? – Sasha

+0

おそらく私の推測ではないでしょう。 – Aaron

6

char-rnnまたはword-rnn(少しGoogle)を試すことができます。 文字レベルのモデルR/mxnetの実装については、mxnet examplesを参照してください。おそらく、このコードをtext2vec GloVe埋め込みを使って単語レベルのモデルに拡張することは可能です。

成功すれば、私たちに教えてください(私はtext2vecまたは/およびmxnet開発者を意味します)。私はRコミュニティにとって非常に興味深いケースになるでしょう。私はそのようなモデル/実験をしたいと思っていましたが、まだ時間がありません。

2

単語埋め込みを使用した完全な例として、実装されたソリューションが1つあります。事実、Makarenkovらの論文は、 Pre-Trained(GloVe)Word Embeddingを使用した言語モデル(2017)は、リカレントニューラルネットワーク(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の観点から問題を解決するのに役立ちます。 (もし彼がさらにコメントできれば素晴らしいだろう)。

関連する問題