NLP의 CNN을 이해하기 위해 this tutorial을 따르고 있습니다. 내 앞에 코드가 있음에도 불구하고 이해할 수없는 몇 가지 사항이 있습니다. 누군가 여기서 몇 가지를 정리해주기를 바랍니다.Tensorflow를 사용하여 NLP 자습서를 CNN에서 이해하려고 시도합니다.
첫 번째 오히려 사소한 것은 TextCNN
개체의 sequence_length
매개 변수입니다. github의 예제에서 이것은 단지 56
입니다. 나는 이것이 훈련 데이터의 모든 문장의 최대 길이라고 생각합니다. 즉, self.input_x
은 각 단어에 대한 문장 사전의 색인 만 포함하는 56 차원 벡터입니다.
이 목록은 에 의해 주어진 단어의 단어 embeddings로 구성된 행렬을 반환합니다 tf.nn.embedding_lookup(W, self.intput_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을 무시한다고 가정하면 나는 맞습니까?
# 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
여기서 일하는입니다 단어 삽입 하나 단어. 그러나 tf.nn.embedding_lookup
은 self.input_x
에 의해 주어진 지표에 대해 어떻게 알 수 있습니까? 내가 여기에 이해가 안
마지막 것은
이 우리가 단어 묻어 여기 학습 실제로 것을 의미합니까? 이 튜토리얼의 시작 부분은 다음과 같습니다.
W
우리는 훈련 기간 동안 배우고 우리의 삽입 행렬이다. 무작위 균일 분포를 사용하여 초기화합니다.tf.nn.embedding_lookup
은 실제 삽입 작업을 만듭니다. 임베딩 작업의 결과는 모양이 3 차원 텐서 인[None, sequence_length, embedding_size]
입니다.
단어 삽입을 위해 사전 훈련 된 word2vec 벡터는 사용하지 않습니다. 대신 처음부터 embedding을 배웁니다.
그러나 실제로 발생하는 코드 줄은 표시되지 않습니다. code of the embedding layer은 훈련되거나 배운 것이없는 것처럼 보이지 않으므로 어떻게됩니까? QUES 1
감사합니다 : 당신이 블로그에 따라 할 수있는 코드의 자세한 설명
! 또한 링크를 위해 - 나는 그 것을 가능한 빨리 공부할 것이다 :) – displayname