2016-07-07 148 views
1

我想將word2vec用於卷積神經網絡。我是新的Tensorflow。這是我的前訓練層代碼。用於卷積神經網絡的字嵌入

W = tf.Variable(tf.constant(0.0, shape=[vocabulary_size, embedding_size]), 
       trainable=False, name="W") 
embedding_placeholder = tf.placeholder(tf.float32, [vocabulary_size, embedding_size]) 
embedding_init = W.assign(embedding_placeholder) 
sess = tf.Session() 
sess.run(embedding_init, feed_dict={embedding_placeholder: final_embeddings}) 

我想我應該使用embedding_lookup但不知道如何使用它。我真的喜歡它有人可以提供一些建議。

謝謝

回答

1

你是在正確的軌道上。由於embedding_lookup在假設單詞被表示爲整數ID的情況下工作,您需要將輸入向量轉換爲符合該條件。此外,您需要確保將轉換後的單詞正確地編入嵌入矩陣。我所做的是我使用了從嵌入模型生成的索引到字映射的信息(我使用gensim來訓練我的嵌入)來創建一個字 - 索引查找表,隨後我用它來轉換我的輸入向量。

+0

謝謝Frobb,我很高興聽到這個消息。我試圖使用「embedding_lookup」,但我有一個麻煩傳遞參數。我有訓練數據被標記,我用word2vec_basic.py來預訓練我的數據。我在很多網站上看過任何一些說我必須將單詞矢量映射到字典。像這樣 'embedded_chars = tf.nn.embedding_lookup(W,字典)' 但它給了錯誤的東西與張量的尺寸,我試圖改變變量「詞典」與「數據」或「reverse_dictionary」,但沒有幫助。你能給我一些建議嗎?謝謝 – ngoduyvu

+0

'embedding_lookup'的第二個參數應該是包含你輸入數據的張量。看看@Kashyap提供的博文,你會發現第二個參數是(批量)輸入的佔位符張量。您只需確保輸入數據的單詞已根據前面提到的字對索引方案轉換爲整數。 – Frobb

+0

在博客中,作者說「將詞彙詞索引映射到低維向量表示中」。在「word2vec_basic.py」變量「data」中存儲了distionary的索引。所以我這樣做: 'embedded_chars = tf.nn.embedding_lookup(W,data)' 我運行它,它沒有給出任何錯誤。你認爲這是一種正確的方式嗎? 謝謝 – ngoduyvu

2
+0

感謝您的回覆。他們的代碼差別不大。他們使用onehot向量來編碼該單詞,而不是真正的word2vec 在這一行中:我可以改變它嗎?我的final_embedded? 'byte_list = tf.reshape(learn.ops.one_hot_matrix(x,256), [-1,MAX_DOCUMENT_LENGTH,256,1])' – ngoduyvu