Word2vecモデルを使用して単語を予測する


20

??ドアを開くと、自動的に加熱が開始されます」という文が与えられます。

??で可能な単語のリストを取得したい 確率で。

word2vecモデルで使用される基本的な概念は、周囲のコンテキストが与えられた単語を「予測」することです。

モデルが構築されたら、新しい文に対して予測タスクを実行するための正しいコンテキストベクトル操作は何ですか?

それは単なる線形和ですか?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])

上記のアルゴリズムを実装しましたが、「softmaxが使用されているのはなぜですか?」という質問に遭遇しました2つの正規化関数の例を示します:def softmax(w、t = 1.0):#Source:gist.github.com/stober/1946926 e = np.exp(w / t)return e / np.sum( e)def normalization(w):w / np.sum(w)a = np.array([。0002、.0001、.01、.03])を返します。normalization(a)を印刷しますsoftmax(a、t = 1を印刷します)出力を比較してみましょう:[0.00496278 0.00248139 0.24813896 0.74441687] [0.24752496 0.24750021 0.24996263 0.25501221]ご覧のように、softmaxは.0001(。

回答:


9

Word2vecは、CBOWとskip-gramの2つのモデルで動作します。あなたの質問は、周囲の単語を与えられたターゲット単語を予測するのと同じように進むので、CBOWモデルを見てみましょう。

基本的に、モデルは入力および出力の重み行列を作成します。これは、隠されたレイヤーの助けを借りて、入力コンテキストワードおよび出力ターゲットワードに依存しています。したがって、逆伝播は、予測された出力ベクトルと現在の出力行列の誤差が異なる場合に重みを更新するために使用されます。

基本的に、特定のコンテキストワードからターゲットワードを予測することは、特定のデータに最適な重み行列を取得するための方程式として使用されます。

2番目の部分に答えるには、単なる線形和よりも少し複雑に思えます。

  1. コンテキスト単語のすべての単語ベクトルを取得する
  2. 平均化してhサイズの隠れ層ベクトルを見つけますNx1
  3. サイズの出力行列syn1word2vec.cまたはgensim)を取得しますVxN
  4. で乗算syn1するhと、結果のベクトルはzサイズになりますVx1
  5. y = softmax(z)sizeを使用して確率ベクトルを計算しますVx1。ここで、最高の確率は、語彙内のターゲットワードのワンホット表現を示します。 Vは語彙のサイズをN示し、埋め込みベクトルのサイズを示します。

出典:http : //cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

更新:長期短期記憶モデルは現在、次の単語を予測する上で素晴らしい仕事をしています。seq2seqモデルはtensorflowチュートリアルで説明されています。テキスト生成に関するブログ投稿もあります。


ありがとうございました !これの実装を知っていますか?(たとえばgensimの一部として)。それ以外の場合、計算するのに複雑すぎないようです。
DED

こんにちは、トレーニングされたw2v埋め込みモデルから出力行列(例ではsyn1)を取得する方法について詳しく教えていただけますか?トレーニングを終了すると、w2vは出力行列を削除したと思います。
チャールズチャウ

私の理解に基づいて、2番目の質問の答えは出力行列を再構築することです、それは正しいですか?
チャールズチャウ

1
これはシーケンス分類子のように機能しないことに注意する価値があると思います。単語の順序は無視されます。
DisplayNameに

syn1モデルを保存するだけで出力行列を取得できます。はい、順序付けは無視されます。アプリケーションでは、実際にはLSTMベースのseq2seqモデルを使用できます。
yazhi

4

Word2Vecの最新バージョンでは、欠落単語の予測が機能として追加されています。もちろん、文はモデルのトレーニングに使用されるWord2Vecモデルの入力構文(小文字、ストップワードなど)と一致する必要があります

「ドアを開けたら?」の上位3語を予測するための使用法:

print(model.predict_output_word(['When','I','open','door']), topn = 3)

centerが3番目と4番目の単語の間にあることをどのように知ったのですか?それは私には意味がありません。偶数個のコンテキストワードのみを入力できfloor(len(n)/2))floor(len(n)/2))+1
bmc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.