1.前言
在task1的基础上,对代码进行细化。根据task1的思考,以及task2的代码详解,初步预想这部分的优化主要在提示词的修改上。
不过在修改提示词时,遇到了一个比较麻烦的事情,那就是提示词修改需要大量的试错,根据修改后的得分判断提示词修改的好坏,然而官网每天只能提交三次得分,显然不能满足修改提示词的次数。在经过各种尝试后,我想出了一个替代方法,用下来效果也还不错。
2.详细步骤
这个方法需要借助到阿里云百炼,具体步骤如下:
2.1.选择错题
首先,从开始未经调整模型的输出文件upload.jsonl里,找出一道答案明显有错的题目。比如第一题,显然应该选C.John。
将这道题结合初始prompt模板,得到本题的提示词。
你是一个逻辑推理专家,擅长解决逻辑推理问题。以下是一个逻辑推理的题目,形式为单项选择题。所有的问题都是(close-world assumption)闭世界假设,即未观测事实都为假。请逐步分析问题并在最后一行输出答案,最后一行的格式为"答案是:A"。题目如下:
### 题目:
有一群人和一些食物类型。下列是关于这些个体和食物的已知信息:
1. 鸡肉是一种食物。
2. 苹果是一种食物。
3. 如果X吃了Y,且X活着,则Y是一种食物。
4. Bill存活。
5. Bill吃了花生。
6. John吃所有食物。
7. Sue吃所有Bill吃的食物。
8. John喜欢所有食物.
根据以上信息,回答以下选择题:
### 问题:
选择题 1:
谁喜欢吃花生?
A.Bill
B.Sue
C.John
D.None of the above
将阿里云百炼切换至qwen2-7B,输入该提示词。
输出结果如下:
分析给定的信息:
1. 鸡肉和苹果都是食物。
2. Bill活着,并且吃了花生。
3. John吃所有食物。
4. Sue吃所有Bill吃的食物。
5. John喜欢所有食物。
根据第2条信息,我们知道Bill吃了花生并且他还活着,因此花生是一种食物(由第3条规则推导)。第4条信息表明John吃所有食物,这意味着他也吃了花生。但是,由于Sue吃所有Bill吃的食物(第5条信息),她也会吃花生。最后,虽然John喜欢所有食物,但这个问题只问到是否喜欢吃花生,并没有明确提及John对花生的喜好态度。
综上所述,我们确定的是Bill、John和Sue都会吃花生,而问题是询问谁“喜欢吃”花生。虽然Bill确实吃了花生,但我们无法仅凭给出的信息断定他是否“喜欢吃”花生,因为这并没有直接被陈述。同样地,John吃了花生,并且他吃所有食物,但这也不足以断定他是否特别“喜欢”花生。
因此,根据给定的信息,我们不能确定地说任何一个人“喜欢吃”花生,除非有额外的信息表明某个人对花生有特别的喜好。然而,既然这是一个闭世界假设的题目,且给定的信息不足以直接推断出特定的人对花生有“特别的喜欢”,那么最安全的答案是:
### 答案是:D.None of the above
答案跟调用代码输出的一样。
2.2.初步修改提示词
清空对话,然后根据吴恩达老师的提示词工程技巧,对提示词进行初步修改,要求其细分具体步骤。
考虑到逻辑推理问题不可能直接找到答案,需要经过分析后根据分析所得信息进行推理,于是按照初始信息、分析后信息、最终信息三部分要求模型输出。这样是便于分析具体哪一个分析过程出现问题。于是得到以下输出:
1. **初始信息**:
- 鸡肉是食物。
- 苹果是食物。
- 如果X吃了Y,并且X活着,那么Y是食物。
- Bill存活。
- Bill吃了花生。
- John吃所有食物。
- Sue吃所有Bill吃的食物。
- John喜欢所有食物。
2. **分析后信息**:
- 由第4条我们知道Bill活着。
- 第5条告诉我们Bill吃了花生,因此根据第3条规则,花生是食物。
- 第6条说明John吃所有食物,因此John会吃花生。
- 第7条表明Sue吃所有Bill吃的食物,既然Bill吃了花生,Sue也会吃花生。
- 第8条提到John喜欢所有食物,由于花生是食物之一,John当然也喜欢吃花生。
3. **最终信息**:
- 通过分析可知,Bill、John和Sue都会吃花生。
4. **解答问题**:
- 选择题1的答案是: 答案是:A:Bill, B:Sue, C:John
此时可以看到,问题出在分析后信息这一步,大模型不能识别喜欢吃和吃之间的区别,对情感的程度识别不足。
2.3.进一步修改提示词
发现问题后,对提示词进行后续修改。主要包括两部分:1.细化提示词内容,规定输入文本的格式、输出范围。2.限定分析后信息,要求模型不能推理不足或者过度推理。
经过多次尝试与修改,模型最后终于输出正确答案C。
当然,这个最终信息明显也是有问题的,但是对于这一类的逻辑推理问题,毕竟达到了适度的情感程度。也有可能是我的提示词修改不足,后续可以进行更深入的修改。
2.4.运算得分
将修改后的提示词替换初始提示词,运行模型,上传输出文件,最终得分0.6822,相比初始模型提升了0.03。在仅进行提示词修改的情况下,这个幅度还是不小的。
3.总结
这个方法其实有一定的运气成分,但是在我看来,如果通过修改提示词能将明显错误、且多次出错的题答对,那么这个修改后的提示词大概率是能提高模型的表现的。
此外,这种方法还有一个优势,那就是验算速度快。因为通过阿里云百炼,一次只输入一道题,答案输出非常快,可以在很短时间内对提示词进行反复修改。相比运算完整个模型得到全局答案再修改需要花费近半个小时,这个方法在一个小时内可以实现数十次修改。
此外,这个方法也可以结合与微调相结合,从微调后的答案里找到错题,然后进行上述操作修改提示词直到答对,大概率修改后的提示词会比原来的提示词效果更好。