汇报人: 陈一鸣 时间: 2025-12-23 模型骨座: DistilRoBERTa-base (CPU Optimized)
在无训练数据 (Zero-Shot) 的场景下,利用预训练语言模型 (PLM) 对 AGNews 新闻数据集进行分类。
- 标签空间 (Label Space):
{World, Sports, Business, Sci/Tech} - 词表空间 (Vocabulary Space):
50,265个单词 - 挑战: 如何将抽象的标签映射到模型能理解的具体词汇?
将分类任务转化为完形填空 (Cloze Test) 任务:
- 模板 (Template): "It is a [MASK] news."
- 映射 (Verbalizer): 建立
LabelWord的映射关系。
我们首先运行了 Manual Baseline (人工定义映射),复现数据如下:
| 类别 | F1 Score | Recall (召回率) | 状态 |
|---|---|---|---|
| World | 0.002 | 0.1% | ❌ 崩盘 |
| Sports | 0.745 | 99.5% | ✅ 正常 |
通过检查 manual_verbalizer.txt 文件,发现人工规则强制规定:
World "politics"
实验证实,单一映射具有极大的局限性。仅依靠人工定义的一个锚点("politics")无法覆盖复杂的标签语义(如灾难、文化、社会新闻),导致模型在 World 类别上出现严重的性能瓶颈。
NPPrompt 通过无需参数微调的方式,利用 BERT 的静态知识进行自动化语义扩展。
针对复合标签(如 "Sci/Tech"),代码自动将其拆解为独立语义单元,实现多锚点召回。
# 代码位置:emb_verbalizer.py
for c in classes:
# 例如:"Science Technology" 被拆解为 ["Science", "Technology"]
split_c = c.split(' ')
class_names.append(split_c)基于 BERT 词向量计算余弦相似度 (Cosine Similarity),构建扩展词表 (即 Top-K 近邻词)。
利用相似度权重对扩展词的预测分数进行聚合。核心公式如下:
- : 扩展词 与原始标签的相似度权重
- : 模型对 的预测概率 (Logits)
在此阶段,BERT 充当 Static Knowledge Base (静态知识库)。
# 遍历 5万词表计算 Cosine Similarity
sim_mat[i][j] = util.cos_sim(temp_emb, base_emb)
# 获取 Top-K 扩展词及其权重
values, indices = torch.topk(sim_mat[i], select_num)在此阶段,BERT 充当 Contextual Predictor (上下文解题者)。
# 加权求和实现 (process_logits)
new_label_words_stat = (
label_words_logits * label_words_mask * label_words_weights
).sum(-1)在本地 CPU (AMD 8845HS) + 32G RAM + WSL 环境下,我们解决了以下工程问题:
- 挑战: 代码内硬编码参数导致 WSL 环境下出现 OOM (内存溢出) 风险。
- 解决: 修正 Python 传参逻辑,验证
batch_size=8为 32G 内存下的最佳推理平衡点,确保了推理过程的稳定性。
- 挑战: 原论文默认的
roberta-large参数量巨大,在 CPU 上推理延迟过高,不适合本地复现。 - 解决: 将骨干模型迁移至
distilroberta-base。 - 效果: 在保证语义理解能力的前提下,显著降低了计算负载,成功适配本地硬件环境。
数据集: AGNews (4 classes)
| 指标 | Manual Baseline | NPPrompt (Ours) | 变化幅度 |
|---|---|---|---|
| Accuracy | 50.82% | 60.89% | 🔼 +10.07% |
| World F1 | 0.002 (崩盘) | 0.573 (正常) | 显著提高 |
| Sports F1 | 0.745 | 0.905 | 精细化提升 |
关键发现:
NPPrompt 自动扩展出 Global, International 等词,成功修复了 World 类别的语义缺失,证明了基于向量空间的自动映射优于人工规则。
- 机制: QA 任务中,Verbalizer 是由题目选项动态给定的 (Dynamic Class)。
- 结论: NPPrompt 在 QA 上主要起到 "格式统一" 的作用,验证了框架处理变长答案 (Multi-token) 的通用性,而非核心算法创新。
- 复现成功: 在低资源环境下跑通了 NPPrompt,各项指标符合预期。
- 方法验证: 实验证明人工定义的 Verbalizer 存在严重的 Human Bias,是导致 Zero-shot 性能低下的主要原因。
- 核心贡献: NPPrompt 通过公式 实现了无参数的语义自适应,提升了 10% 的准确率。