in tensorflow_addons/layers/crf.py [0:0]
def call(self, inputs, mask=None):
# mask: Tensor(shape=(batch_size, sequence_length), dtype=bool) or None
if mask is not None:
if tf.keras.backend.ndim(mask) != 2:
raise ValueError("Input mask to CRF must have dim 2 if not None")
if mask is not None:
# left padding of mask is not supported, due the underline CRF function
# detect it and report it to user
left_boundary_mask = self._compute_mask_left_boundary(mask)
first_mask = left_boundary_mask[:, 0]
if first_mask is not None and tf.executing_eagerly():
no_left_padding = tf.math.reduce_all(first_mask)
left_padding = not no_left_padding
if left_padding:
raise NotImplementedError(
"Currently, CRF layer do not support left padding"
)
potentials = self._dense_layer(inputs)
# appending boundary probability info
if self.use_boundary:
potentials = self.add_boundary_energy(
potentials, mask, self.left_boundary, self.right_boundary
)
sequence_length = self._get_sequence_length(inputs, mask)
decoded_sequence, _ = self.get_viterbi_decoding(potentials, sequence_length)
return [decoded_sequence, potentials, sequence_length, self.chain_kernel]