NLPのCNNを理解するためにthis tutorialに従っています。私の前にコードがあるにもかかわらず、私が理解できないことがいくつかあります。誰かがここでいくつかのことをクリアできることを願っています。Tensorflowを使用してNLPチュートリアルのCNNを理解しようとしています
最初かなりマイナーな事はTextCNN
オブジェクトのsequence_length
パラメータです。 githubの例では、これはちょうど56
です。これは、トレーニングデータ内のすべての文章の最大長であると思います。これは、self.input_x
が、各単語の文の辞書からのインデックスだけを含む56次元ベクトルであることを意味する。
このリストはtf.nn.embedding_lookup(W, self.intput_x)
にあり、self.input_x
で指定された単語の埋め込みワードからなるマトリックスが返されます。
matrix = np.random.random([1024, 64])
ids = np.array([0, 5, 17, 33])
print matrix[ids]
しかし、ここでの問題は、ほとんどの時間self.input_x
が[1 3 44 25 64 0 0 0 0 0 0 0 .. 0 0]
のように見えるということです。this answerによると、この操作はnumpyのでインデックスを使用するのと同様です。 tf.nn.embedding_lookup
が値0を無視しているとすれば正解でしょうか?
私は得ることはありませんもう一つはtf.nn.embedding_lookup
がここで働いている方法です。
# Embedding layer
with tf.device('/cpu:0'), tf.name_scope("embedding"):
W = tf.Variable(
tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0),
name="W")
self.embedded_chars = tf.nn.embedding_lookup(W, self.input_x)
self.embedded_chars_expanded = tf.expand_dims(self.embedded_chars, -1)
私が想定し、taht self.embedded_chars
は、各行が表すCNNへ実際入力されている行列であります単語埋め込み一つ単語。しかしtf.nn.embedding_lookup
はself.input_x
によって与えられた指標についてどのように知ることができますか?私はここで理解していない
最後の事は
W
たちがトレーニング中に学ぶ私たちの埋め込み行列です。ランダムな一様分布を用いて初期化する。tf.nn.embedding_lookup
は実際の埋め込み操作を作成します。埋め込み操作の結果は、形状が[None, sequence_length, embedding_size]
の3次元テンソルである。
これは我々がが実際にここ埋め込み語を学んでいることを意味するのでしょうか?冒頭のチュートリアルの状態:
私たちは、私たちの言葉の埋め込み用に事前に訓練word2vecベクトルを使用しません。代わりに、最初から埋め込みを学びます。
しかし、実際に起こっているコード行はありません。 code of the embedding layerは、訓練されているものや学習されているものと同じようには見えないので、どこで起きていますか? QUES 1へ
ありがとう:あなたはブログ従うことができ、コードの詳細な説明については
!また、リンクのために - 私はそのことをできるだけ早く研究するつもりです:) – displayname