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.py
とptb_Word_lm.py
の両方で使用される理由を理解するのを手伝ってください。つまり、それらを使用する目的は何ですか。
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語)の分布を処理します。