yangheng95/LCF-ATEPC

你好,我试验了你们的这个多任务学习模型,有一些问题想请教。

zhujinqiu opened this issue · 3 comments

模型在预测时候,对于方面Aspect term的抽取效果很好,但是对于语句话如果有多个aspect,且他们情感极性相反时,他的预测情感极性就会出错。我实验了很多次。比如我输入的测试句子明显带有正负向的情感倾向,如'the staff was so nice to us ,But the service was bad ',他返回的一直都是同一个情感倾向: 'aspect': ['staff', 'service'] ;'sentiment': ['Negative', 'Negative']。除了我自己训练的模型,你们预训练好的模型我也试过,针对这种情况很难预测出一句话包含多个aspect且有相反情感极性的句子。请问这个问题如何解决。
AA

简而言之,多任务模型采用bert-base预测模型,也就是所有的aspect输出的极性都是这个sentence的全局极性。我把bert_spc在预测极性阶段启用了,但是spc在训练时并没有启用,所以存在一定矛盾。你可以升级到1.6.11版本测试效果。如果追求分类效果,请关注其他APC专用模型,例如https://paperswithcode.com/sota/aspect-based-sentiment-analysis-on-semeval 上的模型,或者PyABSA提供的其他模型

@yangheng95 好的,还有我发现了一个bug,我跑debug的时候发现的,你们这里 aspect_tokens = example.text_b[:]输出的结果不是aspect token,比如第一个句子"the staff is horrible to us",你们这行代码输出的是[“the" ",staff” ]并不是['staff'],这就导致后面的text_left, _, text_right(206行)输出的结果都不对,还有204行代码也有问题aspect = ' '.join(example.text_b)这个输出不是aspect字符串。
我后来对你们的代码进行了调整:
aspect_tokens = [example.text_b[-1]]#这个对单个aspect词可以,但如果aspect包含多个token不知道行不行
aspect = example.text_b[-1] #同上,我这边取-1可能不太好(对于多个token的aspect可能有问题)
你们可以debug试试,你们这边代码输出的有问题,不知道我这样改的对不对,但按我这样,后面的text_left, _, text_right都能识别出。。。

:https://github.com/yangheng95/PyABSA/blob/bd98756c9353cacebd7f67b749ac928c547cce05/pyabsa/core/atepc/dataset_utils/data_utils_for_training.py#L189