Kaggle - LLM Prompt Recovery 解决方案报告
比赛背景/目标
大型语言模型(Large Language Models,LLMs)通常被用于改写或对文本进行风格修改。本次Kaggle竞赛的目标是根据给定的改写文本,还原用于将原始文本转换为改写文本的LLM提示。这个机器学习竞赛旨在成为一种新颖的方式来深入研究这个问题。
我们面临的挑战是:给定1300多个原始文本,每个文本都配有一个来自Google新的开源模型Gemma 7b生成的改写版本,还原用于改写的LLM提示。
比赛运作流程
阶段1:数据生成
在过去的某个时间点,通过将original_text和rewrite_prompt传递给Gemma 7b LLM以某种期望的方式输出rewritten_text,生成了数据。
阶段2a:LLM模型(生成提示)
生成数据后,需要训练一个模型,通过将original_text和rewritten_text输入到模型中来预测rewrite_prompt:
阶段2b:T5模型(生成embedding)
将预测的rewritten_prompt和相应的真实rewritten_prompt传递给sentence-t5模型并获得两个embedding。
阶段3:评估(embedding比较)
获得embedding后,使用Sharpened Cosine Similarity指标(锐化余弦相似度)来比较它们的相似度。
解决方案流程
1. 数据预处理
- 读取训练集和测试集数据。
- 由于只提供了一个训练样本,需要自己生成额外的数据来训练模型。
2. 模型训练
- 加载预训练模型的tokenizer。
- 设置模型的配置,这里使用了4位量化。
- 加载预训练模型,使用的是mistral-7b模型。
- 设置训练参数。
- 设置LORA的配置。
- 设置数据的处理方式。
- 初始化训练器并开始训练。
- 保存训练好的模型。
3. 推理与后处理
- 加载训练好的模型。
- 对测试集数据进行推理,生成rewrite prompt。
- 将生成的rewrite prompt拼接上一个通用的平均prompt。
- 拼接好的prompt作为提交结果
解决方案重要参数
1. 模型训练相关:
- 预训练模型:mistral-7b
- 训练和测试的最大输入序列长度:1024
- 训练和测试的最大输出序列长度:100
- 训练的批大小:1
- 梯度累积步数:4
- 学习率:1e-4
- 训练epoch:5.0
- LORA配置:r=16, a=32, d=0.05
2. 推理相关:
- 通用平均prompt:用于在生成的rewrite prompt失败时作为备选
- embedding模型:sentence-t5
- 评估指标:Sharpened Cosine Similarity
总结
本次竞赛的目标是根据给定的改写文本还原用于将原始文本转换为改写文本的LLM提示。竞赛数据由Gemma 7b LLM生成,通过传入original_text和rewrite_prompt来修改文本。
我们采用了基于预训练大语言模型mistral-7b的解决方案,在模型训练阶段,我们通过将original_text和rewritten_text输入模型来预测rewrite_prompt。使用sentence-t5模型生成预测的prompt和真实prompt的embedding向量,并使用Sharpened Cosine Similarity指标比较它们的相似度。
在推理阶段,我们使用训练好的模型对测试集数据进行推理,生成rewrite prompt,并将其与通用平均prompt拼接得到最终的提交结果。
整体而言,我们的解决方案利用了预训练大语言模型的强大能力,同时使用了LORA等参数高效微调技术,在资源有限的情况下取得了不错的效果。未来可以尝试使用更大的预训练模型,以及更多的训练数据和训练时间,有望进一步提升模型性能。
具体代码:
Gittub: markchensiyuan/Kaggle2024-LLMPromptRecovery-GoldMedal