Way To Prompt系列(1): 为什么大模型连"Strawberry"的"r"都数不对?一招“理由先行”显著提升模型思考能力

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
视觉智能开放平台,视频资源包5000点
视觉智能开放平台,分割抠图1万点
简介: 本文将从两个常见的大模型翻车问题入手解析这些问题背后体现的大模型技术原理(Tokenization与预测下一个Token),并解释了为什么会导致这些问题,接着我们利用CoT(思维链)方法解决这些问题并基于上述原理试图剖析CoT方法起作用的可能原因,最后提出【理由先行】风格这一简单有效的Prompt Trick。

Way To Prompt系列

作为大模型落地相关的算法工程师,随着大模型能力的快速发展,Prompt工程成为了越发重要的一项技能。

在2023年下半年,我们遵循着 Prompt调优—微调训练调优 的方式进行着大模型落地的探索,也探索出了RAG/NL2SQL等多种较为适合大模型落地的场景;而到了2024年上半年,Agent从概念逐渐演变成了切实可行的落地场景,而在通用大模型能力的不断突破下,微调调优在算力、时间、精力上的重投入显得更不讨喜,尤其是大部分项目仍处于需要快速验证想法的POC阶段,由此我们改换成了 Prompt调优—Agent工作流搭建 的方式,可以迅速验证大模型在各行各业场景的效果。

显然,无论处于哪个阶段,Prompt工程都将是最初也最为重要的一个步骤,Prompt是你与大模型之间沟通的唯一桥梁,也是大模型带领你云游四海的船票。

所以,我想开设一个专题【Way To Prompt】,用于记录前沿学习、项目实践过程中接触到的Prompt方法、结构化框架以及各类Tricks,梳理各类在实际业务中可以发挥价值的Prompt及其背后的生效原理。

引言

本文简述:本文将从两个常见的大模型翻车问题入手解析这些问题背后体现的大模型技术原理(Tokenization与预测下一个Token),并解释了为什么会导致这些问题,接着我们利用CoT(思维链)方法解决这些问题并基于上述原理试图剖析CoT方法起作用的可能原因,最后提出【理由先行】风格这一简单有效的Prompt Trick。

希望可以帮助到阅读本文的人。由于作者的水平和知识有限,如有纰漏与谬误欢迎批评指正~

前段时间,我们经常能在互联网上看到有关大模型“翻车”的常见问题,其中最为典型的莫过于“Strawberry有几个r数不对”以及“9.9和9.11比大小”。

这些问题一度引发了互联网上大模型社区的广泛讨论,大家一定很好奇,为什么大模型可以完成个别复杂的推理任务,甚至可以在数学、法律等各类行业的高等级考试中获得优异成绩,却在如此简单的问题上接连翻车呢?

那么本篇文章便试着从这一角度入手,理解大模型为什么在该类任务上的表现不佳,以及基于这一原因所引发的思考与更适合的Prompt实践方式。

首先,我们来验证大模型是否真的无法解决上述的两个问题:

Strawberry里有几个r?

通义千问:

GPT-4o:

Claude3 Sonnet:

可以看到,截止到目前三者之间仅有Claude3回答正确,而GPT-4o和千问依旧无法数对r的数量,并且千问的解释也很奇怪,它明明可以看到rr里面有两个r,为什么却数不对呢?

并且值得一提的是,测试Claude3.5 Sonnet时我们发现它也数不对。

9.9和9.11谁大?

通义千问:

GPT-4o:

Claude3 Sonnet:

上一个问题Claude3答对了,而这个问题则是无一例外地全部翻车,那么大模型究竟为什么无法解决这些对于人类来说如此简单的问题呢?

大模型做不到,原因是什么?

这两类大模型会“犯蠢”的问题背后,实际上是大模型的技术原理天然带来的“副作用”,比如我们先从“Strawberry有几个r数不对”这一问题入手。

Tokenization

大家对这件事的普遍定论是,这是文本的Tokenization处理所带来的问题

所谓的Tokenization,即是将文本处理为Token的过程,很多时候也翻译为“分词”,不过需要注意的是,“分词”这一翻译本身具有一定的误导性,这里分好的“词”并不能直接对应我们“人类视角”的【单词/短语/词组】,而是“大模型视角”的【Token】,这一部分我会基于之前内部培训时我所制作的PPT进行说明。

