Giter Club home page Giter Club logo

Comments (20)

yangheng95 avatar yangheng95 commented on June 1, 2024

作者您好,在运行evaluate代码时,发现掩码长度和输入不一致的问题,举个例子如下:
输入:而 且 操 作 容 易 掌 握 8个字
input_ids_spc=tensor([[ 101],[5445],[ 684],[3082],[ 868],[2159],[3211],[2958],[2995],[ 102],[0]...] 排除0,10个字
attention_mask=tensor([[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[0]...],排除0,13个字,
这里13个字是因为对 “而且操作容易掌握[SEP]操作”做了掩码操作。
global_context_out = self.bert_for_global_context(input_ids_spc, token_type_ids, attention_mask)['last_hidden_state']

这里有个疑问,在预测ate的时候,我是不知道“操作”这个词要被预测出来的,多加了三个字([SEP]操作)的掩码,这里是不是有信息泄露的嫌疑?我试着将掩码改回10个,并测试了camera数据集,发现性能下降很多:
改之前指标为:
{'max_apc_test_acc': 94.25, 'max_apc_test_f1': 92.71}
atef1:86.55
改之后指标为:
{'max_apc_test_acc': 94.25, 'max_apc_test_f1': 92.71}
atef1:41.03

atef1下降了很多。
是我的理解有什么问题吗?
期待您的回复。

请问你是自己重新按照改后的代码训练再预测的还是直接使用PyABSA中的checkpoint预测的?训练和预测需要在同样的数据预测里代码下进行,即相同的掩码规则。

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

作者您好,在运行evaluate代码时,发现掩码长度和输入不一致的问题,举个例子如下:
输入:而 且 操 作 容 易 掌 握 8个字
input_ids_spc=tensor([[ 101],[5445],[ 684],[3082],[ 868],[2159],[3211],[2958],[2995],[ 102],[0]...] 排除0,10个字
attention_mask=tensor([[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[1],[0]...],排除0,13个字,
这里13个字是因为对 “而且操作容易掌握[SEP]操作”做了掩码操作。
global_context_out = self.bert_for_global_context(input_ids_spc, token_type_ids, attention_mask)['last_hidden_state']
这里有个疑问,在预测ate的时候,我是不知道“操作”这个词要被预测出来的,多加了三个字([SEP]操作)的掩码,这里是不是有信息泄露的嫌疑?我试着将掩码改回10个,并测试了camera数据集,发现性能下降很多:
改之前指标为:
{'max_apc_test_acc': 94.25, 'max_apc_test_f1': 92.71}
atef1:86.55
改之后指标为:
{'max_apc_test_acc': 94.25, 'max_apc_test_f1': 92.71}
atef1:41.03
atef1下降了很多。
是我的理解有什么问题吗?
期待您的回复。

请问你是自己重新按照改后的代码训练再预测的还是直接使用PyABSA中的checkpoint预测的?训练和预测需要在同样的数据预测里代码下进行,即相同的掩码规则。

我是debug LCF-ATEPC中的evaluate函数时发现掩码和输入不一致的,还没有涉及PyABSA。

from lcf-atepc.

yangheng95 avatar yangheng95 commented on June 1, 2024

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

data_utils.py文件
#input_mask = [1] * len(input_ids_spc)
sep_index=text_spc_tokens.index('[SEP]')
input_mask=[1]*(sep_index+2)
while len(input_mask)<len(input_ids_spc):
input_mask.append(0)
注释的是原始的代码,下面是我改的代码,主要是为了让掩码和输入一致

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

推理时input_mask不应该和text_spc_tokens一致,text_spc_tokens是句子和asp拼接的结果,例如 “而且操作容易掌握[SEP]操作”,这样有信息泄露的嫌疑,input_mask 应该和原始句子“而且操作容易掌握“保持一致。

from lcf-atepc.

yangheng95 avatar yangheng95 commented on June 1, 2024

Train 1 Epoch4
################################################################################


Train 1 Epoch4, Evaluate for atepc_datasets/phone
APC_test_acc: 93.36(max: 93.36) APC_test_f1: 91.98(max: 91.98)
ATE_test_f1: 76.85(max:76.85)



Train 1 Epoch4, Evaluate for atepc_datasets/phone
APC_test_acc: 95.37(max: 95.37) APC_test_f1: 94.54(max: 94.54)
ATE_test_f1: 81.57(max:81.57)

我测试了你改动的部分,ATE表现确实有所下降。

这个工作比较久了,原始代码已经遗失,现在想来确实有些考虑不足的地方。这个input mask和spc关系比较强,训练和测试的时候确实应该和spc一起truncate。如果后面找到合理的解释或者bug解决方法,会更新代码,谢谢指教!

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

Train 1 Epoch4
################################################################################

Train 1 Epoch4, Evaluate for atepc_datasets/phone
APC_test_acc: 93.36(max: 93.36) APC_test_f1: 91.98(max: 91.98)
ATE_test_f1: 76.85(max:76.85)

Train 1 Epoch4, Evaluate for atepc_datasets/phone
APC_test_acc: 95.37(max: 95.37) APC_test_f1: 94.54(max: 94.54)
ATE_test_f1: 81.57(max:81.57)

我测试了你改动的部分,ATE表现确实有所下降。

这个工作比较久了,原始代码已经遗失,现在想来确实有些考虑不足的地方。这个input mask和spc关系比较强,训练和测试的时候确实应该和spc一起truncate。如果后面找到合理的解释或者bug解决方法,会更新代码,谢谢指教!

谢谢解答,PyABSA是不是更完善一些,是否可以转PyABSA试试?

from lcf-atepc.

yangheng95 avatar yangheng95 commented on June 1, 2024

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

还有个问题,如果一篇文章中需要识别多个实体的情感,实体所在句子一般看不出情感属性,需要结合上下文多个句子判断,此LCF算法效果就不太好了,这个算法是不是只适合短句的情感识别?您能否给出一些其他合适算法呢,多谢!

from lcf-atepc.

yangheng95 avatar yangheng95 commented on June 1, 2024

还有个问题,如果一篇文章中需要识别多个实体的情感,实体所在句子一般看不出情感属性,需要结合上下文多个句子判断,此LCF算法效果就不太好了,这个算法是不是只适合短句的情感识别?您能否给出一些其他合适算法呢,多谢!

多方面情况下效果确实会有点影响,但初衷是通过多任务联合建模增模型对ABSA的理解建模能力,所以理想情况下效果仍然会由于基于bert的其他一些模型。也就是说句子的长短和方面的个数都不会显著干扰模型效果。

对于多个实体的情况我暂时还没有研究,所以也没有相关模型推荐,非常抱歉

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

我用LCF-ATEPC试了一下搜狐的数据,https://www.biendata.xyz/competition/sohu2019/,效果有点差强人意:max_ate_test_f1:77.53 max_apc_test_acc: 58.73 max_apc_test_f1: 54.74。
训练方法是先找到实体对应的第一个句子(逗号分割,句号分割都试过),但是可能找错位置,因为这个实体可能在文章中提到多次,可能只有某个短句有情感信息。这个是不是不适合用ABSA方法解决?

from lcf-atepc.

yangheng95 avatar yangheng95 commented on June 1, 2024

如果这个数据集不是特别难的话,这个分类的结果肯定是有问题的。

另外,这个库里面对实体的位置的定位本身就是存在bug的(采用aspec的第一个token id定位.e.g, ,在PyABSA里面进行了修复),这种情况下lcf向量计算就会有问题。再加上句子的定位存在问题就更可能出现不可预期的问题。

我认为不是因为不适合用ABSA,或者说ABSA不大可能取得这么失望的效果,应该是建模过程、数据处理过程、参数等方面出了一些问题。

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

举个例子如下:
{"newsId": "4e36d02a", "coreEntityEmotions": [{"entity": "3d", "emotion": "POS"}, {"entity": "工业", "emotion": "POS"}, {"entity": "机器视觉", "emotion": "POS"}], "title": "sia智慧工厂展,誉洋以“智”取胜", "content": "第十七届上海国际工业自动化及机器人展与上海智能工厂展览会于2019年3月1日圆满落下帷幕。展会展出规模90762平方米,国内外参展厂商达1000多家,并吸引超过100000名专业观众前来参观。此次展会全面展示了工业自动化技术,工业装配与传输技术、工业机器人整机与零部件、机器视觉工业应用、agv无人搬运、智慧工厂解决方案、工业自动化全面解决方案等产品领域。无论是展会规模、展示范围以及专业观众的人数,都实现了快速的增长,极大地推动了我国制造业的转型升级和跨越发展!誉洋3d机器视觉引发展会参观热潮在大连誉洋工业智能的展位,机器人自动抓取物件让人眼前一亮。机器人在3d视觉的引导下精准定位杂乱无序的目标,并实现准确快速抓取,整个过程井然有序,无需任何人工干预。誉洋现场工程师介绍,制造企业采用誉洋kineye®3d机器视觉系统,以往繁琐、枯燥的物料搬运工作交给了机器人,这样不但解放了人力,还提升了物流效率。这套3d机器视觉已在国内多家知名企业成功实施应用,得到了一致认可与好评。kineye®3d机器视觉实现企业智能制造誉洋工业智能有限公司自成立以来,一直专注于工业智能设备的研发、生产制造和服务,创新理念伴随企业不断成长。今天的誉洋已与**多家企业达成合作伙伴关系,成为**领先的智能设备供应商之一。以前瞻思维引领企业创新步伐,针对制造企业面临改革升级的痛点问题,誉洋与欧洲科研机构联合研发的kineye®3d机器视觉系统,拥有比肩世界的技术水准,可实现对制造业生产线的智能化改造。不仅如此,誉洋还可以提供柔性生产系统、智能仓储、智能制造设备等整套智能硬件、软件和一站式解决方案。"}

这里工业是要识别情感的实体,因为文章中包含多个工业,我取了正文中第一个包含工业的句子作为训练集,即:
第十七届上海国际工业自动化及机器人展与上海智能工厂展览会于2019年3月1日圆满落下帷幕
将其转换为LCF-ATEPC的训练格式,即:
第 O -1
十 O -1
七 O -1
届 O -1
上 O -1
海 O -1
国 O -1
际 O -1
工 B-ASP 2
业 I-ASP 2
自 O -1
动 O -1
化 O -1
及 O -1
单纯从这句话里,是看不出情感属性的,要结合全文才能看出是积极属性,但是我在生成训练集时又不知道那句话有用,只能暂时选择第一句,这是我想表达的问题。是不是因为选择的句子不对,导致引入大量噪声,所以结果不太理想?

from lcf-atepc.

yangheng95 avatar yangheng95 commented on June 1, 2024

这种长文本的情感分类确实与ABSA区别比较大,长文本的情感信息密度较低。如果没有办法找到情感信息所在的句子LCF的意义就不大,如果没有办法定位情感句的话建议基于文章情感分类的基线方法设计模型(可以尝试把所有包含关键词的句子采用LCF建模并池化求“平均”情感)。

from lcf-atepc.

yangheng95 avatar yangheng95 commented on June 1, 2024

据我所知,利用LCF做新闻分类的工作也是直接基于短新闻(或者是抽取出的情感句)来做的,例如https://raw.githubusercontent.com/fhamborg/NewsMTSC/main/controller_data/datasets/NewsMTSC-dataset/train.jsonl

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

这种长文本的情感分类确实与ABSA区别比较大,长文本的情感信息密度较低。如果没有办法找到情感信息所在的句子LCF的意义就不大,如果没有办法定位情感句的话建议基于文章情感分类的基线方法设计模型(可以尝试把所有包含关键词的句子采用LCF建模并池化求“平均”情感)。

对于这种问题,您有什么repo可以推荐吗

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

这种长文本的情感分类确实与ABSA区别比较大,长文本的情感信息密度较低。如果没有办法找到情感信息所在的句子LCF的意义就不大,如果没有办法定位情感句的话建议基于文章情感分类的基线方法设计模型(可以尝试把所有包含关键词的句子采用LCF建模并池化求“平均”情感)。

长文本不适合使用ABSA的一些方法,有没有相似的任务呢

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

找到所有包含目标实体的句子,做一个拼接,然后做一个分类模型,这样做是不是太简单了

from lcf-atepc.

yangheng95 avatar yangheng95 commented on June 1, 2024

如果你要做的是同时抽取文章的情感倾向或情感目标,那么最好的方法是更具文章级情感分类模型改一个多任务模型出来。bert做document情感分析的repo还是挺多的,huggingface应该有相关的document-level sentiment classification(或者document level classification, 本质上是同一类任务)例子。

from lcf-atepc.

zhaogangthu avatar zhaogangthu commented on June 1, 2024

如果你要做的是同时抽取文章的情感倾向或情感目标,那么最好的方法是更具文章级情感分类模型改一个多任务模型出来。bert做document情感分析的repo还是挺多的,huggingface应该有相关的document-level sentiment classification(或者document level classification, 本质上是同一类任务)例子。

谢谢,我试试

from lcf-atepc.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.