tf.contrib.layers.embed_sequence () es para qué?

Encontré la función tf.contrib.layers.embed_sequence() en los últimos ejemplos de Tensorflow , pero no está incluida en la API principal. No se por que Cualquier explicación acerca de cómo funciona sería apreciada.

Puedo pensar en dos razones principales por las que tensorflow.contrib.layers.embed_sequence es útil:

  1. Al crear un modelo de neural network que tiene varias puertas que toman funciones como entrada, mediante el uso de tensorflow.contrib.layers.embed_sequence , puede reducir el número de parámetros en su red al tiempo que conserva la profundidad. Por ejemplo, elimina la necesidad de que cada compuerta del LSTM realice su propia proyección lineal de características.
  2. Permite formas de entrada arbitrarias, lo que ayuda a que la implementación sea simple y flexible.

Digamos que tengo un conjunto de datos que se parece a esto:

[("garbage piles in the city","Garbage"), ("city is clogged with vehicles","Traffic")]

Quiero tomar el primer elemento de cada tupla, que es una secuencia de palabras. Las palabras deben estar incrustadas en una forma vectorial. Como primer paso, se deben convertir como índices o números. Por ejemplo, en este caso, el vocabulario será:

 vocab = [{'garbage':1}, {'piles':2}, {'in':3}, {'the':4}, {'city':5}, {'is':6}, {'clogged':7}, {'with':8}, {'vehicles':9}] 

El texto codificado se verá así:

 features = [[1, 2, 3, 4, 5], [5, 6, 7, 8, 9]] 

Pasa este texto codificado como features a esta función en lotes:

 features_embedded = tf.contrib.layers.embed_sequence( ids=features, vocab_size=len(vocab), embed_dim=EMBEDDING_SIZE, scope='words' ) 

Ahora, cada palabra que se representa utilizando los índices (1 a 5), ​​se incrusta en un vector de tamaño EMBEDDING_SIZE .

Si el tamaño del lote es 2 (es decir, 2 secuencias en un lote) y EMBEDDING_SIZE es 10, la salida será una matriz de forma (2, 5, 10)

Salida de muestra:

 [[[0.1, 0.3, 0.4, 0.2, 0.5, 0.2, 0.2, 0.2, 0.4, 0.1], # garbage [0.1, 0.3, 0.4, 0.2, 0.5, 0.2, 0.1, 0.2, 0.4, 0.1], # piles [0.1, 0.3, 0.4, 0.2, 0.5, 0.2, 0.4, 0.2, 0.4, 0.1], # in [0.1, 0.3, 0.4, 0.2, 0.5, 0.3, 0.1, 0.2, 0.4, 0.1], # the [0.1, 0.3, 0.4, 0.2, 0.5, 0.2, 0.1, 0.2, 0.4, 0.6]], # city [sent2]] 

sent2 se codifica de manera similar (5 x 10 matriz).

Espero que esto quede claro.