当前位置: 首页 > article >正文

用伪代码Prompt让LLM进行图推理,生成更精准内容

最近有研究发现,当LLM面对结构化数据,特别是图数据时,LLM的表现却不尽如人意。这几天,来自希腊和法国的研究团队提出了一种创新方法——利用伪代码提示来增强LLM的图推理能力。我基于这项研究先写了一个伪代码的SYSYTEM PROMPT运行出了一个社交网络分析的结果,再用这个结果写了一段代码,运行出了下面的图。我的评价只有一句:LLM图推理还是要用Pseudo prompt。

01

伪代码提示的力量

尽管LLM在自然语言处理领域取得了显著成就,但在处理图结构数据时仍面临重大挑战。先前的研究表明,LLM在解决某些看似简单的图问题时存在困难。例如,Wang等人(2023a)的研究显示LLM具有初步的图推理能力,而Fatemi等人(2024)的研究则发现LLM在一些基本图任务(如计算图的边数)上表现不佳。这种矛盾的结果凸显了LLM在图推理领域的不稳定性,也促使研究者思考:如何才能有效提升LLM在图推理任务中的表现?

研究团队提出了一种新颖的方法:使用伪代码作为提示来增强LLM的图推理能力。这种方法的核心思想是将算法逻辑以伪代码的形式呈现给LLM,从而引导模型按照结构化、模块化的方式进行问题解决。

  • 图任务:展示了一个简单的图结构。

  • 伪代码:提供了计算边数的算法步骤。

  • 提示:将图任务转化为自然语言问题。

  • 最终提示:结合伪代码和问题,形成完整的提示。

  • 输出:按照伪代码prompt输出

这一方法具有以下几个关键优势:

1. 减少歧义: 相比自然语言,伪代码提供了更清晰、更精确的指令,减少了理解上的歧义。

2. 结构化思维: 伪代码prompt引导LLM按照算法逻辑进行推理,促进了结构化思维。

3. 增强可解释性: 通过提供清晰的步骤,伪代码prompt使得LLM的推理过程更加透明和可解释。

4. 融入领域知识: 伪代码允许研究者将图论和算法设计的专业知识直接注入到prompt中。这一点很重要,可以减轻LLM的先验知识匮乏导致的幻觉。

02

实验设计:全面且系统的评估

为全面评估这种方法的有效性,研究团队设计了一个复杂而系统的实验:

1. 图任务范围:

研究涵盖了10种不同复杂度的图算法问题:

- 节点计数

- 边计数

- 节点度数计算

- 邻居节点识别

- 连通分量计数

- 循环检测

- 最小生成树

- 最短路径计算

- 二分图检测

- 拓扑排序

2. 图类型和规模:

- 主要使用Erdős–Rényi随机图

- 根据节点数量将图分为三类:

* 小型(5-11个节点)

* 中型(11-21个节点)

* 大型(21-51个节点)

- 特殊任务使用特定图类型:

* 拓扑排序任务使用有向无环图

* 二分图检测任务使用随机二分图和Erdős–Rényi图

3. 数据集规模:

- 总计生成6,600个问题实例

- 对于图级属性任务,每种图大小生成100个问题

- 对于节点级属性任务,每种图大小生成500个问题

- 对于边级属性任务,每种图大小生成500个问题

4. 模型选择:

实验采用了两种代表性的LLM:

- GPT-3.5-Turbo:代表专有模型

- Mixtral 7x8B:代表开源模型

5. 对比方法:

研究比较了多种提示方法:

- 零样本提示(0-SHOT)

- 单样本学习(1-SHOT)

- Build-a-Graph提示(BAG)

- 零样本思维链(0-COT)

- 伪代码提示(PSEUDO)

- 伪代码提示+单样本学习(PSEUDO+1-SHOT)

6. 评估指标**:**

使用准确率(正确答案数/总查询数)作为主要评估指标

这种全面的实验设计确保了研究结果的可靠性和普适性,为后续研究提供了坚实的基础。

03

深入分析伪代码提示的效果

1. 整体性能提升

实验结果显示,伪代码提示方法在多数任务中都带来了性能提升。特别是在LLM原本表现欠佳的任务中,这种提升更为显著。例如:

- 对于GPT-3.5-Turbo,在边计数任务中:

* 小型图:PSEUDO方法达到90%准确率,比0-SHOT提高12个百分点

* 中型图:PSEUDO方法达到34%准确率,比0-SHOT提高18个百分点

* 大型图:PSEUDO方法达到9%准确率,比0-SHOT提高7个百分点

- 对于Mixtral 7x8B,在连通分量计数任务中:

* 小型图:PSEUDO+1-SHOT方法达到75%准确率,比0-SHOT提高40个百分点

* 中型图:PSEUDO方法达到63%准确率,比0-SHOT提高23个百分点

2. 模型差异化表现

研究发现,伪代码提示对不同模型的影响并不一致。这一发现强调了prompt工程需要针对不同模型进行定制化设计的重要性。例如:

- 在循环检测任务中:

* 对GPT-3.5-Turbo,PSEUDO方法显著提升了性能(小型图从43%提升到76%)

* 对Mixtral 7x8B,PSEUDO方法反而降低了性能(小型图从85%降至33%)

3. 图规模的影响

研究清晰地表明,随着图规模的增大,LLM的性能普遍下降。这一发现对于处理大规模图数据的prompt设计提出了挑战。例如:

- 在节点度数计算任务中,GPT-3.5-Turbo的性能随图规模增大而显著下降:

* 小型图:75%准确率

* 中型图:24%准确率

* 大型图:6%准确率

4. 节点计数vs边计数

一个令人惊讶的发现是,LLM在节点计数任务上表现出色,但在边计数任务上却困难重重。这种差异在大型图上尤为明显:

