大模型学习-改进配置文件的一些尝试

目录

尝试1-问题格式化(无效果)

清晰的分隔符

明确的提示

包含示例

综合

调整后的效果

结论

尝试2-超参数调整

调整学习率learning_rate(有效果)

增加正则化weight_decay(无效果)

数据增强-应用随机遮盖(无效果)


尝试1-问题格式化(无效果)

我尝试调整输入格式,例如,将问题和答案之间的分隔符或提示更清晰地定义,这可能有助于模型更好地理解任务。

清晰的分隔符

在输入文本中使用更明显的分隔符。用多个换行符或特定的符号来区分问题和答案的部分:

input_text = f"问题是:{question}\n请提供答案:\n---\n"

明确的提示

添加指示性文本,说明模型应该如何回答:

input_text = f"请根据以下问题提供准确答案。\n问题:{question}\n答案:"

包含示例

提供一两个示例问题和答案作为背景,帮助模型理解预期的格式:

input_text = "下面是一些示例:\n示例问题1:基尼奇的天赋1是什么?\n示例答案1:基尼奇的天赋1是...\n\n请回答下面的问题:\n问题:" + question + "\n答案:"

综合

将前面提到的几点调整进行综合:

input_text = (
    "下面是一些示例:\n"
    "示例问题1:山王长牙的武器效果是什么?\n"
    "示例答案1:绿松石之狩,元素战技命中敌人后,会获得1层「悬木祝赐」,该效果每0.5秒至多触发1次;队伍中附近的角色触发了燃烧或烈绽放反应后,装备者会获得3层悬木祝赐...请根据以下问题提供准确答案\n"
    f"问题:{question}\n"
    "答案:"
    )

调整后的效果

可以看到,如果直接问示例问题,它会直接回答示例回答的内容。问其他的问题时,能打出一些内容,但并不正确。

结论

问题格式化应该能对回答的形式能起到一些效果,但并不能提高模型回答的准确率

尝试2-超参数调整

调整学习率learning_rate(有效果)

尝试更低的学习率1e-5

调整后得到的结果:

可以看到,也像点样子,但是依然不正确。

我原本尝试进一步调大学习率,但搜索相关资料发现,较大的学习率可能会让模型更加发散,这与我的目标背道而驰。

那么我只能进一步较低学习率

尝试更低的学习率1e-7

可以看到,这次得到的效果更不好,甚至还扯到了《我的世界》,学习率更低似乎才更发散

所以,我决定再试一次,这次学习率调高一些:5e-4。同时迭代次数提升到500

调整后的效果

这是我的训练集部分数据:

可以看到,这次效果还行,不过我同时改了两个地方,学习率5e-4,迭代次数500,之前迭代次数都是200,所以不确定是学习率的影响还是迭代次数的影响,还是两个共同的影响。因此我还需要再试一次迭代次数为200的情况。

这次学习率:5e-4。同时迭代次数为200

调整后的效果:

可以看到,这次的回答甚至比上一次更加精准。所以能肯定是学习率为5e-4所造成的效果。

但是还存在问题,比如我现在换个问法,它就不行了:

所以,接下来我将针对这个问题,继续进行改进的尝试,即:在学习率为5e-4的基础上,改进配置,使得模型对于一个问题的不同问法,依然可以回答正确的内容。

增加正则化weight_decay(无效果)

TrainingArguments 中适当提高 weight_decay 参数值(例如从 0.01 增加到 0.050.1)。提高正则化可以帮助模型减少过度记忆原有的问答格式。

weight_decay 是一种正则化方法,用于在训练神经网络时抑制过拟合。具体来说,它通过对模型的权重施加一个惩罚,使得权重值不会变得过大,帮助模型避免对训练集的过度记忆。

这里改成0.1

调整后的效果:

训练集的数据:

可以看到,换一个问法,回答依然不准确。说明修改weight_decay 参数值得到的效果并不大。

数据增强-应用随机遮盖(无效果)

使用 DataCollatorForLanguageModeling 可以在训练时随机遮盖一些单词,使得模型在训练时对某些词或词组稍微“模糊”,这可以帮助模型更好地泛化。

from transformers import DataCollatorForLanguageModeling

data_collator = DataCollatorForLanguageModeling(
    tokenizer=tokenizer,
    mlm=True,
    mlm_probability=0.15
)

调整后的效果:

这是训练集的数据:

可以看到,调整后效果还更差,我按原本的question进行提问都有错误,而且回答的内容非常多,大概有几百个字(图中没展示全,实际上字非常多)。所以这个尝试也以失败告终。

我想可能是遮盖的概率太高了,所以我再试一次0.01:

调整后的效果:

训练集数据:

可以看到,调整后效果还是很差,我按原本的question进行提问都有错误。

经过随机遮盖的两次尝试,得出结论:不仅没有解决因不同问法而导致结果错误的问题,甚至按原本的问题内容进行提问也得不到正确结果。所以这个尝试不太行。

猜你喜欢

转载自blog.csdn.net/m0_74462339/article/details/143450295