由于大模型无法直接处理文本,因此需要将文本转化为大模型可以处理的数字,转换过程可以简化为以下几步:输入文本序列,对序列进行切分成为Token序列,再构建词典将每个Token映射为整数型的index。 这一过程中,主要的难点在于,如何理想地对文本序列进行切分。如果我们切分的粒度太细,比如水果被切分为水和果,那么水果这一词语在大模型眼里就丧失了其作为一个词语的整体语义。如果我们切分的粒度太粗,比如我喜欢吃水果整体是一个token,那么这样切分所得到的字典规模可想而知是相当大的。 所以一个好的切分应该是,使得文本中的每个Token都拥有正确的表义,且不会存在字典容易过大或在字典中找不到相应token的问题。

根据以上描述可知,“大模型视角”下的文本与我们“人类视角”并不一样。为了验证这一点,我们可以在DashScope提供的Token计算器页面观察“大模型视角”下的文本是如何拆解的。

以Strawberry为例,其被拆分为【“str”, “aw”, “berry”】,自然也就不难理解为什么通义千问对于这个问题的回答是“两个r”了,毕竟对于它来说,这三者均是作为一个整体存在的,而不是从字母维度切分的。

为了让人们更好地理解“大模型视角”与“人类视角”之间的差异,前OpenAI创始成员与研究科学家Karpathy在X上放出了一个脚本(脚本网址),用于将Token转换为Emoji表情,从而更加直观地向大家展示大模型眼中的文本是什么样的。

这里依旧以“Strawberry里有几个r?”问题为例,可以看到在大模型的眼中,这个问题其实是这样的:

“数r”这一问题从人类视角显而易见,但在大模型视角却是有难度的。由此也就很容易理解,为什么大模型在缺乏引导的情况下无法完成“数r”这种对于人类来说无比简单的任务。

而另一个比大小问题,我们则要从大模型的生成原理角度去考虑。

预测下一个Token

我们知道,大模型(Large Language Model,LLM)的含义为大型语言模型。

“大型”很好理解,而所谓的“语言模型”,也就是用于计算文本序列概率的模型,更通俗地说,用于计算一个文本序列是一句“人话”的概率。那么换个角度来说,“语言模型”也就可以在给定上文的情况下,计算下一个Token取各种值的概率,所以大模型的生成过程本质上便是在“根据上文预测下一个Token”,而这个概率分布即是在模型训练过程中从大量的文本数据中学习到的,使得大模型学习到了语言的基本知识与模式。

在理解上述原理的基础上,“9.9和9.11比大小”翻车的原因也就容易理解了,若是训练时存在着许多版本号相关的数据,那么从版本号的角度来看,9.11确实要比9.9大,大模型也就很可能会根据这种概率分布得出“9.11比9.9要更大”的结论。

利用CoT解决问题

其实解决这两类问题的方法也并不复杂,只需要在Prompt中加入一定的引导就能获得理想答案,比如说我们可以利用CoT思维链的方式编写Prompt,引导大模型逐步思考并解决问题。

CoT为思维链(Chain-of-Thought)的缩写简称,是提示工程领域最为重要的提示方法之一,它的核心思路在于通过引导模型逐步展示其推理过程,从而提高其理解和解决复杂问题的能力。在Few-shot(少样本)设置下表现为 在提供的样例中解释推理过程,引导大模型回答时也解释推理过程;而在Zero-shot(零样本)设置下表现为 加入类似“让我们一步步思考(Let’s think step by step)”的引导话术

而对于本文提到的两个翻车问题,我们可以尝试这样编写Prompt:

Strawberry里有几个r?请你先将单词拆分成一个个字母,再用0和1分别标记字母列表中非r和r的位置,数一下一共有几个r

请一步步思考,以逐级复杂的原则思考问题,最后才得到答案。9.9和9.11谁大?

可以看到,通过CoT方法编写Prompt后,可以引导大模型输出正确结果。

有趣的是,第二个问题的Prompt虽然可以帮助大模型获得正确的结果,但却不是始终有效的,多次尝试很可能会获得不同的结论。而将“9.9和9.11谁大?”切换成英文的“9.11 and 9.9, which is bigger?”时大模型更容易答对,这里本质上也体现了中英文训练数据的差别对概率分布的影响以及大模型预测下一个Token是一个采样过程。

然而随之而来的问题是,为什么这么做可以提升大模型的表现呢?这个问题想必大家也十分好奇,基于上面所述的大模型原理,其实也不难理解。

如果说,大模型每一次生成是在“根据上文预测下一个Token”的话,那么CoT的作用便在于,它可以引导大模型先行生成有力的推理过程,比如引导其生成Strawberry拆解后的字母列表,或者数字的逐位比较,这样模型在生成最终结论的时候,会受到上文推理过程的影响,将下一个Token的概率分布限定在某个范围内,从而大大增加输出正确答案的概率