- GPT-3.5-Turbo在大型图上的表现:

* 节点计数:100%准确率

* 边计数:仅2%准确率

5. 单例示范的有效性

研究表明,在使用伪代码提示时,仅需一个示例就能达到良好的效果,有时甚至优于多个示例。例如:

- 在最小生成树任务中,对于小型图:

* PSEUDO+1-SHOT方法达到64%准确率

* 增加更多示例并未带来显著改善

6. 伪代码风格的影响

研究还探讨了不同伪代码风格对LLM性能的影响:

- 在最小生成树任务中:

* Python风格伪代码:31%准确率

* 普通伪代码:24%准确率

* 复杂伪代码(多函数):29%准确率

这表明,伪代码的具体表达方式也会影响LLM的理解和执行。

04

伪代码提示的优势所在

1. 结构化思维的引导

伪代码提示为LLM提供了一个清晰的问题解决框架,引导模型按照算法逻辑进行推理。这种结构化的思维方式有助于LLM更好地理解和解决图算法问题。例如,在最短路径计算任务中,伪代码明确指出了使用广度优先搜索的步骤,这大大提高了LLM找到正确解决方案的概率。

2. 歧义性的减少

相比自然语言描述,伪代码具有更低的歧义性。这使得LLM能够更准确地理解任务要求,从而生成更精准的答案。例如,在边计数任务中,伪代码清晰地指出了遍历边列表并累加计数的过程,避免了可能的误解。

3. 步骤分解的优势

伪代码提示将复杂的图算法问题分解为一系列简单步骤。这种分解不仅使得问题更容易解决,也提高了推理过程的可解释性。在连通分量计数任务中,伪代码明确列出了初始化、遍历和合并组件的步骤,使LLM能够逐步推理。

4. 领域知识的融入

通过伪代码,研究者可以将图论和算法设计的专业知识直接注入到提示中。这种方式有效地弥补了LLM在特定领域知识上的不足。例如,在最小生成树任务中,伪代码包含了Kruskal算法的核心思想,这对LLM的正确推理起到了关键作用。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

05

实践启示

这项研究为prompt工程师们提供了宝贵的实践指导:

1. 领域特化的提示设计

针对特定领域的问题,如图算法,使用该领域的专业语言(如伪代码)可能比一般的自然语言提示更有效。例如,在拓扑排序任务中,使用描述有向无环图特性的伪代码可以显著提高LLM的性能。

2. 模型特化的策略

不同的LLM可能对同一种提示方法有不同的反应。因此,在设计prompt时需要考虑目标模型的特性。研究显示,GPT-3.5-Turbo和Mixtral 7x8B在某些任务上对伪代码提示的反应存在显著差异,这强调了针对特定模型优化prompt的重要性。

3. 问题分解的重要性

将复杂问题分解为简单步骤不仅有助于LLM更好地理解和解决问题,也提高了结果的可解释性。在最短路径计算等复杂任务中,这种分解策略的效果尤为明显。

4. 示例的精简原则

在使用伪代码提示时,往往只需要一个精心设计的示例就能达到良好效果。这一发现有助于简化prompt设计过程,同时也降低了计算成本。

5. 规模适应性的考虑

随着处理对象(如图)规模的增大,LLM的性能可能会下降。在设计prompt时需要考虑这一因素,可能需要为不同规模的问题设计不同的提示策略。例如,对于大型图,可能需要更详细的步骤分解或更多的中间检查点。

6. 伪代码风格的选择

研究表明,不同风格的伪代码(如Python风格、普通伪代码、复杂多函数伪代码)对LLM的性能有不同影响。prompt工程师应该根据具体任务和目标模型选择最合适的伪代码风格。

对于正在开发AI产品的prompt工程师来说,这项研究提供了宝贵的启示:

1. 领域知识的重要性: 在设计prompt时,应考虑如何有效地将领域特定的知识和结构融入其中。

2. 问题分解的艺术: 将复杂任务分解为清晰、可执行的步骤是提高LLM性能的关键。

3. 模型特化的必要性: 不同的LLM可能需要不同的提示策略,需要针对特定模型进行优化。

4. 规模适应性的挑战: 随着问题规模的增大,可能需要调整提示策略以维持性能。

5. 持续实验和优化: prompt工程是一个需要不断实验和调整的过程,以找到最佳的提示方法。

伪代码提示方法为LLM在处理结构化数据和复杂算法问题方面开辟了新的可能性。我也把这项研究应用到实际中,如开篇介绍的那样,解决一个在社交媒体中寻找“隐藏影响者”的问题,实际代码中我将用户改为1000,实际找到46名,显示前5名,并分析说明如何利用这些隐藏影响者来进行营销:

OpenAI o1

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述


http://www.kler.cn/news/339974.html

相关文章:

  • MyBatis-Plus 之 typeHandler 的使用
  • 医院管理智能化:Spring Boot技术革新
  • 鸿蒙开发(NEXT/API 12)【为应用添加自动生成高强度密码的建议】系统安全
  • 提交gitlab
  • 通过调整尺寸压缩 PNG 图片并转换为 PDF (Python)
  • AI 大模型的核心能力与应用场景全解析
  • Redis: 集群高可用之故障转移和集群迁移
  • Spring Boot学习资源库:微服务架构的加速器
  • Rust编程中的循环语句
  • 平时使用的正则总结
  • 前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
  • LSTM的变体
  • ArkTS基本语法详解
  • 浙大数据结构:08-图7 公路村村通
  • helm 测试卸载或删除(redis)
  • RabbitMQ概述
  • Redis: 集群高可用之节点与插槽管理
  • 介绍C++
  • funasr: 报错 CUDA error: invalid device ordinal
  • GO语言中struct{}和struct{}{}区别