RNN para modelado de idiomas en Tensorflow. ¿Cómo puedo rellenar las secuencias si mi entrada está constituida por la incorporación de palabras?

Lo hice yo mismo y, sinceramente, sugeriría hacerlo primero “a mano”, ya que te hará comprender lo que está sucediendo. Te sugiero el muy buen tutorial Danijar Hafner – Longitudes de secuencia variables en TensorFlow. El código en sí puede estar un poco desactualizado, pero puedes entender el principio.

El punto es, como dijiste, usar una matriz de 0 (ver a continuación por qué 0 es un buen valor para el relleno), y considerar solo valores que no sean 0 (es decir, datos reales). Como se ha dicho, la dimensión de este vector no tiene nada que ver con su tamaño de incrustación. En algún momento se elige que se ajuste a una oración completa para que pueda elegir algo como 20-30. Esto dependerá de su necesidad y tendrá consecuencias en su rendimiento.

Usted ya señaló que esto es un gran desperdicio. Y, de hecho, no solo de la memoria sino también del tiempo de procesamiento, ya que TensorFlow de alguna manera procesará el valor de relleno (pero “ignorará” los resultados). La forma más inteligente de hacerlo se llama bucketing. Aquí se explica: Modelos de secuencia a secuencia | TensorFlow. Explicar el uso de bucketing aquí sería una pobre reformulación de este tutorial, será mejor que lo leas 🙂

No lo dudes si tienes preguntas. Podría indicarle que implemente el código, pero me resulta mucho más complicado entender el tutorial.

Espero eso ayude

pltrdy


Acerca del relleno 0: Lo bueno del relleno 0 es que facilita la obtención de la máscara. El objetivo de una máscara es ser 1 para datos reales y 0 para relleno. Luego puede usarlo para “ignorar” los valores de relleno. Resulta que, a partir de sus datos x, la máscara es `mask = tf.sign (x)` porque el signo (x_i) es: -1 si x_i <0; 0 si x_i = 0; y 1 si x_i = 0.

Use tf.train.batch y utilice el parámetro de relleno dinámico. Además, la variabilidad en la longitud de la secuencia vendría de la longitud de su oración / frase en lugar de su dimensión de inserción (piense en sus tensores de entrada como batch_size, variable_sequence_len_rendered_constant_with_padding, fixed_embedding_size