可以将该过程想象成下图:

试想,当你遇到一个问题,随着你的不断思考,你为获得正确答案建立了更多的“论据”,从而不断地增加你对某一个答案的置信度;而这与你直接在脑中海量的答案池中进行一次选择或预测相比显然要更加可靠。

而若是不用CoT加以限制的的情况下,大模型倾向于先给出一个答案,再给出理由,那么很自然地变成了,先根据“问题”预测一个最有可能的“答案”,再为这个“答案”编造相应的“理由”,毕竟大模型的生成过程是逐步进行的,而不是全局性的,它在答案之后输出的理由永远只可能是为了圆“答案”这个谎而存在的。

这是人类语言的重要特性,也即时序性与线性,说到这不禁让我想到电影《降临》中生活在四维空间的七肢桶,它们的“字”是一笔写就的,包含一段完整的语义,前因后果均包含在这一个“字”内,也就不像人类的文字一般带有前与后的时序属性,而我们的语言方式天然蕴含着逻辑与时序关系,这一点在大模型身上也会有所体现。同时,我们人类在思考的时候,通常也是会先有推理过程,再有结论,只不过在诉诸于语言时,可能会选择 先抛出结论表明立场,再给出解释 的表达方式,而思考过程对外界是不可见的,但是对于大模型而言,它的语言本身即是思考,并不存在诉诸于语言之前的思考过程,所以我们也需要引导它像人类一样先思考再判断,将思考过程以语言的方式表达出来。

回归正题,从这个角度来看很自然地可以想到,在大模型推理的时候,我们可以限制大模型 先输出理由,再输出答案,让大模型根据“深度思考”获得的理由与推理过程来预测“答案”,从而大大提升其表现,我认为这也是为什么CoT会有效果的一个关键因素。

与这一想法不谋而合的是,东京大学的一项研究《A Better LLM Evaluator for Text Generation: The Impact of Prompt Output Sequencing and Optimization》中也验证了类似的观点,这篇论文的理念为利用大模型评估AI的生成文本质量,而在论文的实验部分他们发现,要求大模型先给出评分理由,再给出分数 与 要求大模型先给出分数,再给出评分理由两种做法的结果大不相同,前者所给出的分数普遍高于后者,他们认为这与LLM的自回归生成特性有关,当模型先给出理由时,它能够更全面地考虑输入的提示和自己生成的理由,从而做出更加深思熟虑的评分

换句话说,“理由先行”的输出风格或许有助于大模型给出更加可靠的答案,这一点与我们之前的推论也相吻合,符合大模型预测下一个Token的原理。

基于以上原因,我在实际的项目实践当中,也广泛采用了“理由先行”的输出风格,比如下方的Prompt是我为某个物流行业公司的业务场景所编写的,该场景实测发现,“理由先行”的方式确实更有助于大模型更有效地进行思考与预测,取得更优异的表现。

ori_system_prompt = dedent("""\
    # 角色
    你是一位高效的物流分配专家,擅长根据客户提供的地址信息,精确匹配至相应的地址分组,具备快速识别地址模式与分组规则对应的能力。
    ## 技能
    ### 技能1: 地址匹配逻辑
    - **提供订单分组时的分组判断**:当订单分组和签收分组同时提供时,请对比客户地址与两个分组中的每个地址记录,寻找完全匹配或最接近匹配的条目,判断客户地址更可能属于哪个分组,若不属于任一分组则判断为“无”;
    - **未提供订单分组时的分组判断**:若订单分组未给定,请对比客户地址与签收分组中的每个地址记录,判断客户地址是否属于该签收分组,若不属于则判断为“无”;
    - **输出判断置信度**:当你给出一个判断时,请你根据你对该判断的确定程度给出一个置信度,置信度的范围为[0,1];
    ### 技能2: 结构化输出处理
    - 根据分组判断,**请解释你的推理过程,并以JSON格式输出对应的分组名称以及该判断的置信度**
    ## 约束
    - 请以JSON格式返回分组名称,示例为```json{"group_name": "***", "confidence": "***"}```。
    - 分组判断严格基于地址文字的匹配,不考虑地理临近性。
    - 忽略地址中的无关细节,如门牌号差异,专注于街道、社区等关键信息匹配。
    - 若客户地址同时与订单分组和签收分组较为接近,请分别分析订单分组与签收分组中地址的主要特点,基于这些特点判断客户地址最可能属于哪一分组。
    ## 输入输出样例:
    客户地址: 
    [客户地址]
    订单分组: 
    [分组名称]
    [地址示例]
    签收分组: 
    [分组名称]
    [地址示例]
    输出: 
    **我的推理过程是:** 对订单分组中的地址分析可知...
    因此,分组结果为```json{"group_name": "[分组名称]", "confidence": "[置信度]"}```
    现在,请根据以上规则判断以下客户地址的分组情况。
""")

