class_docstr: A Keras Layer makes bilinear interaction of two vectors.
  
  This Keras Layer implements the bilinear interaction of two vectors of
  embedding dimensions. The bilinear, linear and scalar parameters of the
  interaction are trainable.
  
  The bilinear interaction are used in the work "Revisiting two tower models
  for unbiased learning to rank" by Yan et al, see
  https://research.google/pubs/pub51296/.
  In this work, the bilinear interaction appears to be helpful in model the
  complex interaction between position and relevance in unbiased LTR.
docstr: See tf.keras.layers.Layer.
docstr_tok: ["See","tf.keras.layers.Layer","."]
code: def build(self, input_shape: tf.TensorShape):
      """See tf.keras.layers.Layer."""
      # Create a trainable weight variable for this layer.
      self._bilinear_weight = self.add_weight(
          name="bilinear_term",
          shape=(
              self._embedding_dim,
              self._embedding_dim,
              self._output_dim,
          ),
          initializer=tf.keras.initializers.RandomNormal(
              stddev=1.0 / self._embedding_dim
          ),
          trainable=True,
      )
      self._linear_weight_1 = self.add_weight(
          name="linear_term_1",
          shape=(self._embedding_dim, self._output_dim),
          initializer=tf.keras.initializers.RandomNormal(
              stddev=1.0 / math.sqrt(self._embedding_dim)
          ),
          trainable=True,
      )
      self._linear_weight_2 = self.add_weight(
          name="linear_term_2",
          shape=(self._embedding_dim, self._output_dim),
          initializer=tf.keras.initializers.RandomNormal(
              stddev=1.0 / math.sqrt(self._embedding_dim)
          ),
          trainable=True,
      )
      self._bias = self.add_weight(
          name="const_term",
          shape=(self._output_dim),
          initializer=tf.keras.initializers.Zeros(),
          trainable=True,
      )
      super().build(input_shape)
  
imports: import math
  from typing import Any, Callable, Dict, List, Optional, Tuple
  import tensorflow
  from tensorflow_ranking.python import utils
label_desc: Use image node_id 2 for calling the Bilinear obj's underlying member method code with example usage: obj.build(input_shape) without return types