def call(self, inputs):
     segment, memory = inputs
     full = K.concatenate([K.zeros_like(memory[:, :, 0]), segment], axis=1)
     relative = K.not_equal(K.expand_dims(segment, axis=-1),
                            K.expand_dims(full, axis=1))
     relative = K.one_hot(K.cast(relative, 'uint8'), 2)
     return [relative, K.identity(self.embeddings)]
예제 #2
0
 def call(self, inputs, **kwargs):
     if K.dtype(inputs) != 'int32':
         inputs = K.cast(inputs, 'int32')
     if self.div_val == 1:
         out = K.gather(self.embeddings, inputs)
         if self.embed_dim != self.output_dim or self.force_projection:
             out = K.dot(out, self.projections)
     else:
         out = K.tile(
             K.expand_dims(K.zeros_like(inputs, dtype=K.floatx()), axis=-1),
             (1, ) * K.ndim(inputs) + (self.output_dim, ),
         )
         for i in range(len(self.cutoffs) - 1):
             embed_dim = self.embed_dim // (self.div_val**i)
             low, high = self.cutoffs[i], self.cutoffs[i + 1]
             mask = K.cast(low <= inputs, K.floatx()) * K.cast(
                 inputs < high, K.floatx())
             selected = K.gather(self.embeddings[i],
                                 (inputs - low) * K.cast(mask, 'int32'))
             if embed_dim != self.output_dim or self.force_projection:
                 projected = K.dot(selected, self.projections[i])
             else:
                 projected = selected
             out += projected * K.expand_dims(mask, axis=-1)
     if self.return_embeddings or self.return_projections:
         out = [out]
     if self.return_embeddings:
         if self.div_val == 1:
             out += [self.embeddings]
         else:
             out += [K.identity(embed) for embed in self.embeddings]
     if self.return_projections:
         if self.div_val == 1:
             if self.projections is not None:
                 out += [self.projections]
         else:
             out += [K.identity(proj) for proj in self.projections]
     return out
예제 #3
0
 def call(self, inputs):
     return [
         super(EmbeddingRet, self).call(inputs),
         K.identity(self.embeddings),
     ]
예제 #4
0
 def call(self, inputs, **kwargs):
     return K.identity(self.bias_context)
예제 #5
0
 def call(self, inputs, **kwargs):
     return K.identity(inputs[0])
예제 #6
0
 def call(self, inputs):
     return [
         super(TokenEmbedding, self).call(inputs),
         K.identity(self.embeddings)
     ]
예제 #7
0
 def call(self, inputs, **kwargs):
     return [
         K.identity(self.bias_context),
         K.identity(self.bias_relative),
     ]