From c058364a55146769ba7d8a22f06d0598cea3f35d Mon Sep 17 00:00:00 2001 From: 46319943 <495384481@qq.com> Date: Tue, 28 Dec 2021 13:52:58 +0800 Subject: [PATCH] Batch features to make the model more efficient (#1730) The original model didn't batch features, instead, it iterates the list to predict a single input at once. Upon stacking the input features, we can make the model more efficient. Co-authored-by: wuzewu Co-authored-by: Linjie Chen <40840292+linjieccc@users.noreply.github.com> --- .../ernie_skep_sentiment_analysis/module.py | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/modules/text/sentiment_analysis/ernie_skep_sentiment_analysis/module.py b/modules/text/sentiment_analysis/ernie_skep_sentiment_analysis/module.py index e7021284..e30d80fc 100644 --- a/modules/text/sentiment_analysis/ernie_skep_sentiment_analysis/module.py +++ b/modules/text/sentiment_analysis/ernie_skep_sentiment_analysis/module.py @@ -139,14 +139,29 @@ class ErnieSkepSentimentAnalysis(TransformerModule): ) results = [] + feature_list = [] for text in texts: + # feature.shape: [1, 512, 1] + # batch on the first dimension feature = self._convert_text_to_feature(text) - inputs = [self.array2tensor(ndarray) for ndarray in feature] - output = self.predictor.run(inputs) - probilities = np.array(output[0].data.float_data()) + feature_list.append(feature) + + feature_batch = [ + np.concatenate([feature[0] for feature in feature_list], axis=0), + np.concatenate([feature[1] for feature in feature_list], axis=0), + np.concatenate([feature[2] for feature in feature_list], axis=0), + np.concatenate([feature[3] for feature in feature_list], axis=0), + np.concatenate([feature[4] for feature in feature_list], axis=0), + ] + + inputs = [self.array2tensor(ndarray) for ndarray in feature_batch] + output = self.predictor.run(inputs) + probilities_list = np.array(output[0].data.float_data()) + probilities_list = probilities_list.reshape((-1, 2)) + for i, probilities in enumerate(probilities_list): label = self.label_map[np.argmax(probilities)] result = { - 'text': text, + 'text': texts[i], 'sentiment_label': label, 'positive_probs': probilities[1], 'negative_probs': probilities[0] -- GitLab