论文 | Measuring and Narrowing the Compositionality Gap in Language Models

news/2024/7/8 1:39:35 标签: 人工智能, 机器学习, 深度学习

存在的问题:

        关于一个复杂的多跳问题,大语言模型可以正确回答基于该问题分解的多个子问题,但是对于这个问题的最终答案大语言模型可能最终还是给不出来正确的。该论文根据这个现象提出了一个术语,叫“组合性差距”。

解决的方法:

        提出一种叫“self-ask”的方法,该方法是一种基于提示工程的更高级的技术,它通过引导模型进行自我反思和问题分解,从而更好地理解问题和生成答案。

自问通过以下步骤实现:

1. 问题分解

  • 模型首先分析初始问题,并确定是否需要分解为更简单的子问题。
  • 如果需要,模型会生成一个后续问题,并将其作为子问题提交给模型自身或搜索引擎。

2. 子问题回答

  • 模型回答生成的子问题,并返回答案。
  • 如果子问题无法通过模型自身或搜索引擎得到答案,则可以继续生成更简单的子问题,直到得到答案为止。

3. 最终答案生成

  • 模型根据子问题的答案,结合自身知识,生成最终答案。

自问方法的优势:

  • 明确的结构: 自问方法通过“后续问题”和“中间答案”等提示词,清晰地标记了问题分解和答案生成的过程,使得模型更容易理解和使用。
  • 可扩展性: 自问方法可以轻松地与外部知识库(如搜索引擎)结合,进一步提升模型回答组合问题的能力。
  • 提高准确率: 自问方法可以帮助模型更好地理解问题,并避免因错误组合事实而导致的错误答案。

 自问方法的局限性:

  • 依赖模型能力: 自问方法的有效性依赖于模型自身的能力,如果模型无法理解问题或生成合适的子问题,则该方法可能无法发挥作用。
  • 计算成本: 自问方法可能需要模型进行多次推理,从而增加计算成本。

评估指标(间接评估了子问题在模型组合推理中的作用):

1. 组合推理差距

  • 论文主要关注“组合推理差距”,即模型正确回答所有子问题但无法得出最终答案的比例。
  • 组合推理差距的大小可以反映模型进行组合推理的能力。
  • 研究发现,随着模型规模的增加,组合推理差距并没有显著下降,这表明模型在组合事实方面存在局限性。

2. 子问题正确率

  • 论文统计了模型回答子问题的正确率,并发现模型在大多数子问题上的正确率较高。
  • 这表明模型能够理解和回答子问题,但在将子问题答案组合成最终答案方面存在困难。

3. 模型对子问题的置信度

  • 论文分析了模型对子问题答案的置信度,发现模型对子问题答案的置信度越高,回答组合问题的正确率也越高。
  • 这表明模型在进行组合推理时,需要对其自身知识有较高的置信度。

4. 自问方法的性能提升

  • 论文比较了自问方法和其他方法的性能,发现自问方法能够显著提高模型回答组合问题的准确率。
  • 这表明自问方法能够帮助模型更好地理解问题和生成答案,从而缩小组合推理差距。

http://www.niftyadmin.cn/n/5536008.html

相关文章

ansible执行任务时,报错/usr/bin/env node没有文件或目录。

报错如图: 解决:添加软链即可 sudo ln -s /home/app/node-v18.20.3/bin/node /usr/bin/node

c++【入门】两个数之和

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 我们现在要做一个非常简单的题目,实现一个完整的程序。当它运行起来后,我们希望通过键盘输入两个整数,我们先把它们称为 a 和 b。然后把他们的和 a b 作为结果给存到sum,并输出…

【设计模式】设计模式学习线路与总结

文章目录 一. 设计原则与思想二. 设计模式与范式三. 设计模式进阶四. 项目实战 设计模式主要是为了改善代码质量,对代码的重用、解耦以及重构给了最佳实践,如下图是我们在掌握设计模式过程中需要掌握和思考的内容概览。 一. 设计原则与思想 面向对象编…

C# MathNet未完

Vector 在 MathNet.Numerics 中&#xff0c;Vector<T> 是表示向量的类。Vector<T> 可以是列向量或行向量&#xff0c;具体取决于你如何创建它以及如何使用它。以下是一些创建和使用 Vector<T> 的常见方法&#xff1a; 使用 Build.Dense 创建列向量&#xf…

Python/Django 服务器升级脚本

编写 Python/Django 服务器升级脚本可以根据具体需求而异&#xff0c;一般涵盖以下几个主要步骤&#xff1a; 在编写脚本之前&#xff0c;确保以下准备工作已完成&#xff1a; 确定需要升级的内容&#xff0c;例如代码、数据库结构、依赖库等。确保服务器和数据库备份&#x…

python vtkLODProp3D

vtkLODProp3D是VTK库中的一个类&#xff0c;用于表示一个可以根据相机距离改变其复杂度的3D对象。这种技术可以用于优化渲染性能&#xff0c;特别是当场景中有大量的对象或对象复杂度很高时。 在Python中&#xff0c;你可以使用VTK库来操作和处理3D数据。如果你想使用vtkLODPr…

Spring Boot:轻松设置全局异常处理

Spring Boot&#xff1a;轻松设置全局异常处理 在软件开发中&#xff0c;异常处理是一项至关重要的任务。对于使用Spring Boot的开发者来说&#xff0c;设置全局异常处理不仅可以提高代码的整洁度&#xff0c;还可以提升用户体验。本文将详细介绍如何在Spring Boot中轻松设置全…

FFT 简单基础(matlab

使用 fs 进行采样&#xff0c;进行 N点FFT 选择显示0~N/21点的幅值 横坐标对应频率计算公式&#xff1a; fs * n / N 举个梨子&#xff1a; 频率2kHz采样1s&#xff0c;得到2000个点的序列y(n) 对序列y(n)做4096点的FFT 幅值响应对应的横坐标频率…