2017-09-19 6 views
0

埋め込みとは何か、どのように訓練されているのか知っています。正確には、テンソルフローのドキュメントを参照しながら、私は2つの異なる記事に出くわしました。私はそれらの違いが何であるかを知りたい。テンソルフロー埋め込み

リンク1:最初のチュートリアルでTensorflow | Vector Representations of words

、彼らは明示的に特定のデータセットに埋め込みを訓練してきました。これらの埋込みを訓練するために別個のセッションが実行されています。その後、学習した埋め込みをnumpyオブジェクトとして保存し、LSTMネットワークのトレーニング中に

tf.nn.embedding_lookup()関数を使用することができます。

リンク2:この第二の記事でTensorflow | Embeddings

しかし、私は何が起こっているのか理解できませんでした。

word_embeddings = tf.get_variable(“word_embeddings”, 
[vocabulary_size, embedding_size]) 
embedded_word_ids = tf.gather(word_embeddings, word_ids) 

これはトレーニングの埋め込みのセクションで示されています。私の疑いはあります:収集機能は埋め込みを自動的に訓練しますか?私はこのオペレーションが私のPC上で非常に速く走ったので確信が持てません。

一般的に、seq2seqモデルをトレーニングするために、テンソルフローでワードをベクトル(link1またはlink2)に変換する正しい方法は何ですか?また、seq2seqデータセットの埋め込みを訓練する方法は、データが別のシーケンスのフォームとは違っているためです(単語の連続シーケンスはリンク1のデータセットを参照しています)。

+1

['tf.gather'](https://www.tensorflow.org/api_docs/python/tf/gather)は、あなたに' word_embeddings'変数の「行」を渡す以外に何もしません各単語idは 'word_ids'にあります。しかし、訓練セッション中にグラフ内でそれを使用し、 'word_embeddings'を適切に更新すれば、勾配を正しく逆伝播します。 – jdehesa

+1

2番目のスニペットは埋め込みを訓練しません。必要な変数を作成するだけです。そのリンクは後で言います:_ "変数word_embeddingsが学習され、トレーニングの最後に語彙のすべての単語の埋め込みが含まれます。埋め込みはさまざまな方法で練習できます..." _ –

+0

埋め込みアプローチは、データセットからすべての単語を最初に抽出し、そのシーケンスに埋め込みを明示的に訓練する最初のリンクよりも一般的です。 tf.gatherのアプローチでは、LSTMの実際のトレーニング中に訓練を受けるレイヤーのようなものですか?だから、私はseq2seqモデルにどのようにアプローチすることを提案しますか?最初のリンクまたは2番目のリンク? –

答えて

0

いいえ!とにかく、私はこの質問に対する答えを見つけたので、他の人がそれを享受できるように投稿しています。

最初のリンクは、埋め込みがどのように学習されているかを正確に示すプロセスを順を追って説明するチュートリアルです。

トレーニングseq2seqモデルやその他のエンコーダ/デコーダモデルなどの実際のケースでは、モデルが訓練されている間に埋め込み行列が適切に調整される第2のアプローチを使用します。

関連する問題