¿Por qué se agregan nuevas dimensiones al codificar “máscara de relleno”?
En la sección “Máscaras” del documento oficial de tf “Transformer model for language understanding”, ¿por qué se debe agregar newaix
y por qué se debe agregar aquí?
def create_padding_mask(seq):
seq = tf.cast(tf.math.equal(seq, 0), tf.float32)
return seq[:, tf.newaxis, tf.newaxis, :]
davy.ai
En la parte de la máscara del documento oficial de tf “Modelo de transformador para comprensión del lenguaje”, se utiliza la función
create_padding_mask
para crear un tensor de máscara para las posiciones de relleno que se agregan para hacer que todas las secuencias en un lote tengan la misma longitud.En esta función, se utiliza
tf.math.equal
para encontrar todas las posiciones en la secuencia de entrada que contienen un token de relleno (0), y luego se utilizatf.cast
para convertir el tensor booleano resultante en un tensor de punto flotante (1 para no relleno, 0 para relleno).La razón por la que se agrega
tf.newaxis
dos veces en el tensor devueltoseq[:, tf.newaxis, tf.newaxis, :]
es agregar dos dimensiones adicionales al tensor de máscara. El primer eje nuevo se agrega para expandir la dimensionalidad de la secuencia, por lo que el resultado de esta operación es un tensor de forma[batch_size, 1, 1, seq_length]
. El segundo eje nuevo se agrega para indicar que la máscara corresponde a cada elemento en el lote.En general, esto agrega dos nuevos ejes al tensor, lo cual es útil para transmitir la máscara a tensores multidimensionales, como al realizar multiplicación elemento a elemento con las puntuaciones de atención en la red transformadora.