Skip to content

基于 Mindspore 的 Prompt Tuning 实验

:material-circle-edit-outline: 约 1069 个字 :material-clock-time-two-outline: 预计阅读时间 4 分钟

2025 年 5 月 8 日 lab3.pdf

姓名:俞仲炜 学号:3220104929

Project Introduction

选题

本项目选题为提示词学习(Prompt Learning),旨在对比硬提示与软提示在情感分类任务中的效果差异,探索软提示调优(Soft Prompt Tuning)在小样本学习和参数高效微调中的潜力。

开发环境及系统运行要求

编程语言:Python

深度学习框架:MindSpore 2.4.0

平台镜像:mindspore_2.4.0-cann_8.0.rc3-py_3.9-euler1̇0-aarch64-snt9b

主要依赖库:mindspore, mindnlp, datasets, peft

硬件要求:Ascend

Technical Details

工程实践当中所用到的理论知识

本次实验主要基于 Prompt Learning 理论,利用预训练模型 Roberta 进行下游任务调优

Prompt Learning 是利用提示词引导预训练语言模型完成特定下游任务的技术,分为两类:

  • 硬提示(Hard Prompt):添加固定的自然语言片段,如“这个句子的情感是:”。
  • 软提示(Soft Prompt):引入可训练的嵌入向量,无需更改模型结构,只对少量参数进行学习,效率更高。

硬提示学习首先将预定义的标记添加到模型的输入中,然后直接使用预训练模型对输入进行分类预测;软提示学习首先为预训练模型增加一串可训练的嵌入向量,然后在训练过程中根据下游任务的需求优化和更新模型

具体算法概述

本实验中,软训练的核心流程为,对于每一轮 epoch 先调用反向传播函数 grad_fn 得到当前 batch 的损失和梯度,然后用 optimizer.step(grads) 更新 soft prompt 向量参数,最后执行 lr_scheduler.step() 调整当前学习率。一轮训练结束后进入评估阶段,该阶段会先遍历验证集,对每一个 batch 进行模型预测,取预测结果的最大概率类别作为最终分类结果,这里使用了 metric.add_batch() 累计预测与标签,用于后续计算评估指标。最终我们通过 metric.compute() 得到综合性能评价指标,结束当前 epoch

硬训练的流程则十分简单,首先将原始输入句子转换为带有自然语言提示的格式,并对整个数据集进行预处理和批量填充,形成可供模型推理的数据迭代器,然后交给预训练模型进行推理。

重要的技术细节

本次实验使用到了 MindSpore.peft 模块,通过该模块提供的 get_peft_model 函数,我们十分便利地为预训练模型添加了可学习的 soft prompt。由于其 mindnlp 中的源码无法访问,这里以 Transformers 库中的 peft 模块为例进行进行分析,相关代码位于 src/peft/mapping_func.py 中。

get_peft_model 首先解析传入的 peft_config,确定所使用的 PEFT 方法,然后根据配置,将基础模型包装为对应的 PeftModel 子类。在包装过程中,模块会根据配置将适配器模块注入到基础模型的指定位置。为了实现参数高效的微调,该模块会冻结基础模型中除适配器模块外的所有参数,仅允许适配器模块的参数在训练中更新。最终,get_peft_model 返回一个包含适配器模块的 PeftModel 实例。

此外,本次实验中用到的关键函数有:

  1. value_and_grad(forward_fn, None, model.trainable_params()):用于构造同时计算 loss 与梯度的高阶函数
  2. optimizer.step(grads) :在每个训练 batch 后执行,用于更新 soft prompt 向量参数(主模型参数被冻结,不被更新)。
  3. lr_scheduler.step():动态调整学习率,增强训练稳定性

Experiment Results

加载模型并打印微调参数量,可以看到仅有你不到 0.3%的参数参与了微调:

image-20250517153523911

检查预处理后的数据集,已得到正确处理:

image-20250517153505561

进行软提示训练,此处可以看到软训练模型最终的精确度是 83.41%:

image-20250517153447476

采样测试,均正确:

image-20250517153433587

硬提示训练评估结果,准确率为 49.95%:

image-20250517153411654

采样测试,一对一错:

image-20250517153425195

References