web-dev-qa-db-ja.com

TensorFlow埋め込みルックアップ

TensorFlowを使用して音声認識用のRNNを構築する方法を学習しようとしています。最初に、TensorFlowページに掲載されているいくつかのサンプルモデルを試してみたかった TF-RNN

アドバイスに従って、Word2vecモデルコードの基本バージョンを使用して、Word IDが密な表現(ベクトル表現)にどのように埋め込まれているかを理解するのに少し時間がかかりました。 TF-RNNtf.nn.embedding_lookupで2次元配列で使用されている同じ関数に実際に遭遇するまで、ptb_Word_lm.pyが実際に何をするのかを理解していました。もう。

tf.nn.embedding_lookupが行うこと:

2次元配列paramsと1次元配列idsが与えられると、関数tf.nn.embedding_lookupは、idsで指定されたインデックスに対応するパラメータから行をフェッチします。これは、返される出力の次元に当てはまります。

私が混乱していること:

同じパラメータで2次元配列idsを試してみると、tf.nn.embedding_lookupは2次元ではなく3次元配列を返しますが、理由はわかりません。

Embedding Lookup のマニュアルを調べましたが、パーティショニングがどのように機能し、結果が返されるのかを理解するのはまだ難しいと思います。最近、tf.nn.embedding_lookupを使用して簡単な例を試しましたが、毎回異なる値が返されるようです。この動作は、パーティショニングに関連するランダム性によるものですか?

tf.nn.embedding_lookupがどのように機能するのか、またWord2vec_basic.pyptb_Word_lm.pyの両方で使用される理由を理解するのを手伝ってください。つまり、それらを使用する目的は何ですか。

11
VM_AI

tf.nn.embedding_lookupここ とは何かについての答えはすでにあります。


同じパラメータと2次元配列IDで試行すると、tf.nn.embedding_lookupは2次元ではなく3次元配列を返しますが、理由はわかりません。

IDの1次元リスト[0, 1]がある場合、関数は埋め込みのリスト[embedding_0, embedding_1]を返します。ここでembedding_0は形状embedding_sizeの配列です。たとえば、IDのリストは単語のバッチである可能性があります。

これで、IDのmatrix、またはIDのリストのリストができました。たとえば、sentencesのバッチ、つまり単語のリストのバッチ、つまり単語のリストのリストができました。

文のリストが[[0, 1], [0, 3]](文1は[0, 1]、文2は[0, 3])の場合、関数は埋め込みの行列を計算します。これは[2, 2, embedding_size]の形になり、次のようになります。

[[embedding_0, embedding_1],
 [embedding_0, embedding_3]]

partition_strategy引数に関しては、気にする必要はありません。基本的に、計算に制限がある場合は、埋め込み行列のリストを1行列ではなくparamsとして指定できます。

したがって、形状[1000, embedding_size]の埋め込み行列を形状[100, embedding_size]の10個の行列に分割し、この変数のリストをparamsとして渡すことができます。引数partition_strategyは、10個の行列間の語彙(1000語)の分布を処理します。

16