如何应⽤和激发⼤语⾔模型的各⽅⾯能⼒
提示⼯程 Prompt engineering
- 通过输⼊更加合理的提示,引导模型进⾏更有效的结果输出,本质上是⼀种引导和激发模型能⼒的⽅法
- 更加轻量级的引导⽅法,尝试和实施的⻔槛更低;问题是受限于模型最⼤对话上下⽂限制,提示量有限
微调 Fine tuning
- 通过输⼊额外的样本,对模型部分参数进⾏修改,从⽽强化模型某部分能⼒;本质上也是⼀种引导和激发模型能⼒的⽅法
- 需要重新训练模型部分参数,训练成本较⼤,且需要精⼼准备数据,技术实施难度也更⼤;优势是可以让模型永久的强化某⽅⾯能⼒;
提示⼯程和微调的技术关系
- 能⽤提示⼯程解决的问题,往往不会⽤微调;⽽也有很多微调才能够解决的问题;
- 更多的时候是作为上下游技术关系,例如要进⾏本地知识库的定制化问答,最好的⽅法就是借助提示⼯程进⾏数据标注,然后再利⽤标注好的数据进⾏微调
提示⼯程三⽅⾯核⼼技术
- 提示词模板设计:相当于是魔法语句,在输⼊了某些语句之后,模型能够更好的完成任务,例如“请⼀步步进⾏思考”;
- 提示示例设计:⽬前较为流⾏的提示示例设计是不仅包括问答内容,同时包括推理和解决问题的步骤,从⽽能够给予模型更好的引导;
- 提示流程设计:很多时候模型⽆法⼀步到位解决问题,此时就需要设计更加复杂的提示流程,来引导模型通过多步的提示来解决问题
One-shot & Few-shot提示学习法
输入一些类似问题和问题答案,让模型参考学习,并在同一个prompt的末尾提出新的问题,依次提升模型的推理能力。
示例:
prompt_Few_shot1 = 'Q:“罗杰有五个网球,他又买了两盒网球,每盒有3个网球,请问他现在总共有多少个网球?” \A:“现在罗杰总共有11个网球。” \Q:“食堂总共有23个苹果,如果他们用掉20个苹果,然后又买了6个苹果,请问现在食堂总共有多少个苹果?” \A:'
prompt_Few_shot1
通过思维链提示法提升模型推理能力
Zero-shot-CoT提示方法
最为简单的思维链的实现方法是在提示词尾部追加一句“Let’s think step by step”(请一步步进行推理并得出结论),即可大幅提高模型推理能力
Few-shot-CoT提示方法
Few-shot,Few-shot-CoT的不同之处只是在于需要在提示样本中不仅给出问题的答案、还同时需要给出问题推导的过程(即思维链),从而让模型学到思维链的推导过程,并将其应用到新的问题中
示例
'Q:“罗杰有五个网球,他又买了两盒网球,每盒有3个网球,请问他现在总共有多少个网球?” \
A:“罗杰一开始有五个网球,又购买了两盒网球,每盒3个,共购买了6个网球,因此现在总共由5+6=11个网球。因此答案是11。” '
CoT改良方法:LEAST-TO-MOST PROMPTING(LtM提示法)
解决CoT提示方法泛化能力不足的问题——即通过人工编写的思维链提示样本可能并不能够很好的迁移到别的问题当中去,换而言之,就是解决问题的流程迁移能力不足,即泛化能力不够。而这种泛化能力不足则会导致“新的问题”无法使用“老的模板”进行解决。
该方法先通过提示过程让模型找到解决该问题必须要分步解决哪几个问题,然后再通过依次解决这些问题来解决最原始的问题。
整个提示过程会分为两个阶段进行,第一个阶段是自上而下的分解问题(Decompose Question into subquestion),第二个阶段是自下而上的依次解决问题(Sequentially Solve Subquestion),而整个依次回答问题的过程,其实就可以看成是CoT的过程,只不过LtM会要求模型根据每个不同的问题,单独生成解决问题的链路,以此做到解决问题流程的“千人千面”,从而能够更加精准的解决复杂推理问题。而整个过程问题的由少变多,则是LEAST-TO-MOST一词的来源。
prompt_Zero_shot_MtL1 = 'Q:“罗杰有五个网球,他又买了两盒网球,每盒有3个网球,请问他现在总共有多少个网球?”\A:为了解决“罗杰总共又多少个网球?”这个问题,我们首先要解决的问题是'
prompt_Zero_shot_MtL1