项目博客 summary部分模型训练的实现
本次项目对于法律文书中总结提取总结部分的模型训练,我采用的是完全基于代码的训练方式,这种方式相较于现在的一些交互式建模调参的过程,可能代码实现更为复杂,为了实现对应的LoRA我们要实现的代码在复用继承之上也更加的繁琐。
模型挑选
这部分的功能与大多数的大模型训练差别不大。
首先我先进行了简单的模型挑选,从现有的若干开源大模型下选择了chatglm2-6b-32k
这个大模型,然后利用peft的方式对这个大模型进行微调,PEFT通过调整少量参数来实现微调,以提高效率和效果。这些参数通常是模型中的特定部分,如最后几层、适应层或插入的新参数层。,利用LoRA这种技术来对模型进行微调。旨在在预训练模型的基础上添加低秩结构,以实现高效的参数化微调。与传统的微调不同,LoRA 不需要修改原始预训练模型的参数,而是添加一个低秩适应层,这使得微调更为参数高效。
根据翻阅资料以及观看教学视频以及从github上学习相关知识,设计了一个训练策略链 预训练-监督微调-奖励模型-近端优化调整这样的一个训练链。
训练链
其中预训练阶段调用的PeftTrainer
模型是一个继承自 PeftTrainer
是一个继承自Seq2SeqTrainer
的训练器。是一个专门为序列到序列模型设计的高效微调训练器,支持在保持模型复杂性和性能的同时,通过高效的参数使用来减少资源消耗。而在实际训练过程中,考虑到模型已经被经过了预训练,因此并没有实际去执行。
而在sfm阶段采用的是继承自PeftTrainer
的Seq2SeqPeftTrainer
训练器,专门设计来处理生成性任务,如文本生成,并计算生成性评价指标如BLEU和ROUGE。
BLEU(Bilingual Evaluation Understudy)和ROUGE(Recall-Oriented Understudy for Gisting Evaluation)是两种广泛使用的自动评估指标,主要用于机器翻译和文本摘要任务。这些指标通过比较机器生成的文本与一个或多个人类编写的参考文本,来评估生成文本的质量。
BLEU是一种评估机器翻译质量的指标,首次介绍于2002年。它的核心思想是测量机器翻译输出与一组参考翻译之间的重叠度。主要关注的是n-gram(连续的n个词)的精确匹配。
- 计算方法:BLEU评分计算机器翻译输出中的n-gram与参考翻译中n-gram的匹配频率,通常考虑从1-gram到4-gram。为了避免过度奖励过短的翻译,BLEU引入了一个惩罚因子(brevity penalty),以偏好接近参考长度的翻译。
- 应用:BLEU广泛用于机器翻译评估,因其实现简单、标准化和自动化程度高。
ROUGE是评估自动文本摘要和机器翻译输出的一系列指标。它通过计算生成的摘要或翻译与一组参考摘要之间的重叠来衡量质量。ROUGE的不同变体包括ROUGE-N(评估n-gram重叠)、ROUGE-L(考虑最长公共子序列)、和ROUGE-S(基于跳跃的bigram,适合评估更自由的词序重排)等。
- 计算方法:ROUGE通常关注召回率,即参考摘要中的内容在生成摘要中的出现程度。例如,ROUGE-N 计算生成摘要中出现的参考n-gram与参考摘要中所有n-gram的比例;ROUGE-L 则考虑了句子级的结构相似性,通过评估最长公共子序列来执行。
- 应用:ROUGE特别适用于文本摘要领域,也用于机器翻译,以评估生成文本的完整性和流畅性。
在奖惩阶段rm,利用PairwisePeftTrainer
是一个继承自PeftTrainer
的训练器,专门设计来计算成对损失(pairwise loss)。这种成对损失常用于训练模型来对比两个输入的相对优劣。这类成对损失的训练器可以非常适合用于训练模型进行裁判文书的总结和提取任务,尤其是当涉及到奖惩机制时。这种训练方法可以帮助模型更好地区分哪些内容是关键的(应被“奖励”),哪些内容是次要的或不相关的(应被“惩罚”)。使用PairwisePeftTrainer
来训练模型时,可以将标注好的“好”摘要作为前半部分样本(应被接受的评分,即r_accept
),将“差”摘要作为后半部分样本(应被拒绝的评分,即r_reject
)。训练过程中,模型将学习区分哪些特征使得一段文本是一个好的摘要。成对损失将推动模型优化这种区分能力,提高生成摘要的质量。在本次训练中用更正好的output
中的内容作为奖励,其余的部分内容作为惩罚,进行成对计算。
在近端策略优化过程中利用综合了 PPOTrainer
和 PeftTrainer
功能的复合训练器PPOPeftTrainer
,用于执行更高级的训练任务,特别是在涉及到基于政策的优化(Proximal Policy Optimization, PPO)和参数效率微调(Parameter-efficient Fine-Tuning, Peft)的场景中。这个训练器适合处理复杂的序列生成任务,如对话生成、文章摘要、机器翻译等,特别是在这些任务中需要对模型的生成进行微调并优化长期奖励或策略的情况。继承自 PeftTrainer
的特性,支持高效的参数调整,减少对额外计算资源的需求,特别是在微调大型模型时非常有用。实现了一个定制的PPO训练循环,该循环生成响应、计算奖励,并使用这些奖励来指导训练过程。这允许模型基于动态环境反馈进行学习和适应。提供了一个生成函数,用于根据当前的策略生成输出。这在模拟用户交互或其他类型的环境查询中非常有用。
执行与训练
随后编写了三个对应不同的执行sh
脚本来对过程进行训练,来观测其对应的损失变化
sft:
rm:
ppo:
控制台执行测试
编写对应的本次控制接口,并对其进行简单的测试,发现其对于总结和提取的功能比较完善,对于推理相关问题表现能力不足