Closed Lj4040 closed 1 year ago
谢谢您的回答,我解决了这个问题
客气啦:)
您好,我刚刚运行完joint_evaluate.py文件,看到输出是xlsx格式有uuid,sentence,label,...,但是我发现在您给出的测试网站上面是需要提交zip文件,里面是包含一个预测的json文件的.最后给出提交的json文件的的例子和一开始下载的训练文件差不多 ,例子有error_flag,error_type,correction。这和我的输出文件是不一致的。 这是需要自己写一个文件将输出的文件转换成json文件吗?还是需要怎么进行处理,这个地方需要您的帮助。真诚地感谢您的回答
您好, 由于我们的数据集包含三个任务,但是代码主要针对Correction,所以没有包含前两个任务的标签输出。如果你只需要Correction的指标的话可以自己构建json文件,然后error_flag,error_type可以随意设置(例如rror_flag=1,error_type=IWO),之后再上传上去计算就可以了。
如果你需要error_flag,error_type的指标,可以用PLM加全连接层训练一下!
好的,我明白了,谢谢您的回答!
客气啦:)
不好意思,我在使用您给的检查点使用joint_evaluate.py文件试着尝试运行几条数据看看学习下您的工作,在自己的电脑上跑,因为没有gpu所以我就把参数gpu_id参数改成0,当我使用自己训练的模型时,并没错误,成功输出了。于是我想试下用您的检查点去跑下看看,运行时我一直报错误, 于是我按照提示将load函数中的 最初load=None,改完之后运行在这给位置又报错了。 错误为 可能我的问题有点不太相关,因为自己尝试了许多次修改,仍然没有成功,所以才在再次打扰下您,如果方便的话希望您可以帮助下我。抱歉打扰到您了!
您好, 我看了你的报错,似乎可能是由于transformers版本造成的。因为过去的版本Layernorm它是用weight和bias来区分的似乎,新版本改成了gamma和beta,不知道是不是这个差异,你可以将你的model创建后(Load前)打印一下params,看看Layernorm具体是怎么样的名称,然后做一个转换或者更新一下版本
transformers我是按照您给的版本安装的4.3.3,那我尝试升级下试试谢谢您的回答
不客气,如果之后有问题,可以回复该Issue
这个是我自己电脑上的模型跑的,可以顺利过去,然后您给的检查dia点 我发现俩个都是weight和bias .同时刚才我也试了将transformers升级了最新的4.27.2也没有成功还是报同样的错误
你看一个generator的是长什么样,看上面报错图里不是switch的
这是您的检查点,然后transformers是4.27.2 这个是我自己电脑跑的, 还是weight和bias 然后这是transformers4.3.3 第一个自己跑的 第二个是您给的检查点
仍然是weight和bias
自己的训练的直接就能过去,是否是因为我自己训练的也是使用的cpu所以就能成功,而您给的检查点是使用gpu训练好的?但是那个gpu_id我也给调了0
你用了map_location的话应该是一致的
但是我如果不在这个位置上使用map_location=torch.device('cpu')的话,就会在 这个位置报 这个错误,
我的意思是你在cpu上的话,是应该map_location=cpu的,这不会产生差异。
我这里mode的 lnorm是 gamma和beta
这是我checkpoints里的lnorm 看得出他们是一致的,你看看你那里的是一样的吗
这个是model 我的model下面的inorm没有那个gamma和beta
这个是检查点的
ummm有点奇怪,你检查一下generator_model.py里看看是否有Layernorm?然后Layernorm是否是Model/Layer/LayerNorm.py的?
我刚刚看了下我自己跑的下面是 , 模型 model同样也没有, 自己的和您给的不一致。自己跑的最后没有inorm.beta
我看了有
可能是你误删了else里的_lnorm的Layernorm?你可以发现他是个tuple而不是Module
终于解决了,真的非常非常非常感谢您,祝您生活愉快,万事顺利。太谢谢您了!!!,抱歉打扰您这么久,问了一些无关的问题。再次感谢您!
:)客气啦,没事的,也祝你生活愉快!
您好,在您给出的网页测评结果,我提交了好多次但是一直失败。我试了好多次
,而且我也按照给出的例子,改成了相应的json文件。 这个是我将生成的文件改成json文件 提交的也是一个zip里面就只有一个压缩包predict.json 这个还需要怎么处理,能在帮助帮助我吗,谢谢您,抱歉又打扰到您了
我看了一下你的提交,问题出在json文件的名字应该是predict.json,详情请见Codalab的Evaluate: https://codalab.lisn.upsaclay.fr/competitions/8020#learn_the_details-evaluation
谢谢您,已经解决了
好的:)
您好,我有一个疑惑,在indep_generator.py文件下的GeneratorDataset.py数据处理部分,self.sentences, self.labels = self._extract_gendata(sentences, labels) 这一行,这样就只会将含有 I / MI标签的句子提取出来,但是只含有M标签的句子并没有提取出来,但是在generator模块不正是需要对修改和插入的token进行预测吗?
好的,谢谢您的回答。
好的,谢谢您的回答。
我稍晚一点再更新一下代码测试一下,因为Modify的样本都应该被包含进去(包括MD)。因为有点久了,我有点忘了之前写的时候为什么加这个限制了,要再看一下。 不过应该只有Indep模型的性能会受到影响,Joint是另一种处理模式,等我确认更新后会在这里回复,再次感谢指出这个问题!
收到,谢谢您。
您好,我在复现您的工作时,我在服务器上跑了几次,最终在您发布的网上评估上面结果是f0.5只有44,但是用您的检查点跑的有46,于是我将训练时每次的精度都保存了下看了看,我发现在Generator模块并没有达到论文中,char-level的0.71,sentence-level 0.68 ,我自己跑的时候最好的结果分别是0.58 和 0.76 ,这个地方和您论文中的结果相差比较大,我实验设置基本上是按照您代码中的给的设置的,但是epoch我设置的是50,但是论文附录上介绍的是100,batch_size我设置的是10,是这个主要影响的吗?还有在训练的过程中我发现偶尔在计算generaotr的loss是nan,好像是因为有些数据并不需要生成token,这个您也有发生吗?还有就是我加载的模型是hfl/chinese-roberta-wwm-ext,是在您代码脚本中的链接 https://github.com/ymcui/Chinese-BERT-wwm上找到的,我看见,他说这个预训练语言模型好像没有MLM的权重,如果需要做MLM任务需要自己二次训练。我想问问您,您是做了二次训练吗?而我没有做二次训练导致我复现的时候,在生成模块的准确率比较低。 如果在您方便的时候,希望您可以帮助下我,谢谢您的回复!
您好,我在复现您的工作时,我在服务器上跑了几次,最终在您发布的网上评估上面结果是f0.5只有44,但是用您的检查点跑的有46,于是我将训练时每次的精度都保存了下看了看,我发现在Generator模块并没有达到论文中,char-level的0.71,sentence-level 0.68 ,我自己跑的时候最好的结果分别是0.58 和 0.76 ,这个地方和您论文中的结果相差比较大,我实验设置基本上是按照您代码中的给的设置的,但是epoch我设置的是50,但是论文附录上介绍的是100,batch_size我设置的是10,是这个主要影响的吗?还有在训练的过程中我发现偶尔在计算generaotr的loss是nan,好像是因为有些数据并不需要生成token,这个您也有发生吗?还有就是我加载的模型是hfl/chinese-roberta-wwm-ext,是在您代码脚本中的链接 https://github.com/ymcui/Chinese-BERT-wwm上找到的,我看见,他说这个预训练语言模型好像没有MLM的权重,如果需要做MLM任务需要自己二次训练。我想问问您,您是做了二次训练吗?而我没有做二次训练导致我复现的时候,在生成模块的准确率比较低。 如果在您方便的时候,希望您可以帮助下我,谢谢您的回复!
您好,感谢对我们工作的关注!针对问题回答如下:
import torch
criterion = torch.nn.NLLLoss()
hidden = torch.randn((3, 2))
label = torch.LongTensor([0, 1, 2])
inds = torch.zeros(3)
print(criterion(hidden [inds>0], label[inds>0]))
输出: tensor(nan)
另外抱歉由于最近手头有一点点忙,之前说的那个修Bug的问题可能还要再晚一点:)
没有关系,不着急,非常感谢您的帮助和回复!
你好,
对于GeneratorDataset.py我已经查看了代码,确实是之前可能哪里想错了。现在代码里已经把额外的判断注释掉了,应该没有问题了。另外JointLoss我也进行了改动,会判断loss_mlm是否为nan,是的话就不会加到total_loss里,应该就不会在小batch_size下出现错误了。
您好,最近我有个问题一直想问您,我在测试自己的方法时,发现验证集最后的平均精度和网站最后的结果似乎不太匹配,比如我这个方法验证集结果平均准确率有0.62 但是要比另一个方法最后的验证集打印的平均准确率0.63要低(这个要比第一个在最后的验证集打印的所有结果都要好或者有的持平,switch,tagger,generator三个模块的性能都好),但是网上评估最后的结果要比平均0.63的模型结果好,我想请问您遇到过这样的问题吗?
您好,
这是正常的,这是因为验证集和测试集上Label的分布不一定是一样的,我们随机地对数据进行了划分。只要波动不是很大我认为都是比较正常的现象。模型保存的依据也是训练集上训练几个step后,在验证集上验证,当结果达到验证集上的最优性能表现后保存。但由于分布的问题所以参数不一定能在测试集上也能达到最优。这在所有任务上都是通用的现象。
好的谢谢您回复!
客气啦
似乎像是Transformer依赖的包版本低了