From 8d8f42109019baac2447a94bdc4f535ca32f86de Mon Sep 17 00:00:00 2001 From: Zhenya Razumovskaia Date: Thu, 2 Apr 2020 07:43:12 -0400 Subject: [PATCH 1/7] merge conflict --- rasa/nlu/classifiers/diet_classifier.py | 27 ++++++++++++++++--------- rasa/nlu/selectors/response_selector.py | 24 ++++++++++++++-------- rasa/utils/tensorflow/model_data.py | 14 +++++++++++++ 3 files changed, 47 insertions(+), 18 deletions(-) diff --git a/rasa/nlu/classifiers/diet_classifier.py b/rasa/nlu/classifiers/diet_classifier.py index 9d95e979294c..e6367da2c990 100644 --- a/rasa/nlu/classifiers/diet_classifier.py +++ b/rasa/nlu/classifiers/diet_classifier.py @@ -1255,10 +1255,12 @@ def _create_sequence( def _create_all_labels(self) -> Tuple[tf.Tensor, tf.Tensor]: all_label_ids = self.tf_label_data[LABEL_IDS][0] + + label_lengths = tf.cast(self.tf_label_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32) + mask_label = self.compute_mask(label_lengths) + x = self._create_bow( - self.tf_label_data[LABEL_FEATURES], - self.tf_label_data[LABEL_MASK][0], - self.label_name, + self.tf_label_data[LABEL_FEATURES], mask_label, self.label_name, ) all_labels_embed = self._tf_layers[f"embed.{LABEL}"](x) @@ -1352,13 +1354,17 @@ def _calculate_entity_loss( return loss, f1 + def compute_mask(self, sequence_lengths): + mask = tf.sequence_mask(sequence_lengths, dtype=tf.float32) + return tf.expand_dims(mask, -1) + def batch_loss( self, batch_in: Union[Tuple[tf.Tensor], Tuple[np.ndarray]] ) -> tf.Tensor: tf_batch_data = self.batch_to_model_data_format(batch_in, self.data_signature) - mask_text = tf_batch_data[TEXT_MASK][0] - sequence_lengths = self._get_sequence_lengths(mask_text) + sequence_lengths = tf.cast(tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32) + mask_text = self.compute_mask(sequence_lengths) ( text_transformed, @@ -1387,11 +1393,12 @@ def batch_loss( # get _cls_ vector for intent classification cls = self._last_token(text_transformed, sequence_lengths) + label_lengths = tf.cast(tf_batch_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32) + mask_label = self.compute_mask(label_lengths) + label_ids = tf_batch_data[LABEL_IDS][0] label = self._create_bow( - tf_batch_data[LABEL_FEATURES], - tf_batch_data[LABEL_MASK][0], - self.label_name, + tf_batch_data[LABEL_FEATURES], mask_label, self.label_name, ) loss, acc = self._calculate_label_loss(cls, label, label_ids) self.intent_loss.update_state(loss) @@ -1417,8 +1424,8 @@ def batch_predict( batch_in, self.predict_data_signature ) - mask_text = tf_batch_data[TEXT_MASK][0] - sequence_lengths = self._get_sequence_lengths(mask_text) + sequence_lengths = tf.cast(tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32) + mask_text = self.compute_mask(sequence_lengths) text_transformed, _, _, _ = self._create_sequence( tf_batch_data[TEXT_FEATURES], mask_text, self.text_name diff --git a/rasa/nlu/selectors/response_selector.py b/rasa/nlu/selectors/response_selector.py index b8b4c6081228..9c4c46bddaa4 100644 --- a/rasa/nlu/selectors/response_selector.py +++ b/rasa/nlu/selectors/response_selector.py @@ -432,8 +432,10 @@ def _prepare_layers(self) -> None: def _create_all_labels(self) -> Tuple[tf.Tensor, tf.Tensor]: all_label_ids = self.tf_label_data[LABEL_IDS][0] - mask_label = self.tf_label_data[LABEL_MASK][0] - sequence_lengths_label = self._get_sequence_lengths(mask_label) + sequence_lengths_label = tf.cast( + self.tf_label_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32 + ) + mask_label = self.compute_mask(sequence_lengths_label) label_transformed, _, _, _ = self._create_sequence( self.tf_label_data[LABEL_FEATURES], mask_label, self.label_name @@ -449,8 +451,10 @@ def batch_loss( ) -> tf.Tensor: tf_batch_data = self.batch_to_model_data_format(batch_in, self.data_signature) - mask_text = tf_batch_data[TEXT_MASK][0] - sequence_lengths_text = self._get_sequence_lengths(mask_text) + sequence_lengths_text = tf.cast( + tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32 + ) + mask_text = self.compute_mask(sequence_lengths_text) ( text_transformed, @@ -465,8 +469,10 @@ def batch_loss( sequence_ids=True, ) - mask_label = tf_batch_data[LABEL_MASK][0] - sequence_lengths_label = self._get_sequence_lengths(mask_label) + sequence_lengths_label = tf.cast( + tf_batch_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32 + ) + mask_label = self.compute_mask(sequence_lengths_label) label_transformed, _, _, _ = self._create_sequence( tf_batch_data[LABEL_FEATURES], mask_label, self.label_name @@ -506,8 +512,10 @@ def batch_predict( batch_in, self.predict_data_signature ) - mask_text = tf_batch_data[TEXT_MASK][0] - sequence_lengths_text = self._get_sequence_lengths(mask_text) + sequence_lengths_text = tf.cast( + tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32 + ) + mask_text = self.compute_mask(sequence_lengths_text) text_transformed, _, _, _ = self._create_sequence( tf_batch_data[TEXT_FEATURES], mask_text, self.text_name diff --git a/rasa/utils/tensorflow/model_data.py b/rasa/utils/tensorflow/model_data.py index 0fbdba4e9d86..a6ae957a8f98 100644 --- a/rasa/utils/tensorflow/model_data.py +++ b/rasa/utils/tensorflow/model_data.py @@ -160,6 +160,20 @@ def add_mask(self, key: Text, from_key: Text): self.data[key].append(mask) break + def add_lengths(self, key: Text, from_key: Text): + if not self.data.get(from_key): + return + + self.data[key] = [] + + for data in self.data[from_key]: + if data.size > 0: + # explicitly add last dimension to mask + # to track correctly dynamic sequences + lengths = np.array([x.shape[0] for x in data]) + self.data[key].append(lengths) + break + def split( self, number_of_test_examples: int, random_seed: int ) -> Tuple["RasaModelData", "RasaModelData"]: From d4564ecd97e81969a494f6e6e4c2f96ccb5c4618 Mon Sep 17 00:00:00 2001 From: Zhenya Razumovskaia Date: Thu, 2 Apr 2020 09:12:47 -0400 Subject: [PATCH 2/7] small changes --- rasa/nlu/classifiers/diet_classifier.py | 10 +++++----- rasa/nlu/selectors/response_selector.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rasa/nlu/classifiers/diet_classifier.py b/rasa/nlu/classifiers/diet_classifier.py index e6367da2c990..90952e964639 100644 --- a/rasa/nlu/classifiers/diet_classifier.py +++ b/rasa/nlu/classifiers/diet_classifier.py @@ -87,10 +87,10 @@ TEXT_FEATURES = f"{TEXT}_features" LABEL_FEATURES = f"{LABEL}_features" -TEXT_MASK = f"{TEXT}_mask" -LABEL_MASK = f"{LABEL}_mask" LABEL_IDS = f"{LABEL}_ids" TAG_IDS = "tag_ids" +TEXT_SEQ_LENGTH = f"{TEXT}_lengths" +LABEL_SEQ_LENGTH = f"{LABEL}_lengths" class DIETClassifier(IntentClassifier, EntityExtractor): @@ -484,7 +484,7 @@ def _create_label_data( # to track correctly dynamic sequences label_data.add_features(LABEL_IDS, [np.expand_dims(label_ids, -1)]) - label_data.add_mask(LABEL_MASK, LABEL_FEATURES) + label_data.add_lengths(LABEL_SEQ_LENGTH, LABEL_FEATURES) return label_data @@ -558,8 +558,8 @@ def _create_model_data( model_data.add_features(LABEL_IDS, [np.expand_dims(label_ids, -1)]) model_data.add_features(TAG_IDS, [tag_ids]) - model_data.add_mask(TEXT_MASK, TEXT_FEATURES) - model_data.add_mask(LABEL_MASK, LABEL_FEATURES) + model_data.add_lengths(TEXT_SEQ_LENGTH, TEXT_FEATURES) + model_data.add_lengths(LABEL_SEQ_LENGTH, LABEL_FEATURES) return model_data diff --git a/rasa/nlu/selectors/response_selector.py b/rasa/nlu/selectors/response_selector.py index 9c4c46bddaa4..91d924b747ab 100644 --- a/rasa/nlu/selectors/response_selector.py +++ b/rasa/nlu/selectors/response_selector.py @@ -17,9 +17,9 @@ DIET, TEXT_FEATURES, LABEL_FEATURES, - TEXT_MASK, - LABEL_MASK, LABEL_IDS, + TEXT_SEQ_LENGTH, + LABEL_SEQ_LENGTH, ) from rasa.utils.tensorflow.constants import ( LABEL, From 18e4b790607152a0e1a9df53353804517dd01d78 Mon Sep 17 00:00:00 2001 From: Zhenya Razumovskaia Date: Thu, 2 Apr 2020 11:33:45 -0400 Subject: [PATCH 3/7] small changed by comments --- rasa/nlu/classifiers/diet_classifier.py | 16 +++++++--------- rasa/nlu/selectors/response_selector.py | 8 ++++---- rasa/utils/tensorflow/model_data.py | 21 +++------------------ 3 files changed, 14 insertions(+), 31 deletions(-) diff --git a/rasa/nlu/classifiers/diet_classifier.py b/rasa/nlu/classifiers/diet_classifier.py index 90952e964639..2293e8a7637c 100644 --- a/rasa/nlu/classifiers/diet_classifier.py +++ b/rasa/nlu/classifiers/diet_classifier.py @@ -1165,10 +1165,6 @@ def _prepare_entity_recognition_layers(self) -> None: average="micro", ) - @staticmethod - def _get_sequence_lengths(mask: tf.Tensor) -> tf.Tensor: - return tf.cast(tf.reduce_sum(mask[:, :, 0], axis=1), tf.int32) - def _combine_sparse_dense_features( self, features: List[Union[np.ndarray, tf.Tensor, tf.SparseTensor]], @@ -1257,7 +1253,7 @@ def _create_all_labels(self) -> Tuple[tf.Tensor, tf.Tensor]: all_label_ids = self.tf_label_data[LABEL_IDS][0] label_lengths = tf.cast(self.tf_label_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32) - mask_label = self.compute_mask(label_lengths) + mask_label = self._compute_mask(label_lengths) x = self._create_bow( self.tf_label_data[LABEL_FEATURES], mask_label, self.label_name, @@ -1354,8 +1350,10 @@ def _calculate_entity_loss( return loss, f1 - def compute_mask(self, sequence_lengths): + def _compute_mask(self, sequence_lengths: tf.Tensor) -> tf.Tensor: mask = tf.sequence_mask(sequence_lengths, dtype=tf.float32) + # explicitly add last dimension to mask + # to track correctly dynamic sequences return tf.expand_dims(mask, -1) def batch_loss( @@ -1364,7 +1362,7 @@ def batch_loss( tf_batch_data = self.batch_to_model_data_format(batch_in, self.data_signature) sequence_lengths = tf.cast(tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32) - mask_text = self.compute_mask(sequence_lengths) + mask_text = self._compute_mask(sequence_lengths) ( text_transformed, @@ -1394,7 +1392,7 @@ def batch_loss( cls = self._last_token(text_transformed, sequence_lengths) label_lengths = tf.cast(tf_batch_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32) - mask_label = self.compute_mask(label_lengths) + mask_label = self._compute_mask(label_lengths) label_ids = tf_batch_data[LABEL_IDS][0] label = self._create_bow( @@ -1425,7 +1423,7 @@ def batch_predict( ) sequence_lengths = tf.cast(tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32) - mask_text = self.compute_mask(sequence_lengths) + mask_text = self._compute_mask(sequence_lengths) text_transformed, _, _, _ = self._create_sequence( tf_batch_data[TEXT_FEATURES], mask_text, self.text_name diff --git a/rasa/nlu/selectors/response_selector.py b/rasa/nlu/selectors/response_selector.py index 91d924b747ab..36f4318c22e0 100644 --- a/rasa/nlu/selectors/response_selector.py +++ b/rasa/nlu/selectors/response_selector.py @@ -435,7 +435,7 @@ def _create_all_labels(self) -> Tuple[tf.Tensor, tf.Tensor]: sequence_lengths_label = tf.cast( self.tf_label_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32 ) - mask_label = self.compute_mask(sequence_lengths_label) + mask_label = self._compute_mask(sequence_lengths_label) label_transformed, _, _, _ = self._create_sequence( self.tf_label_data[LABEL_FEATURES], mask_label, self.label_name @@ -454,7 +454,7 @@ def batch_loss( sequence_lengths_text = tf.cast( tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32 ) - mask_text = self.compute_mask(sequence_lengths_text) + mask_text = self._compute_mask(sequence_lengths_text) ( text_transformed, @@ -472,7 +472,7 @@ def batch_loss( sequence_lengths_label = tf.cast( tf_batch_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32 ) - mask_label = self.compute_mask(sequence_lengths_label) + mask_label = self._compute_mask(sequence_lengths_label) label_transformed, _, _, _ = self._create_sequence( tf_batch_data[LABEL_FEATURES], mask_label, self.label_name @@ -515,7 +515,7 @@ def batch_predict( sequence_lengths_text = tf.cast( tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32 ) - mask_text = self.compute_mask(sequence_lengths_text) + mask_text = self._compute_mask(sequence_lengths_text) text_transformed, _, _, _ = self._create_sequence( tf_batch_data[TEXT_FEATURES], mask_text, self.text_name diff --git a/rasa/utils/tensorflow/model_data.py b/rasa/utils/tensorflow/model_data.py index a6ae957a8f98..13b5033e510e 100644 --- a/rasa/utils/tensorflow/model_data.py +++ b/rasa/utils/tensorflow/model_data.py @@ -144,23 +144,10 @@ def add_features(self, key: Text, features: List[np.ndarray]): # update number of examples self.num_examples = self.number_of_examples() - def add_mask(self, key: Text, from_key: Text): - """Calculate mask for given key and put it under specified key.""" - - if not self.data.get(from_key): - return - - self.data[key] = [] - - for data in self.data[from_key]: - if data.size > 0: - # explicitly add last dimension to mask - # to track correctly dynamic sequences - mask = np.array([np.ones((x.shape[0], 1)) for x in data]) - self.data[key].append(mask) - break - def add_lengths(self, key: Text, from_key: Text): + """ + Adds np.array of lengths of sequences to data under given key + """ if not self.data.get(from_key): return @@ -168,8 +155,6 @@ def add_lengths(self, key: Text, from_key: Text): for data in self.data[from_key]: if data.size > 0: - # explicitly add last dimension to mask - # to track correctly dynamic sequences lengths = np.array([x.shape[0] for x in data]) self.data[key].append(lengths) break From e0201f1457d26f83e8be9d5401aae0c749f7cfd6 Mon Sep 17 00:00:00 2001 From: Zhenya Razumovskaia Date: Thu, 2 Apr 2020 12:06:45 -0400 Subject: [PATCH 4/7] None return type --- rasa/utils/tensorflow/model_data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rasa/utils/tensorflow/model_data.py b/rasa/utils/tensorflow/model_data.py index 13b5033e510e..88f7cf28d3b2 100644 --- a/rasa/utils/tensorflow/model_data.py +++ b/rasa/utils/tensorflow/model_data.py @@ -144,7 +144,7 @@ def add_features(self, key: Text, features: List[np.ndarray]): # update number of examples self.num_examples = self.number_of_examples() - def add_lengths(self, key: Text, from_key: Text): + def add_lengths(self, key: Text, from_key: Text) -> None: """ Adds np.array of lengths of sequences to data under given key """ From d4b7b5107a0e3bf14844010f4924a58623fa275e Mon Sep 17 00:00:00 2001 From: Evgeniia Date: Fri, 3 Apr 2020 03:40:51 -0400 Subject: [PATCH 5/7] Update docstring Co-Authored-By: Tanja --- rasa/utils/tensorflow/model_data.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/rasa/utils/tensorflow/model_data.py b/rasa/utils/tensorflow/model_data.py index 88f7cf28d3b2..a233cbc4cc6b 100644 --- a/rasa/utils/tensorflow/model_data.py +++ b/rasa/utils/tensorflow/model_data.py @@ -145,9 +145,7 @@ def add_features(self, key: Text, features: List[np.ndarray]): self.num_examples = self.number_of_examples() def add_lengths(self, key: Text, from_key: Text) -> None: - """ - Adds np.array of lengths of sequences to data under given key - """ + """Adds np.array of lengths of sequences to data under given key.""" if not self.data.get(from_key): return From ae6dd7b5ee28a593bd8247834a88989d0a393cdf Mon Sep 17 00:00:00 2001 From: Zhenya Razumovskaia Date: Fri, 3 Apr 2020 04:40:01 -0400 Subject: [PATCH 6/7] sequence length as a separate method --- rasa/nlu/classifiers/diet_classifier.py | 14 +++++++++----- rasa/nlu/selectors/response_selector.py | 16 ++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/rasa/nlu/classifiers/diet_classifier.py b/rasa/nlu/classifiers/diet_classifier.py index 2293e8a7637c..9360ceebfef6 100644 --- a/rasa/nlu/classifiers/diet_classifier.py +++ b/rasa/nlu/classifiers/diet_classifier.py @@ -1252,7 +1252,7 @@ def _create_sequence( def _create_all_labels(self) -> Tuple[tf.Tensor, tf.Tensor]: all_label_ids = self.tf_label_data[LABEL_IDS][0] - label_lengths = tf.cast(self.tf_label_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32) + label_lengths = self.sequence_lengths_for(self.tf_label_data[LABEL_SEQ_LENGTH][0]) mask_label = self._compute_mask(label_lengths) x = self._create_bow( @@ -1350,18 +1350,22 @@ def _calculate_entity_loss( return loss, f1 - def _compute_mask(self, sequence_lengths: tf.Tensor) -> tf.Tensor: + @staticmethod + def _compute_mask(sequence_lengths: tf.Tensor) -> tf.Tensor: mask = tf.sequence_mask(sequence_lengths, dtype=tf.float32) # explicitly add last dimension to mask # to track correctly dynamic sequences return tf.expand_dims(mask, -1) + def sequence_lengths_for(self, sequence_lengths: tf.Tensor) -> tf.Tensor: + return tf.cast(sequence_lengths, dtype=tf.int32) + def batch_loss( self, batch_in: Union[Tuple[tf.Tensor], Tuple[np.ndarray]] ) -> tf.Tensor: tf_batch_data = self.batch_to_model_data_format(batch_in, self.data_signature) - sequence_lengths = tf.cast(tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32) + sequence_lengths = self.sequence_lengths_for(tf_batch_data[TEXT_SEQ_LENGTH][0]) mask_text = self._compute_mask(sequence_lengths) ( @@ -1391,7 +1395,7 @@ def batch_loss( # get _cls_ vector for intent classification cls = self._last_token(text_transformed, sequence_lengths) - label_lengths = tf.cast(tf_batch_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32) + label_lengths = self.sequence_lengths_for(tf_batch_data[LABEL_SEQ_LENGTH][0]) mask_label = self._compute_mask(label_lengths) label_ids = tf_batch_data[LABEL_IDS][0] @@ -1422,7 +1426,7 @@ def batch_predict( batch_in, self.predict_data_signature ) - sequence_lengths = tf.cast(tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32) + sequence_lengths = self.sequence_lengths_for(tf_batch_data[TEXT_SEQ_LENGTH][0]) mask_text = self._compute_mask(sequence_lengths) text_transformed, _, _, _ = self._create_sequence( diff --git a/rasa/nlu/selectors/response_selector.py b/rasa/nlu/selectors/response_selector.py index 36f4318c22e0..75ff9815ac26 100644 --- a/rasa/nlu/selectors/response_selector.py +++ b/rasa/nlu/selectors/response_selector.py @@ -432,8 +432,8 @@ def _prepare_layers(self) -> None: def _create_all_labels(self) -> Tuple[tf.Tensor, tf.Tensor]: all_label_ids = self.tf_label_data[LABEL_IDS][0] - sequence_lengths_label = tf.cast( - self.tf_label_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32 + sequence_lengths_label = self.sequence_lengths_for( + self.tf_label_data[LABEL_SEQ_LENGTH][0] ) mask_label = self._compute_mask(sequence_lengths_label) @@ -451,8 +451,8 @@ def batch_loss( ) -> tf.Tensor: tf_batch_data = self.batch_to_model_data_format(batch_in, self.data_signature) - sequence_lengths_text = tf.cast( - tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32 + sequence_lengths_text = self.sequence_lengths_for( + tf_batch_data[TEXT_SEQ_LENGTH][0] ) mask_text = self._compute_mask(sequence_lengths_text) @@ -469,8 +469,8 @@ def batch_loss( sequence_ids=True, ) - sequence_lengths_label = tf.cast( - tf_batch_data[LABEL_SEQ_LENGTH][0], dtype=tf.int32 + sequence_lengths_label = self.sequence_lengths_for( + tf_batch_data[LABEL_SEQ_LENGTH][0] ) mask_label = self._compute_mask(sequence_lengths_label) @@ -512,8 +512,8 @@ def batch_predict( batch_in, self.predict_data_signature ) - sequence_lengths_text = tf.cast( - tf_batch_data[TEXT_SEQ_LENGTH][0], dtype=tf.int32 + sequence_lengths_text = self.sequence_lengths_for( + tf_batch_data[TEXT_SEQ_LENGTH][0] ) mask_text = self._compute_mask(sequence_lengths_text) From 75ac65275bde16891b03ce15021c2ede601abf4e Mon Sep 17 00:00:00 2001 From: Zhenya Razumovskaia Date: Fri, 3 Apr 2020 06:12:51 -0400 Subject: [PATCH 7/7] black --- rasa/nlu/classifiers/diet_classifier.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/rasa/nlu/classifiers/diet_classifier.py b/rasa/nlu/classifiers/diet_classifier.py index 9360ceebfef6..1a901bde4dc8 100644 --- a/rasa/nlu/classifiers/diet_classifier.py +++ b/rasa/nlu/classifiers/diet_classifier.py @@ -1252,7 +1252,9 @@ def _create_sequence( def _create_all_labels(self) -> Tuple[tf.Tensor, tf.Tensor]: all_label_ids = self.tf_label_data[LABEL_IDS][0] - label_lengths = self.sequence_lengths_for(self.tf_label_data[LABEL_SEQ_LENGTH][0]) + label_lengths = self.sequence_lengths_for( + self.tf_label_data[LABEL_SEQ_LENGTH][0] + ) mask_label = self._compute_mask(label_lengths) x = self._create_bow( @@ -1395,7 +1397,9 @@ def batch_loss( # get _cls_ vector for intent classification cls = self._last_token(text_transformed, sequence_lengths) - label_lengths = self.sequence_lengths_for(tf_batch_data[LABEL_SEQ_LENGTH][0]) + label_lengths = self.sequence_lengths_for( + tf_batch_data[LABEL_SEQ_LENGTH][0] + ) mask_label = self._compute_mask(label_lengths) label_ids = tf_batch_data[LABEL_IDS][0]