埋め込みとは何か、どのように訓練されているのか知っています。正確には、テンソルフローのドキュメントを参照しながら、私は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のデータセットを参照しています)。
['tf.gather'](https://www.tensorflow.org/api_docs/python/tf/gather)は、あなたに' word_embeddings'変数の「行」を渡す以外に何もしません各単語idは 'word_ids'にあります。しかし、訓練セッション中にグラフ内でそれを使用し、 'word_embeddings'を適切に更新すれば、勾配を正しく逆伝播します。 – jdehesa
2番目のスニペットは埋め込みを訓練しません。必要な変数を作成するだけです。そのリンクは後で言います:_ "変数word_embeddingsが学習され、トレーニングの最後に語彙のすべての単語の埋め込みが含まれます。埋め込みはさまざまな方法で練習できます..." _ –
埋め込みアプローチは、データセットからすべての単語を最初に抽出し、そのシーケンスに埋め込みを明示的に訓練する最初のリンクよりも一般的です。 tf.gatherのアプローチでは、LSTMの実際のトレーニング中に訓練を受けるレイヤーのようなものですか?だから、私はseq2seqモデルにどのようにアプローチすることを提案しますか?最初のリンクまたは2番目のリンク? –