THUDM / AutoRE

43 stars 4 forks source link

模型微调的训练数据处理 #7

Open QiankunPi opened 2 months ago

QiankunPi commented 2 months ago

您好!这篇论文的工作对DocRE方向起到了非常好的指导性工作。但有一个问题请问一下:对于RE-DocRED数据集,您在使用训练数据进行模型微调时,labels中的是三元组信息是怎么转换的呢?例如对于labels中的一组信息[h:11,r:P1580,t:6],这里r:P1580很好理解它是代表id为P1580的关系,但对于h:11,它表示是实体编号为11的那个实体,但如果该实体有多个提及,我应该取哪个提及呢,还是说默认取第一个?还是所有提及都取一次?这个问题一直困惑着我,因为如果不确定取哪个提及的话,那提供的训练数据在微调时可能会存在很大问题。还请您百忙之中能帮助解答一下这个问题,非常感谢!

bigdante commented 2 months ago

您好!这篇论文的工作对DocRE方向起到了非常好的指导性工作。但有一个问题请问一下:对于RE-DocRED数据集,您在使用训练数据进行模型微调时,labels中的是三元组信息是怎么转换的呢?例如对于labels中的一组信息[h:11,r:P1580,t:6],这里r:P1580很好理解它是代表id为P1580的关系,但对于h:11,它表示是实体编号为11的那个实体,但如果该实体有多个提及,我应该取哪个提及呢,还是说默认取第一个?还是所有提及都取一次?这个问题一直困惑着我,因为如果不确定取哪个提及的话,那提供的训练数据在微调时可能会存在很大问题。还请您百忙之中能帮助解答一下这个问题,非常感谢!

这里可以详见我处理数据制作训练集的代码。我是将所有的提及名称都进行了去重并且组合,也就是N*M,论文中我提到,在评测时候只要是命中了其中一个,就算是命中了这个三元组,然后这个三元组的其他提及组合即使预测对了,也不会再进行统计,而一旦预测错误了,即使是错误三元组的其他提及组合,都进行统计。以此来保证我评测的合理性。(也就是对的只统计一个,错误的我都进行统计,而错误的里面也有很多是数据集未标注的,因此模型实际上的效果应该是更好一些)。

Best~

QiankunPi commented 2 months ago

您好!这篇论文的工作对DocRE方向起到了非常好的指导性工作。但有一个问题请问一下:对于RE-DocRED数据集,您在使用训练数据进行模型微调时,labels中的是三元组信息是怎么转换的呢?例如对于labels中的一组信息[h:11,r:P1580,t:6],这里r:P1580很好理解它是代表id为P1580的关系,但对于h:11,它表示是实体编号为11的那个实体,但如果该实体有多个提及,我应该取哪个提及呢,还是说默认取第一个?还是所有提及都取一次?这个问题一直困惑着我,因为如果不确定取哪个提及的话,那提供的训练数据在微调时可能会存在很大问题。还请您百忙之中能帮助解答一下这个问题,非常感谢!

这里可以详见我处理数据制作训练集的代码。我是将所有的提及名称都进行了去重并且组合,也就是N*M,论文中我提到,在评测时候只要是命中了其中一个,就算是命中了这个三元组,然后这个三元组的其他提及组合即使预测对了,也不会再进行统计,而一旦预测错误了,即使是错误三元组的其他提及组合,都进行统计。以此来保证我评测的合理性。(也就是对的只统计一个,错误的我都进行统计,而错误的里面也有很多是数据集未标注的,因此模型实际上的效果应该是更好一些)。

Best~

非常感谢您的解答。您提到的处理数据制作训练集的代码具体是哪个文件下的呢,我找了一圈没有找到,非常抱歉。还有就是我理解的您的意思是在构造训练集的标签时,假如三元组[h,r,t]中h有两个不同的提及h1和h2,那么最终给与的训练标签就是[h1,r,t]和[h2,r,t]。我看有的论文也将实体列表放入提示里,您当时有实验过吗,我看您的论文中是没有将实体列表放入提示中的。如果您能帮助解答,我将非常感谢!!!

bigdante commented 2 months ago

