欢迎关注我的公众号“ NLP前沿 ”,日更最新论文/博客速读,周更AI领域近一周发生的那些事儿 。欢迎投稿! 行文仓促,有理解错误,欢迎指正 !
https://arxiv.org/pdf/2404.13033.pdf
挺有意思的一篇文章,想通过实验来确定一些sft的老生常谈的问题的答案,主要验证以下问题
- instruction和input的位置,放在input之前,之后,或者不提供instruction
- sft的过程中是否要包含输入prompt的损失
- 输出的设计,应该用json,还是自然语言输出,还是自然语言输出结合换行
- 输出是否需要占位符,比如说,想做ner,抽人名,query中没有人名,这个时候输出空,还是用啥
- 分类或者弄啥,输出的label用文本还是还是数字
- cot 对比 不用cot 在对比 反过来cot (Rcot),先输出答案,在输出解释的效果
结论:
- 指令放在前面,比放在后面,更有助于提高模型性能
- 不将输入部分包含在损失计算中,更有利于性能
- 通过换行来切分,在多个模型,任务上表现稳定,base模型喜欢更自然的方式,chat模型更能适应复杂的json格式输出
- 文本标签相比数值标签提供更多的描述深度和上下文线索,对性能有益。
- 使用占位符而不是省略未提及的目标能够保持输出格式的一致性,有助于模型学习
- cot推理方法对于提高模型在不熟悉的上下文(非同一领域/分布,ood)中的性能有显著帮助,尽管rcot方法的性能没有标准CoT方法好,但在许多情况下仍然优于没有推理步骤的No-CoT方法。