大模型无需训练或微调,仅通过输入示例就能学习新任务的元学习能力
def in_context_learning(prompt_examples, query): """ 基础的上下文学习实现 """ # 构造带示例的提示 prompt = "" # 添加少样本示例 for example in prompt_examples: prompt += f"输入: {example['input']}\n" prompt += f"输出: {example['output']}\n\n" # 添加查询 prompt += f"输入: {query}\n输出: " # 模型推理(无权重更新) response = model.generate(prompt) return response # 示例:情感分析任务 examples = [ {"input": "这部电影太棒了!", "output": "正面"}, {"input": "完全浪费时间", "output": "负面"}, {"input": "还行吧,一般", "output": "中性"} ] result = in_context_learning(examples, "演技精湛,剧情感人") # 输出: "正面"
class LEAPLearning: """ 通过错误学习原则的LEAP方法 """ def __init__(self, model): self.model = model def learn_from_mistakes(self, task_examples): """ 1. 诱导错误 2. 反思错误 3. 提取原则 """ mistakes = [] principles = [] # 步骤1:故意让模型犯错 for example in task_examples: prediction = self.model.predict(example['input']) if prediction != example['output']: mistakes.append({ 'input': example['input'], 'predicted': prediction, 'correct': example['output'] }) # 步骤2:让模型反思错误 reflection_prompt = f""" 观察以下错误: {format_mistakes(mistakes)} 请分析这些错误的共同模式,并提取避免这些错误的原则。 """ principles = self.model.generate(reflection_prompt) # 步骤3:应用学到的原则 enhanced_prompt = f""" 任务原则: {principles} 现在解决以下问题: {new_problem} """ return self.model.generate(enhanced_prompt) # LEAP在GPT-4上的提升 # DROP: +7.5%, HotpotQA: +3.3%, BigBench: 显著提升
def self_generated_icl(model, task_description, num_examples=3): """ 模型自己生成上下文示例 """ # 步骤1:让模型生成示例 generation_prompt = f""" 任务:{task_description} 请生成{num_examples}个该任务的示例(包含输入和输出)。 """ generated_examples = model.generate(generation_prompt) # 步骤2:使用生成的示例进行ICL icl_prompt = f""" {generated_examples} 现在请完成: 输入: {actual_query} 输出: """ return model.generate(icl_prompt) # 无需外部数据集,完全自主学习
# ICL for代码转换 examples = [ "Python: list = [1,2,3] → JavaScript: const list = [1,2,3]", "Python: dict = {'a':1} → JavaScript: const dict = {a:1}", ] query = "Python: tuple = (1,2,3)" # 输出: "JavaScript: const tuple = [1,2,3]"
# 结构化信息提取 context = """ 姓名:张三 → {"name": "张三"} 年龄:25岁 → {"age": 25} 职业:工程师 → {"job": "工程师"} 邮箱:[email protected] → """ # 模型理解模式并输出: {"email": "[email protected]"}
# 写作风格适应 examples = [ ("正式:请您审阅", "口语:请看一下"), ("正式:敬请指正", "口语:有问题告诉我"), ] # 模型学会风格转换规则