RUCAIBox / LLMBox

A comprehensive library for implementing LLMs, including a unified training pipeline and comprehensive model evaluation.
MIT License
513 stars 66 forks source link

设置sample_num时,dataset的浅拷贝问题 #270

Closed xansar closed 2 weeks ago

xansar commented 2 weeks ago

在使用self-consistency进行generation模式测试时,设置参数sample_num=2,结果发现模型输出的两个预测结果完全一致

image

经过查找后发现,在加载数据时,如果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

效果:

image
huyiwen commented 2 weeks ago

@xansar Thank you for sharing this with us. We will fix it shortly.