基于P-Tuning微调模型
《基于P-Tuning微调模型》共 0.2 万字,通篇围绕 prompt、数据集、上下文、微调 展开,归在「训练、微调与数据」这一层。
适合要自己训模型、或者判断这一版该不该训的人
目录骨架(3 节)
- 示例代码
- 分享您的模型
- PEFT 配置和模型
示例代码
📎 附件:prompt-causal.zip(zip, 5KB)
原文链接:https://www.yuque.com/attachments/yuque/0/2025/zip/2424104/1746582257262-2a404109-dcf7-4f50-af92-dd6df1299e42.zip
前言
Prompt 可以描述一个任务,或者提供您希望模型学习的任务示例。软提示方法不是手动创建这些 prompt,而是在输入嵌入中添加可学习的参数,这些参数可以针对特定任务进行优化,同时保持预训练模型的参数冻结。这使得为新的下游任务微调大型语言模型 (LLM) 变得更快、更容易。
PEFT 库支持多种类型的 prompt 方法(p-tuning、prefix tuning、prompt tuning),您可以在软提示指南中了解更多关于这些方法在概念上是如何工作的。如果您有兴趣将这些方法应用于其他任务和用例,请查看我们的notebook 合集!
本指南将向您展示如何使用软提示方法训练因果语言模型,以生成分类,判断推文是否为投诉。
熟悉训练因果语言模型的一般过程将非常有帮助,并使您能够专注于软提示方法。如果您是新手,我们建议您首先查看 Transformers 文档中的因果语言建模指南。当您准备好后,请返回查看将 PEFT 融入您的训练有多么容易!
在开始之前,请确保您已安装所有必要的库。
pip install -q peft transformers datasets
- task_type:要训练的任务类型(在本例中为序列到序列语言建模)条件生成任务,根据给定的输入(可能是文本、图片等)生成符合条件的输出。
SEQ_CLS
序列分类(Sequence Classification),对整个句子进行分类。如: 获取评论的情绪,检测电子邮件是否为垃圾邮件,确定句子在语法上是否正确或两个句子在逻辑上是否相关等
SEQ_2_SEQ_LM
条件生成任务,根据给定的输入(可能是文本、图片等)生成符合条件的输出。
与因果语言建模任务不同,条件生成不仅仅关注于给定上下文的连贯性,还关注于满足预定的任务要求。因果语言建模仅关注于根据给定的上下文生成文本序列。
条件生成的应用包括但不限于机器翻译、文本摘要、图像描述等。这些任务通常需要模型在输入和输出之间建立复杂的映射关系。
CAUSAL_LM
因果语言建模任务(CLM),在这种建模方法中,模型试图预测给定上下文中的下一个单词,该上下文通常包括在当前单词之前的所有单词。这种建模方法遵循因果原则,即当前单词只受到其前面单词的影响,而不受后面单词的影响。代表模型有 GPT2、Bloom、OPT、GPT-Neo、GPT-J、LLaMA、ChatGLM。
TOKEN_CLS
Token 分类任务(Token Classification),对句子中的每个词进行分类。如: 识别句子的语法成分(名词、动词、形容词)或命名实体(人、地点、组织)。
数据集
在本指南中,您将使用 RAFT 数据集的 twitter_complaints 子集。twitter_complaints 子集包含标记为 complaint 和 no complaint 的推文,您可以查看数据集查看器,以更好地了解数据的外观。
使用 load_dataset 函数加载数据集并创建一个新的 text_label 列,以便更容易理解 Label 值 1 和 2 的含义。
from datasets import load_dataset
ds = load_dataset("ought/raft", "twitter_complaints")
classes = [k.replace("_", " ") for k in ds["train"].features["Label"].names]
ds = ds.map(
lambda x: {"text_label": [classes[label] for label in x["Label"]]},
batched=True,
num_proc=1,
)
ds["train"][0]
{"Tweet text": "@HMRCcustomers No this is my first job", "ID": 0, "Label": 2, "text_label": "no complaint"}