丹尼尔卡尼曼在他的《思考快与慢》探讨了人类思考的两种模式。一种被他称作系统 1,是快速的、直接和自动化的思考模式;另一种叫系统 2 ,是慢速的、有意识的和分析性的思考模式。
有趣的是,按照 Andrej Karpathy 的说法,包括 GPT 在内的大语言模型(后面简称 LLM),目前展现的都只有一种类似于系统 1 的思考方式。
这是一个很有趣的视角。
我们问 LLM 问题时,它确实表现出一种“如非必要,绝不多思考半步”的感觉。而”缺少思考“的 LLM 似乎很容易贸贸然地给出错误的答案。
因此,如果我们想从 LLM 中得到更好的结果,可以想办法让它“多思考一点点”,比如指定推理步骤、或者提供思考示例。
即使仅仅是在 Prompt 里面加个简单的“Let's think step by step”,都可以大幅改善它对复杂问题的回答,似乎这样可以“迫使”它稍微动用一下系统 2。
我拿钱歌川先生写的一本小书《翻译的基本知识》里面举得容易翻译错的例子,来考验 GPT 的翻译 。
比如这样一句:
(19)His success is out of the question. (误译)他成功是无问题的 。 (应译)他绝不可能 成功。
英文的out of question 和out of the question ,虽相差只有一个小小的冠词the,但意思是完全不同的。out of question =beyond question意为“无疑”或“不待言”,所以 His success is out of question 是说“他一定成功”。至于His success is out of the question 便是说“他一定失败”。因为out of the question = not to be thought of; quite impossible,意为“决不可能”或“无讨论的价值”
我直接用最简单的 Prompt 让 GPT3.5 翻译,得到错误的结果
等我换一种问法,先问他 out of the question 是什么意思,再让他翻译,则得到了正确的答案。
从某种意义上,这是一种 Chain-of-Thought 技巧的变体。Chain-of-Though 技巧,就是通过在 Prompt 里面提供推理的思路、增加中间步骤的描述,让 LLM 根据预定的思路一步一步得出更准确的答案。
正好我在设计“翻译家”角色的 prompt。以上这个简单的试验给了我一些启发。
最初的简单的“翻译家”的 instruction prompt 是这样:
你是一个翻译家,你擅长把英文翻译成中文
现在开始, 每次你收到一个英文句子或者段落,都把它翻译成地道的中文。
当我给它发 His success of out of the question 时,得到的答案跟之前一样,是错误的。
根据前面先引导 GPT 解释再让它回答从而得到好结果的经验,我修改了 instruction prompt,让这个翻译家先分析,再翻译::
你是一个精通英文俚语和擅长中文表达的翻译家。
每次我都会给你一句英文,请你都把它翻译成中文,用尽可能地道的中文表达。
在翻译之前,你应该先提取英文句子或者段落中的关键词组,先解释它们的意思,最后再翻译。
你的回答应该遵循以下的格式:
### 分析
{重复以下列表,列出需要关键词组,解释它的意思}
- 关键词组{1...n}:
- 词组:{English}
- 释义:{该词组表达什么意思,会用在什么地方}
### 译文
{结合以上分析,最终翻译得到的译文}
结果确实明显有改善,得出了正确的翻译:
我接着测试《翻》中的其他例子:
(24)We cannot exaggerate its importance.
(误译)我们并没有夸张来说它的重要。
(应译)其重要性无论怎样夸大其词也不为过
这次我测试的是 GPT-4。“简单翻译”的 Prompt 得到的结果不能说不正确,但确实不太理想: