目 录CONTENT

文章目录

【深度学习】PERF 中 QUESTION_ANS 与 FEATURE_EXTRACTION 的区别

EulerBlind
2025-11-11 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

在进行参数高效微调(PERF/PEFT)时,QUESTION_ANSFEATURE_EXTRACTION 这两种任务类型看似都需要特征提取,但实际上它们在训练过程中有本质的不同。

核心差异

任务目标

  • QUESTION_ANS:生成式任务,需要根据输入生成特定答案
  • FEATURE_EXTRACTION:表示学习任务,目标是提取高质量的语义嵌入向量

微调的网络部分

基于注意力机制:

\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V

  • QUESTION_ANS:主要优化 Q(Query)和 V(Value)
    • Q:理解输入问题
    • V:生成合适输出
  • FEATURE_EXTRACTION:优化 Q、K、V 全部
    • K(Key)对捕获特征间的相似性关系特别重要
    • 需要全面调整以获得更好的语义表示

代码层面的具体影响

1. 损失函数

# QUESTION_ANS
loss = CrossEntropyLoss(logits, labels)

# FEATURE_EXTRACTION  
loss = ContrastiveLoss(anchor, positive, negative)

2. 目标模块(LoRA配置)

# QUESTION_ANS
target_modules = ["q_proj", "v_proj"]

# FEATURE_EXTRACTION
target_modules = ["q_proj", "k_proj", "v_proj"]

3. 输出处理

# QUESTION_ANS - 保留语言模型头
output = model.lm_head(hidden_states)  # 生成token

# FEATURE_EXTRACTION - 直接使用隐藏状态
features = hidden_states[:, -1, :]  # 提取嵌入向量

4. 评估指标

  • QUESTION_ANS:准确率、BLEU、困惑度
  • FEATURE_EXTRACTION:余弦相似度、检索准确率

快速对比表

维度QUESTION_ANSFEATURE_EXTRACTION
损失函数CrossEntropy / Seq2SeqContrastive / Triplet
训练模块Q, VQ, K, V
输出层保留 LM Head冻结/移除 LM Head
输出类型Token logitsFeature embeddings
典型应用问答、对话、文本生成语义搜索、相似度计算

总结

任务类型的指定不仅仅是个标签,它会实质性地影响:

  • 哪些参数被更新
  • 使用什么损失函数
  • 如何处理模型输出
  • 采用什么评估标准

选择正确的任务类型对于获得好的微调效果至关重要。如果你的目标是让模型生成答案,选择 QUESTION_ANS;如果是为了获得更好的文本表示用于检索或相似度计算,选择 FEATURE_EXTRACTION

0
博主关闭了所有页面的评论