2016-05-16 47 views
5

我正在使用embedding_lookup操作,以便爲我的文檔中的每個令牌生成密集的向量表示,這些向量用於卷積神經網絡(網絡結構類似於一個WildML article)。嵌入查找表不屏蔽填充值

一切工作正常,但是當我填充我的文檔插入填充值時,嵌入查找也生成此標記的向量。我認爲這種方法可能會改變分類任務的結果。我想達到的是類似於火炬LookupTableMaskZero所做的事情。

1)我想要做的是正確的嗎?

2)已經實現了這樣的東西? 3)如果不是,我如何屏蔽填充值以防止爲其生成相應的矢量?

謝謝你在前進,

亞歷山德羅

+0

你有沒有找到解決方案? – Shatu

回答

2

@Alessandro Suglia 我覺得這個功能是非常有用的,不幸的是TF現在不支持。 獲得相同結果但速度較慢的一種解決方法是查找兩次。 像下面

lookup_result = tf.nn.embedding_lookup(emb, index) 
    masked_emb = tf.concat(0, [tf.zeros([1, 1]), 
          tf.ones([emb.get_shape()[0] - 1, 1]) 
    mask_lookup_result = tf.nn.embedding_lookup(masked_emb, index) 
    lookup_result = tf.mul(lookup_result, mask_lookup_result) 
-1

這似乎是在RNN模型,我們並不需要,只要我們掩蓋虧損掩蓋填充值(損失是一樣的,不管我們是否屏蔽輸入填充,我得到的通過運行測試代碼得到結果)!

當然,當tf.nn.dynamic_rnn中的sequence_len參數未通過時,填充爲零可能會加速零乘法的計算。最後,如果模型會在序列之間進行交互(如CNN,卷積可能影響填充嵌入),則零填充嵌入是必需的。