baidu / Senta

Baidu's open-source Sentiment Analysis System.
Apache License 2.0
1.9k stars 371 forks source link

例子中的aspect_sentiment是否有误? #25

Open MrWaterZhou opened 4 years ago

MrWaterZhou commented 4 years ago

开源先点个赞 但是例子中的aspect_sentiment是不是有误

In [8]: my_senta.init_model(model_class="ernie_1.0_skep_large_ch", task="aspect_
   ...: sentiment_classify", use_cuda=use_cuda)
   ...: texts = ["百度是一家高科技公司"]
   ...: aspects = ["高科技"]
   ...: result = my_senta.predict(texts, aspects)
   ...: print(result)
[('百度是一家高科技公司', 'negative')]

看了源码调用Senta.predict, 其中好像并没有在预测用到aspects

    def predict(self, texts_, aspects=None):
        """
        the sentiment classifier's function
        :param texts: a unicode string or a list of unicode strings.
        :return: sentiment prediction results.
        """
        if isinstance(texts_, text_type):
            texts_ = [texts_]

        if isinstance(aspects, text_type):
            aspects = [aspects]

        return_list = convert_texts_to_ids(texts_, self.tokenizer, self.max_seq_len, \
                self.truncation_type, self.padding_id)
        record_dict = structure_fields_dict(return_list, 0, need_emb=False)
        input_list = []
        for item in self.input_keys:
            kv = item.split("#")
            name = kv[0]
            key = kv[1]
            input_item = record_dict[InstanceName.RECORD_ID][key]
            input_list.append(input_item)
        inputs = [array2tensor(ndarray) for ndarray in input_list]
        result = self.inference.run(inputs)
        batch_result = self.model_class.parse_predict_result(result)
        results = []
        if self.inference_type == 'seq_lab':
            for text, probs in zip(texts_, batch_result):
                label = [self.label_map[l] for l in probs]
                results.append((text, label))
        else:
            for text, probs in zip(texts_, batch_result):
                label = self.label_map[np.argmax(probs)]
                results.append((text, label))
        return results
rookiechw commented 4 years ago

没搞懂 aspect_sentiment_classify 与 sentiment_classify 任务有什么区别。同求解答

mengxj08 commented 3 years ago

@xfcygaocan 同问,这里的源码predict函数, 并没有在预测时候用到aspects

wenku1992abc commented 3 years ago

首先开源太棒了,点赞点赞 同样,尝试了一个例子之后,效果不太理想

my_senta.init_model(model_class="ernie_1.0_skep_large_ch", task="aspect_sentiment_classify", use_cuda=use_cuda) texts = ["这家的饭不好吃,但是水好喝"] aspects = ["饭"] result = my_senta.predict(texts, aspects) print(result) [('这家的饭不好吃,但是水好喝', 'positive')]

想着只是初始化的模型,后续还需要我们再次训练吧~~