上下文学习(In-Context Learning,ICL)是大语言模型的一种涌现能力,模型不需要参数更新,只需要在输入中提供任务描述和几个示例,就能生成正确输出。
几种解释:
示例:
请将以下中文翻译成英文:
我爱人工智能。示例:
这是一个情感分类任务:
输入:这部电影真好看,我非常喜欢。
输出:积极
输入:这个产品质量太差了,浪费钱。
输出:消极
输入:今天天气不错,适合出去游玩。
输出:| 方式 | 优点 | 缺点 |
|---|---|---|
| Zero-shot | 不需要示例,使用方便 | 复杂任务效果差 |
| Few-shot | 效果好,不需要训练 | 占用更多上下文长度,受最大序列长度限制 |
CoT(Chain-of-Thought)提示就是让模型一步步输出思考过程,再给出最终答案,能显著提升复杂推理任务(数学、逻辑)的效果。
标准prompt vs CoT prompt:
标准prompt:
Roger有5个网球,他又买了两罐,每罐有3个网球。现在Roger一共有多少个网球?CoT prompt:
Roger有5个网球,他又买了两罐,每罐有3个网球。现在Roger一共有多少个网球?
让我们一步步思考,先计算新买来多少个,再算总数。Self-Consistency:生成多个不同的CoT路径,然后投票选出最常见的答案,效果更好。
Tree of Thoughts(ToT):像树一样搜索多种思考路径,可以回退,比单链CoT更灵活。
Graph of Thoughts:进一步扩展为图结构,更灵活组织思考。
不好:
给我讲点关于AI的东西。好:
请用300字介绍人工智能的三大发展阶段,要求分点说明。给模型设定角色,引导输出风格:
你现在是一个经验丰富的Python老师,用通俗易懂的语言给初学者讲解概念,避免太专业的术语。明确告诉模型什么不能做,输出范围是什么:
只能使用提供的上下文信息回答问题,如果上下文没有相关信息,请直接说"我不知道",不要编造。使用分隔符区分不同部分,让模型更容易理解:
###分隔不同部分<input>...</input>包裹输入| 维度 | 提示学习(Prompt Learning) | 提示工程(Prompt Engineering) |
|---|---|---|
| 定义 | 可学习prompt参数的微调方法 | 人工设计prompt的技巧 |
| 参数更新 | 学习连续prompt向量 | 不更新模型参数 |
| 目标 | 提高下游任务效果 | 更好地激发模型能力 |
| 典型方法 | Prefix-tuning、P-tuning、Prompt Tuning | CoT、Few-shot、ICL |
A: 上下文学习是大模型的涌现能力,通过在prompt中给出任务描述和示例,模型不需要参数更新就能完成任务。微调需要更新模型参数,而上下文学习不需要任何参数更新,完全依赖模型预训练知识和prompt中的示例。
A: 复杂推理问题需要多步计算,CoT让模型分步输出思考过程,相当于把复杂问题分解成多个子问题,模型每一步只需要解决一个子问题,降低了难度。同时,分步思考增加了计算量,让模型有更多"思考时间",最终结果更准确。
A: 主要限制是上下文长度,每个示例都占用token,示例越多,占用越长,受模型最大序列长度限制,不能放太多示例。另外,示例分布如果不好,效果也会受影响。
A: 传统人工设计prompt对结果非常敏感,一点变化就可能导致效果大幅波动,而且人工搜索优质prompt成本很高。提示学习通过反向传播学习连续prompt向量,自动找到最优prompt,不需要人工设计。同时只训练prompt参数,不更新整个模型,参数高效,避免灾难性遗忘。
A: