La tabla de búsqueda de incrustación no enmascara el valor de relleno

Estoy usando una operación embedding_lookup para generar representaciones de vectores densos para cada token en mi documento que se alimentan a una neural network convolucional (la architecture de red es similar a la de un artículo de WildML ).

Todo funciona correctamente, pero cuando relleno mi documento insertando un valor de relleno en él, la búsqueda de incrustación también genera un vector para este token. Creo que este enfoque podría alterar los resultados en la tarea de clasificación. Lo que quiero lograr es algo similar a lo que hace Torch LookupTableMaskZero .

1) ¿Es correcto lo que quiero hacer?

2) ¿Ya está implementado algo así?

3) Si no, ¿cómo puedo enmascarar el valor de relleno para evitar que se genere el vector correspondiente?

Gracias de antemano,

Alessandro

@Alessandro Suglia Creo que esta función es útil, desafortunadamente no es compatible en este momento. Una solución para obtener el mismo resultado pero es más lenta es buscar dos veces. como abajo

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) 

Parece que en el modelo rnn, no necesitamos enmascarar el valor de relleno siempre que enmascaremos la pérdida (la pérdida es igual, no importa si enmascaramos el relleno de entrada, obtengo el resultado ejecutando un código de prueba).

Por supuesto, cero el relleno puede acelerar el cálculo de cero multiplicado cuando no se pasa el parámetro sequence_len en tf.nn.dynamic_rnn .

Al final, si el modelo interactúa entre secuencias (como CNN, la convolución puede afectar la incrustación de relleno), es necesaria la inserción de relleno cero.