Closed xansar closed 2 weeks ago
在使用self-consistency进行generation模式测试时,设置参数sample_num=2,结果发现模型输出的两个预测结果完全一致
经过查找后发现,在加载数据时,如果sample_num>1,则直接在原始数据列表上乘上一个标量进行扩展,但是数据列表中的元素为Conversation类,因此简单的乘法扩展会导致浅拷贝问题。 在推理时,generation方法会在每一个Conversation类中增加一轮assistance回复,这就导致当该方法处理到乘法扩展出来的样本时,前面的原始样本也会被修改,最终产生多个采样结果完全相同的问题。
当我用deepcopy调整sample_num>1时的数据扩展,我的问题得到解决,但仍不清楚在其他数据集、评测方法中的表现: 代码:
# 4. apply self-consistency if self.sample_num > 1: import copy evaluation_instances_repeated = [] option_nums_repeated = [] for _ in range(self.sample_num): evaluation_instances_repeated.extend(copy.deepcopy(evaluation_instances)) option_nums_repeated.extend(copy.deepcopy(option_nums)) evaluation_instances = evaluation_instances_repeated option_nums = option_nums_repeated # evaluation_instances = evaluation_instances * self.sample_num # option_nums = option_nums * self.sample_num
效果:
@xansar Thank you for sharing this with us. We will fix it shortly.
在使用self-consistency进行generation模式测试时,设置参数sample_num=2,结果发现模型输出的两个预测结果完全一致
经过查找后发现,在加载数据时,如果sample_num>1,则直接在原始数据列表上乘上一个标量进行扩展,但是数据列表中的元素为Conversation类,因此简单的乘法扩展会导致浅拷贝问题。 在推理时,generation方法会在每一个Conversation类中增加一轮assistance回复,这就导致当该方法处理到乘法扩展出来的样本时,前面的原始样本也会被修改,最终产生多个采样结果完全相同的问题。
当我用deepcopy调整sample_num>1时的数据扩展,我的问题得到解决,但仍不清楚在其他数据集、评测方法中的表现: 代码:
效果: