近期在进行提示词优化相关工作,感觉没有什么头绪,于是在工作完成过程中就Prompt Engneering记录一些浅薄的思考。
下文中所有数据均是经过微调的本地部署的GPT2模型跑出来的结果,可能泛用性一般,参考价值不大,就是我自娱自乐罢了。
提示效果(少样本)
直接表达
效果:1分。(效果无比的差,确实不能直接说)
分部表达
效果:5~8分。(有的分部效果还行,有的分布效果不及格)
提示-上下文-例子-输入-输出
效果:6分。(整体还行,及格水平,输出基本满足格式)
任务描述-背景信息-示范学习-数据加载-结果格式
效果:8分。(效果不错,输出都满足格式)
指令-上下文-输入数据-输出指示
效果:5分。(理解错的偏多)
提示技术
零样本提示
没有向模型提供任何示例,进行提示。
至少在我用来效果不好,但是2109.01652.pdf (arxiv.org)证明是可以通过调整变好的,但是我认为有点收获与付出不成正比了,泛用性实在太差。
少样本提示
提供少量样本,进行提示。
这是我较为普遍的提示方法,而且可以先通过基本无提示挑选出“典型”案例,用典型案例和不敏感案例混合为少样本,可以很好地完成提示工作。
但是少样本提示局限于样本过少,在处理较复杂任务时,会出现乱回答无法处理的情况。
思维链(Chain of Thought Prompting)
思维链就是优化少样本提示无法解决复杂问题的一种方法,思维链通过中间的推理过程实现了由简单结合成复杂的过程。
并且还有自动思维链技术,[2210.03493] Automatic Chain of Thought Prompting in Large Language Models (arxiv.org),这能生成思维链,很好地便利了思维混乱的我。
流式输出
将结果作为新提示词的一部分继续迭代,进行提示。
这种效果挺好的,并且泛用性也还不错,因为大部分复杂问题都是一个个简单问题的集合,并且这样把中间数存储下来,进行逻辑推理和后期归因都会方便很多,对于工程问题来说很适用。
自动推理并使用工具(Automatic Reasoning and Tool-use)
接到一个新任务的时候,从任务库中选择多步推理和使用工具的示范。在测试中,调用外部工具时,先暂停生成,将工具输出整合后继续接着生成。
看了思路,感觉没什么维妮塔,但没用过。
总结
求大神只条明路,感觉大的方法好选,但是具体的提示词是真的恶心,有些时候一个单词的区别效果差挺多的,不知道这个有没有什么通解,求指点!!!