code: def embedding(x,
                vocab_size,
                dense_size,
                name=None,
                reuse=None,
                multiplier=1.0,
                symbol_dropout_rate=0.0,
                embedding_var=None,
                dtype=tf.float32):
    
    with tf.variable_scope(
        name, default_name="embedding", values=[x], reuse=reuse, dtype=dtype):
      if embedding_var is None:
        embedding_var = tf.get_variable("kernel", [vocab_size, dense_size])
      # On the backwards pass, we want to convert the gradient from
      # an indexed-slices to a regular tensor before sending it back to the
      # parameter server. This avoids excess computation on the parameter server.
      if not tf.executing_eagerly():
        embedding_var = convert_gradient_to_tensor(embedding_var)
      x = dropout_no_scaling(x, 1.0 - symbol_dropout_rate)
      emb_x = gather(embedding_var, x, dtype)
      if multiplier != 1.0:
        emb_x *= multiplier
      static_shape = emb_x.shape.as_list()
      if len(static_shape) < 5:
        return emb_x
      assert len(static_shape) == 5
      # If we had an extra channel dimension, assume it's 1, i.e. shape[3] == 1.
      return tf.squeeze(emb_x, 3)
docs: Embed x of type int64 into dense vectors, reducing to max 4 dimensions.