冻结语言模型 Prompt 微调技术:PET(b) 与 LM-BFF 解析
对比分析了 PET-TC(B) 和 LM-BFF 两种基于 Prompt 的少样本学习方案。PET-TC(B) 优化了完形填空模板支持多 Token 标签,通过迭代填充提升分类精度;LM-BFF 则实现了模板与标签词的自动搜索,并结合指令样本增强上下文理解。文章详细阐述了其训练推理机制、概率计算逻辑及实验效果,并补充了相关代码实现思路。

对比分析了 PET-TC(B) 和 LM-BFF 两种基于 Prompt 的少样本学习方案。PET-TC(B) 优化了完形填空模板支持多 Token 标签,通过迭代填充提升分类精度;LM-BFF 则实现了模板与标签词的自动搜索,并结合指令样本增强上下文理解。文章详细阐述了其训练推理机制、概率计算逻辑及实验效果,并补充了相关代码实现思路。

在少样本学习(Few-Shot Learning)场景下,如何高效利用预训练语言模型(PLM)进行下游任务适配是一个核心问题。传统的微调方法需要更新所有参数,而基于 Prompt 的方法通过冻结模型参数,将分类任务转化为完形填空形式,显著降低了计算成本并提升了小样本下的泛化能力。
本文详细解析两篇经典论文:PET-TC(B) 和 LM-BFF。前者优化了标签词的 Token 数量限制,后者实现了模板与标签的自动搜索及指令增强。
论文 It's not just size that matters: Small language models are also few-shot learners (2020.9) 是 PET-TC 的续作。主要改进在于支持多 Token 作为标签词(Label Words),而非仅限于单 Token。这解决了如 "terrible" 被分词为 "terr##ble" 时信息丢失的问题。
在推理阶段,为了处理多个 MASK 位置,模型需要进行 K 次前向传导(K 为标签词最大长度)。
[图示说明:PET 多 MASK 推理流程 - 迭代填充过程]
为了提升效率,训练时使用一次前向传导对多个位置同时完成预估。MASK 长度固定为所有标签的最大长度。
例如情感分类问题中,"terrible" 长度为 2,"great" 长度为 1。此时 MASK 填充长度为 2,"great" 只取第一个 MASK 词的概率,后面的忽略。
概率计算公式如下: $$P(Y=-1|x) = P_1^M(ble|x) \times P_2^M(terr|x)$$ $$P(Y=1|x) = P_1^M(great|x)$$
其他部分与 PET 基本一致。实验表明,在 SuperGLUE 数据集上,即使参数量级较大(约 2B),PET 在 32 个小样本上的效果也超过了同等量级甚至更大的 GPT-3 Few-Shot 效果。
论文 Making Pre-trained Language Models Better Few-shot Learners (2020.12) 由陈丹琦团队提出。该方案将人工构建 Prompt 模板和标签词优化为自动搜索,进一步降低了人工成本。
在全 Vocab 上搜索空间太大,直接微调容易过拟合。作者采用两步策略:
固定标签词,使用 T5 模型来生成符合上下文语义的 Prompt 指令。
[图示说明:T5 辅助生成 Prompt 模板流程]
搜索到最优标签词和模板后,模仿 GPT-3 的 Few-Shot 构建方式:
在每类采样 16 个样本的小样本场景下,Roberta-Large 的效果显示:
以下是一个基于 HuggingFace Transformers 的简化实现示例,展示如何构建 PET 风格的 Prompt 分类器。
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
class PromptClassifier:
def __init__(self, model_name, label_words):
self.tokenizer = AutoTokenizer.from_pretrained(model_name)
self.model = AutoModelForSequenceClassification.from_pretrained(
model_name, num_labels=len(label_words)
)
self.label_words = label_words
self.mask_token_id = self.tokenizer.mask_token_id
def encode_prompt(self, text, template="This review is {mask}."):
# 简单的模板填充逻辑
return template.format(mask=self.tokenizer.decode([self.mask_token_id]))
def predict(self, texts):
inputs = self.tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
with torch.no_grad():
outputs = self.model(**inputs)
probs = torch.softmax(outputs.logits, dim=-1)
return probs.argmax(dim=-1).tolist()
# 使用示例
if __name__ == "__main__":
classifier = PromptClassifier("bert-base-uncased", ["good", "bad"])
result = classifier.predict(["I love this product."])
print(f"Prediction: {result}")
PET-TC(B) 和 LM-BFF 代表了 Prompt 微调技术在少样本场景下的重要演进方向。PET-TC(B) 解决了多 Token 标签的表示问题,而 LM-BFF 则通过自动化搜索模板和标签词,结合指令样本增强了模型的上下文理解能力。这些方法证明了在不更新大模型参数的情况下,通过精心设计的 Prompt 依然可以获得超越传统微调的性能,为资源受限场景下的 NLP 应用提供了有效解决方案。
未来研究可关注更复杂的动态模板生成机制以及跨任务的 Prompt 迁移学习。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online