可以看到,我对大模型强调“请解释你的推理过程,并以JSON格式输出对应的分组名称以及该判断的置信度”,并在示例处让其先输出“我的推理过程是:”,从而保证让其先输出推理过程以及充足的判断理由,再输出最终的JSON答案。

当然,这只是一种实现思路,只要掌握该思想,可以通过各种方式融入到自己的业务Prompt当中。

建议大家在Prompt的编写与调优过程当中,也可以试着践行“理由先行”的风格,让大模型先输出判断的理由,再输出最终的答案,防止模型陷入瞎编答案再圆谎的恶性循环当中,或许会有奇效。

以上,即为本篇文章的全部内容,感谢您的耐心阅读!

本文中的提示词已同步在 AI Studio 提示词市场 地址匹配专家,欢迎点击试用~

参考

文章原始思路源于机器之心文章,在此基础上进一步联想深挖,将【预测下一个Token、CoT、理由先行】等概念串联起来,主要参考文献如下:

https://mp.weixin.qq.com/s/c52Ca4g0USzSIRXSEq-t4w

https://mp.weixin.qq.com/s/QX87ChDMxIecFlhywOR50A

https://mp.weixin.qq.com/s/GxX0brkFjlUN9z8oRWJUNw

https://arxiv.org/html/2406.09972v1

目录
相关文章
|
11天前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
15天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
6天前
|
并行计算 前端开发 物联网
全网首发!真·从0到1!万字长文带你入门Qwen2.5-Coder——介绍、体验、本地部署及简单微调
2024年11月12日,阿里云通义大模型团队正式开源通义千问代码模型全系列,包括6款Qwen2.5-Coder模型,每个规模包含Base和Instruct两个版本。其中32B尺寸的旗舰代码模型在多项基准评测中取得开源最佳成绩,成为全球最强开源代码模型,多项关键能力超越GPT-4o。Qwen2.5-Coder具备强大、多样和实用等优点,通过持续训练,结合源代码、文本代码混合数据及合成数据,显著提升了代码生成、推理和修复等核心任务的性能。此外,该模型还支持多种编程语言,并在人类偏好对齐方面表现出色。本文为周周的奇妙编程原创,阿里云社区首发,未经同意不得转载。
|
11天前
|
人工智能 运维 双11
2024阿里云双十一云资源购买指南(纯客观,无广)
2024年双十一,阿里云推出多项重磅优惠,特别针对新迁入云的企业和初创公司提供丰厚补贴。其中,36元一年的轻量应用服务器、1.95元/小时的16核60GB A10卡以及1元购域名等产品尤为值得关注。这些产品不仅价格亲民,还提供了丰富的功能和服务,非常适合个人开发者、学生及中小企业快速上手和部署应用。
|
7天前
|
人工智能 自然语言处理 前端开发
用通义灵码,从 0 开始打造一个完整APP,无需编程经验就可以完成
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。本教程完全免费,而且为大家准备了 100 个降噪蓝牙耳机,送给前 100 个完成的粉丝。获奖的方式非常简单,只要你跟着教程完成第一课的内容就能获得。
|
1天前
|
云安全 存储 弹性计算
|
22天前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
3968 5
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
11天前
|
算法 安全 网络安全
阿里云SSL证书双11精选,WoSign SSL国产证书优惠
2024阿里云11.11金秋云创季活动火热进行中,活动月期间(2024年11月01日至11月30日)通过折扣、叠加优惠券等多种方式,阿里云WoSign SSL证书实现优惠价格新低,DV SSL证书220元/年起,助力中小企业轻松实现HTTPS加密,保障数据传输安全。
535 3
阿里云SSL证书双11精选,WoSign SSL国产证书优惠
|
10天前
|
数据采集 人工智能 API
Qwen2.5-Coder深夜开源炸场,Prompt编程的时代来了!
通义千问团队开源「强大」、「多样」、「实用」的 Qwen2.5-Coder 全系列,致力于持续推动 Open Code LLMs 的发展。
|
18天前
|
安全 数据建模 网络安全
2024阿里云双11,WoSign SSL证书优惠券使用攻略
2024阿里云“11.11金秋云创季”活动主会场,阿里云用户通过完成个人或企业实名认证,可以领取不同额度的满减优惠券,叠加折扣优惠。用户购买WoSign SSL证书,如何叠加才能更加优惠呢?
999 3