您好!这篇论文的工作对DocRE方向起到了非常好的指导性工作。但有一个问题请问一下:对于RE-DocRED数据集,您在使用训练数据进行模型微调时,labels中的是三元组信息是怎么转换的呢?例如对于labels中的一组信息[h:11,r:P1580,t:6],这里r:P1580很好理解它是代表id为P1580的关系,但对于h:11,它表示是实体编号为11的那个实体,但如果该实体有多个提及,我应该取哪个提及呢,还是说默认取第一个?还是所有提及都取一次?这个问题一直困惑着我,因为如果不确定取哪个提及的话,那提供的训练数据在微调时可能会存在很大问题。还请您百忙之中能帮助解答一下这个问题,非常感谢!

这里可以详见我处理数据制作训练集的代码。我是将所有的提及名称都进行了去重并且组合,也就是N*M,论文中我提到,在评测时候只要是命中了其中一个,就算是命中了这个三元组,然后这个三元组的其他提及组合即使预测对了,也不会再进行统计,而一旦预测错误了,即使是错误三元组的其他提及组合,都进行统计。以此来保证我评测的合理性。(也就是对的只统计一个,错误的我都进行统计,而错误的里面也有很多是数据集未标注的,因此模型实际上的效果应该是更好一些)。 Best~

非常感谢您的解答。您提到的处理数据制作训练集的代码具体是哪个文件下的呢,我找了一圈没有找到,非常抱歉。还有就是我理解的您的意思是在构造训练集的标签时,假如三元组[h,r,t]中h有两个不同的提及h1和h2,那么最终给与的训练标签就是[h1,r,t]和[h2,r,t]。我看有的论文也将实体列表放入提示里,您当时有实验过吗,我看您的论文中是没有将实体列表放入提示中的。如果您能帮助解答,我将非常感谢!!!

https://github.com/THUDM/AutoRE/blob/main/AutoRE/utils/pre_process_data.py 这里面有各个模式的详细数据制作。另外,参考template.py,我确实没有将任何的实体列表(或者是关系列表)作为预先知道的放入到提示词中,目的是不带任何的先验知识。其他类似的做法,我认为目的是为了降低任务的难度(选择比预测简单),因此我是通过训练,让模型具备直接预测的能力,更加符合真实end2end的生活场景。

QiankunPi commented 2 months ago

您好!这篇论文的工作对DocRE方向起到了非常好的指导性工作。但有一个问题请问一下:对于RE-DocRED数据集,您在使用训练数据进行模型微调时,labels中的是三元组信息是怎么转换的呢?例如对于labels中的一组信息[h:11,r:P1580,t:6],这里r:P1580很好理解它是代表id为P1580的关系,但对于h:11,它表示是实体编号为11的那个实体,但如果该实体有多个提及,我应该取哪个提及呢,还是说默认取第一个?还是所有提及都取一次?这个问题一直困惑着我,因为如果不确定取哪个提及的话,那提供的训练数据在微调时可能会存在很大问题。还请您百忙之中能帮助解答一下这个问题,非常感谢!

这里可以详见我处理数据制作训练集的代码。我是将所有的提及名称都进行了去重并且组合,也就是N*M,论文中我提到,在评测时候只要是命中了其中一个,就算是命中了这个三元组,然后这个三元组的其他提及组合即使预测对了,也不会再进行统计,而一旦预测错误了,即使是错误三元组的其他提及组合,都进行统计。以此来保证我评测的合理性。(也就是对的只统计一个,错误的我都进行统计,而错误的里面也有很多是数据集未标注的,因此模型实际上的效果应该是更好一些)。 Best~

非常感谢您的解答。您提到的处理数据制作训练集的代码具体是哪个文件下的呢,我找了一圈没有找到,非常抱歉。还有就是我理解的您的意思是在构造训练集的标签时,假如三元组[h,r,t]中h有两个不同的提及h1和h2,那么最终给与的训练标签就是[h1,r,t]和[h2,r,t]。我看有的论文也将实体列表放入提示里,您当时有实验过吗,我看您的论文中是没有将实体列表放入提示中的。如果您能帮助解答,我将非常感谢!!!

https://github.com/THUDM/AutoRE/blob/main/AutoRE/utils/pre_process_data.py 这里面有各个模式的详细数据制作。另外,参考template.py,我确实没有将任何的实体列表(或者是关系列表)作为预先知道的放入到提示词中,目的是不带任何的先验知识。其他类似的做法,我认为目的是为了降低任务的难度(选择比预测简单),因此我是通过训练,让模型具备直接预测的能力,更加符合真实end2end的生活场景。

好的,非常感谢您的解答!我再去仔细研读下您的文章和相关数据处理的代码。祝您生活愉快,工作顺心!