什么是少样本学习?
In-Context Learning (ICL) 在不修改模型权重的情况下,通过在 prompt 中提供少量示例( demonstrations),让模型学会一个新任务。
python
prompt = """给定电影评论的情感:
这部电影真棒! → 正面
我觉得一般般 → 中性
烂透了,浪费时间 → 负面
这部片子的剧情太精彩了 → """
# 期望输出:正面Few-shot vs Zero-shot vs Fine-tuning
| 维度 | Zero-shot | Few-shot (n=3~20) | Fine-tuning |
|---|---|---|---|
| 效果 | 基线 | +5~20% | +15~40% |
| 成本 | 最低 | 低(多些tokens) | 高(训练时间+显存) |
| 灵活性 | 最高 | 高 | 低(需重新训练) |
| 速度 | 最快 | 快(多输入tokens) | 慢(需训练+部署) |
黄金实践法则
- 示例质量 > 数量:3个高质量示例胜过20个敷衍示例。确保示例准确覆盖边界情况
- 保持一致的格式:示例的输出格式应与目标任务的期望输出一致(如JSON、固定模板)
- 排序策略:随机打乱顺序优于按某种规律排列,避免模型学到排序偏差
- 正负样本均衡:分类任务中正负示例尽量1:1
- 位置敏感:最近的位置效应明显——把最重要的示例放最后
何时用ICL?何时微调?
| 选择ICL的条件 | 选择微调的条件 |
|---|---|
| 快速验证想法/原型 | 需要稳定可靠的生产级表现 |
| 任务变化频繁(每天换) | 任务稳定、数据量大 |
| 没有标注数据 | 有大量高质量标注数据 |
| Token预算充足 | 延迟/成本敏感 |
| 多语言/多领域混合 | 单一垂直领域深耕 |
面试话术
"我的原则是:能用ICL解决的就不微调,因为迭代成本低得多。具体做法是精心挑选3-5个代表性的正向例子放在prompt最后,确保输出格式严格对齐。但当任务对一致性要求很高(比如金融风控),或者需要长期稳定的表现时,我会用LoRA做轻量微调——两者结合才是生产环境的最优解。"