2017-01-15 7 views
1

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_lookupself.input_xによって与えられた指標についてどのように知ることができますか?私はここで理解していない


最後の事は

Wたちがトレーニング中に学ぶ私たちの埋め込み行列です。ランダムな一様分布を用いて初期化する。 tf.nn.embedding_lookupは実際の埋め込み操作を作成します。埋め込み操作の結果は、形状が[None, sequence_length, embedding_size]の3次元テンソルである。

これは我々がが実際にここ埋め込み語を学んでいることを意味するのでしょうか?冒頭のチュートリアルの状態:

私たちは、私たちの言葉の埋め込み用に事前に訓練word2vecベクトルを使用しません。代わりに、最初から埋め込みを学びます。

しかし、実際に起こっているコード行はありません。 code of the embedding layerは、訓練されているものや学習されているものと同じようには見えないので、どこで起きていますか? QUES 1へ

答えて

3

回答(だから私はtf.nn.embedding_lookupが値0を無視することを前提としていた場合、私は修正するのですか?):入力ベクトルで

0年代は語彙で0番目のシンボルへの指標であり、これはPAD記号です。私は、ルックアップが実行されるときに無視されるとは思わない。埋め込み行列の0行目が返されます。 QUES 2

回答(しかし、どのself.input_xによって与えられるものの指標について知るをtf.nn.embedding_lookupことができますか?):埋め込みマトリックスの

サイズ[Vの*のE]は語彙のサイズでありますEは埋め込みベクトルの次元である。行列の0行目は、語彙の0番目の要素の埋め込みベクトルであり、行列の1番目の行は、語彙の1番目の要素の埋め込みベクトルです。 入力ベクトルxから、埋め込み行列を索引付けするために使用される単語の索引がボキャブラリで取得されます。

ques 3への回答(これは実際には埋め込み単語を実際に学習しているのでしょうか?)

はい、実際に埋め込み行列を学習しています。 埋込み層では、W = tf.Variable( tf.random_uniform([vocab_size, embedding_size], -1.0, 1.0),name="W")のWは埋め込み行列であり、デフォルトでは変数のテンソルフローtrainable=TRUEになります。 Wも学習されたパラメータになります。事前訓練を受けたモデルを使用するには、trainable = Falseと設定します。 https://agarnitin86.github.io/blog/2016/12/23/text-classification-cnn

+0

ありがとう:あなたはブログ従うことができ、コードの詳細な説明については

!また、リンクのために - 私はそのことをできるだけ早く研究するつもりです:) – displayname

関連する問題