yangheng95 / LCF-ATEPC

codes for paper A Multi-task Learning Model for Chinese-oriented Aspect Polarity Classification and Aspect Term Extraction
MIT License
185 stars 45 forks source link

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

Open zhujinqiu opened 2 years ago

zhujinqiu commented 2 years ago

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

yangheng95 commented 2 years ago

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

zhujinqiu commented 2 years ago

@yangheng95 好的,还有我发现了一个bug,我跑debug的时候发现的,你们这里 aspect_tokens = example.text_b[:]输出的结果不是aspect token,比如第一个句子"the staff is horrible to us",你们这行代码输出的是[“the" ",staff” ]并不是['staff'],这就导致后面的textleft, , 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试试,你们这边代码输出的有问题,不知道我这样改的对不对,但按我这样,后面的textleft, , text_right都能识别出。。。

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

yangheng95 commented 2 years ago
font{
    line-height: 1.6;
}
ul,ol{
    padding-left: 20px;
    list-style-position: inside;
}

谢谢指出,如果方便的话希望你可以PR,很多地方确实兼顾不到。一开始没想到做成这么大一个东西

在2021年12月16日 ***@***.***> 写道: 

@yangheng95 好的,还有我发现了一个bug,我跑debug的时候发现的,你们这里 aspect_tokens = example.text_b[:]输出的结果不是aspect token,比如第一个句子"the staff is horrible to us",你们这行代码输出的是[“the" ",staff” ]并不是['staff'],这就导致后面的textleft, , 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试试,你们这边代码输出的有问题,不知道我这样改的对不对,但按我这样,后面的textleft, , text_right都能识别出。。。 :https://github.com/yangheng95/PyABSA/blob/bd98756c9353cacebd7f67b749ac928c547cce05/pyabsa/core/atepc/dataset_utils/data_utils_for_training.py#L189

—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or unsubscribe.Triage notifications on the go with GitHub Mobile for iOS or Android.