Chain of Verification(验证链、CoVe)—理解与实现

news2025/2/27 21:48:37

原文地址:Chain of Verification (CoVe) — Understanding & Implementation

2023 年 10 月 9 日

GitHub 存储库

介绍

在处理大型语言模型(LLM)时,一个重大挑战,特别是在事实问答中,是幻觉问题。当答案看似合理但实际上不正确时,就会出现幻觉。在高级别检查中检测这些幻觉可能具有挑战性,并且通常需要更详细的检查。

为了应对这一挑战,Meta AI 团队引入了一种称为验证链 (CoVe) 的方法,该方法由以下四个连续步骤组成:

  1. 创建初始基线响应:在此步骤中,生成对原始问题的初始响应作为起点。
  2. 验证问题生成:创建验证问题是为了对基线响应进行事实检查。这些问题旨在检查初始响应的准确性。
  3. 执行验证:独立回答验证问题,以最大程度地减少任何潜在的偏差。此步骤确保验证过程客观、彻底。
  4. 最终细化答案生成:根据验证过程的结果,生成最终细化答案。这个答案预计会更加准确和可靠,减少响应中出现幻觉的可能性。

验证链(CoVe)方法旨在通过系统地验证和细化响应以最大程度地减少不准确性来增强大型语言模型提供的答案的可靠性,特别是在事实问答场景中。

在本文中,我将尝试提供对 CoVe 流程的简单理解以及入门级实施。您可以在这里阅读该论文。

验证链

验证链 (Cove) 背后的概念基于这样的概念:大型语言模型 (LLM) 生成的响应可用于验证自身。这种自我验证过程用于评估初始响应的准确性并对其进行改进以获得更高的精度。实现这一目标依赖于熟练地设计和排序 LLM 提示。

根据研究论文,我们将深入研究创建连贯链所涉及的每个步骤,使LLMs能够自我验证其响应。

生成基线响应:当提出初始查询时,它会直接输入 LLM,无需任何其他特殊提示即可获得初始响应。这一初始步骤不仅作为 CoVe 管道的起点,而且作为旨在通过该 CoVe 管道进行增强的基线。由于像这样的基线反应往往容易产生幻觉,因此 CoVe 方法旨在在后续阶段检测并纠正这些不准确之处。

计划验证:给定原始查询和基线响应作为条件,指示模型生成一组验证问题,旨在评估初始基线响应中所做事实断言的准确性。需要强调的是,这些验证问题并不是预先定义的模板,而是预先定义的。相反,语言模型可以灵活地以它认为合适的任何方式表达它们。尽管如此,这些验证问题的构建方式应使其答案有助于完善基线响应。

执行验证:计划好验证问题后,下一步就是系统地回答这些问题,以确定是否存在幻觉。此验证过程可以包括工程技术/外部工具,例如通过网络搜索进行验证。此外,您可以在 CoVe 过程的所有阶段依赖 LLM 本身,这将验证其自身的响应。作者探索了几种不同的验证执行方法,包括联合两步因子因子+修订变体。

1.联合:在此方法中,计划和验证步骤是使用向LLMs提出的单个提示请求联合完成的。不过,不建议使用这种方法,因为验证结果可能会产生幻觉并受到偏差的影响。

2.两步:此步骤与“联合”步骤完全相反。第一步生成验证问题,第二步回答验证问题。

3.因子与其使用一个大的答案,不如单独回答每个问题。这样,答案将不仅仅是基线响应的副本。这种方法还有助于避免不同问题之间的混淆,并且它可能能够处理更多验证问题,尽管它的计算成本可能很高。

4.因子+修订在我们得到验证问题的答案后,Cove管道需要检查答案是否与基线响应匹配。这是通过将答案与基线响应进行比较来完成的。这是通过使用 LLM 的附加提示作为一个单独的步骤。这个额外的步骤有助于系统更仔细地考虑这种比较。

实现

Cove管道

作者介绍的验证过程是使用一系列问题进行基准测试的。这些问题分为三大类(尽管作者最初将它们分为四类):

1. Wiki 数据和 Wiki 类别列表:此类别涉及期望以实体列表的形式得到答案的问题。例如,诸如“谁是出生在波士顿的政客?”之类的问题。“说出一些越南特有的兰花?” 应该得到呈现特定实体列表的答案。

2.多跨度 QA:此类问题寻求多个独立答案,每个答案都来自文本的不同非相邻部分。一个例子是:“谁发明了第一台机械化印刷机,是在哪一年发明的?” 答案是“约翰内斯·古腾堡,1450”

3.长篇生成:这一类别主要由传记问题组成,正如作者的基准所强调的那样。然而,它不仅限于传记。任何需要详细或冗长答复的问题都属于这一组。

我已经按照原始论文中概述的四个阶段实施了 CoVe 管道。根据前面提到的问题类型,我建立了三个不同的 CoVe 链。此外,我还整合了一种路由机制,将原始查询定向到适当的链。

请访问我的GitHub 存储库以使用代码和有关入门的更多详细信息。

路由器机制:当用户输入查询或问题时,此机制就会启动。它将用户的问题分类为前面提到的三个类别之一:Wiki 列表问题、多跨度问题或长格式问题。根据这种分类,路由器将问题引导到适当的链,每个链专门设计用于处理三种问题类型中的一种。这种分类是使用简单的几次提示设计来实现的。您可以在此处了解有关提示的更多信息。

基线响应:此阶段很简单,不需要任何即时制作。此时,用户的查询由 LLM 处理,产生我们所说的“基线响应”。随后将评估和完善此初始响应以产生最终答案。您可以进一步了解此处所有类型问题的提示。

验证问题生成:此阶段至关重要,需要精心设计和优化提示,以确保验证问题与原始查询无缝匹配。如果这些验证问题偏离了主要意图,整个链条的目的可能会受到损害。为了更好地理解这一点,让我们考虑一个例子。

原始问题:美国组织中印度裔首席执行官的姓名。

基准响应: 1. Satya Nadella(微软首席执行官),2. Sundar Pichai(Google 首席执行官) 3. Mark Zuckerberg(Meta 首席执行官)

验证问题(Set-1): 1. Satya Nadella 是 Microsoft 首席执行官吗?2. 桑达尔·皮查伊是谷歌首席执行官吗?3. 马克·扎克伯格是 Meta 的首席执行官吗?

验证问题(第二组): 1. 微软首席执行官 Satya Nadella 是印度裔吗?2. 谷歌首席执行官桑达尔·皮查伊(Sundar Pichai)是印度裔吗?3. Meta 首席执行官马克·扎克伯格是印度裔吗?

仔细检查两组验证问题后,我们可以观察到以下情况:

Set-1中,所有三个问题都将得到“是”的验证答案。最终的改进响应将包括基线响应中提供的三个名称。这不是期望的结果,因为该问题的主要目的是确定印度裔首席执行官。Set-1中的问题未能捕捉到这一具体意图。
相反,Set-2更符合我们的目标。例如,第三个验证问题将正确排除马克·扎克伯格,因为虽然他是 Meta 的首席执行官,但他不是印度裔

因此,精确的快速工程和彻底的实验在这个阶段至关重要。要进一步了解各种问题类型的提示结构,您可以参考此处。

执行验证问题:此阶段与前一阶段一样重要。即使有与主要目标一致的高度准确的验证问题,最终完善答案的质量很大程度上取决于此阶段。虽然作者仅依靠LLMs来解决生成的验证问题,但人们可以灵活地利用各种概念或外部工具来实现这一目的。在我的方法中,我使用了免费的搜索工具“duckduckgo-search”来寻找答案。然后,这些搜索结果将作为LLMs解决每个验证问题的参考上下文。替代方案包括更复杂的搜索工具基于 RAG 的系统数据库或其他检索工具和机制来回答之前提出的验证问题。要进一步了解提示结构,您可以参考此处。

最终完善的答案:这一步相对简单。它涉及利用所有先前的数据(原始查询、基线响应、验证问题及其各自的答案)来制定提供最终完善答案的提示。请参阅示例提示以供参考。

如何改进整体 CoVe 管道

1️. 提示词工程:提高任何 LLM 支持的应用程序性能的主要方法之一是通过提示词工程和提示词优化。大家可以查看我的GitHub实现中用到的所有提示。在您的用例中尝试您自己的即时工程和实验。
2️. 外部工具:由于最终输出很大程度上取决于验证问题的答案,因此根据不同的用例,您可以尝试不同的工具。对于事实问题和回答,您可以使用高级搜索工具,如 google 搜索或 serp API 等。对于自定义用例,您始终可以使用 RAG 方法或其他检索技术来回答验证问题。
3️. 更多链:我根据作者在研究中使用的三种问题类型(Wiki Data、Mutli-Span QA 和 Long-Form QA)实现了三个链。根据您的用例,您可以创建其他链来处理其他类型的 QA 方法以增加可变性。
4️. 人机交互 (HIL): HIL 是许多LLMs支持的应用程序中的重要步骤之一。在您的特定应用中,整个管道可以设计为合并 HIL,以生成适当的验证问题或回答验证问题,以进一步改进整体 CoVe 管道。

局限性

验证链 (Cove) 方法的主要局限性:

1.不完全消除幻觉: Cove 并不能完全消除生成内容中的幻觉,这意味着它仍然会产生不正确或误导性的信息。

2.缓解幻觉的范围有限: Cove 主要以直接陈述事实不准确的形式解决幻觉,但可能无法有效处理其他形式的幻觉,例如推理或观点中的错误。

3.增加计算成本:在 CoVe 中生成和执行验证以及响应会增加计算成本,类似于思想链等其他推理方法。

4.改进上限: Cove 的有效性受到底层语言模型整体能力的限制,特别是识别和纠正自身错误的能力。

结论

该论文提出了验证链(Cove)方法,这是一种旨在制作大型语言模型的策略,更批判性地思考他们的答案,并在需要时进行自我纠正。人们发现这些模型比仅仅回答初始问题更擅长回答详细的验证问题。这是因为这种方法将验证分解为更简单、更易于管理的问题。此外,人们还发现,阻止模型重新审视之前的答案有助于避免重复任何错误或“幻觉”。简而言之,该技术只需仔细检查其答案就可以极大地提高模型的响应。一项潜在的改进可能是为 CoVe 提供额外的工具,例如允许它从外部来源提取信息,这可以进一步提高其性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1504540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排序算法全景:从基础到高级的Java实现

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

【红外与可见光融合:条件学习:实例归一化(IN)】

Infrared and visible image fusion based on a two-stage class conditioned auto-encoder network (基于两级类条件自编码器网络的红外与可见光图像融合) 现有的基于自动编码器的红外和可见光图像融合方法通常利用共享编码器从不同模态中提取特征&am…

Java17 --- springCloud之LoadBalancer

目录 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom 1.3、80服务controller层&#xff1a; 一、LoadBalancer实现负载均衡 1.1、创建两个相同的微服务 1.2、在客户端80引入loadBalancer的pom <!--loadbalancer-->&…

ARTS Week 20

Algorithm 本周的算法题为 1222. 可以攻击国王的皇后 在一个 下标从 0 开始 的 8 x 8 棋盘上&#xff0c;可能有多个黑皇后和一个白国王。 给你一个二维整数数组 queens&#xff0c;其中 queens[i] [xQueeni, yQueeni] 表示第 i 个黑皇后在棋盘上的位置。还给你一个长度为 2 的…

js【详解】async await

为什么要使用 async await async await 实现了使用同步的语法实现异步&#xff0c;不再需要借助回调函数&#xff0c;让代码更加易于理解和维护。 (async function () {// await 必须放在 async 函数中try {// 加载第一张图片const img1 await loadImg1()// 加载第二张图片co…

Linux网络套接字之UDP网络程序

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 实现一个简单的对话发消息的功能&#xff01; 目录…

力扣---腐烂的橘子

题目&#xff1a; bfs思路&#xff1a; 感觉bfs还是很容易想到的&#xff0c;首先定义一个双端队列&#xff08;队列也是可以的~&#xff09;&#xff0c;如果值为2&#xff0c;则入队列&#xff0c;我这里将队列中的元素定义为pair<int,int>。第一个int记录在数组中的位…

毅速3D打印随形透气钢:模具困气排气革新之选

在注塑生产过程中&#xff0c;模具内的气体若无法有效排出&#xff0c;往往会引发困气现象&#xff0c;导致产品表面出现气泡、烧焦等瑕疵。这些瑕疵不仅影响产品的美观度&#xff0c;更可能对其性能造成严重影响&#xff0c;甚至导致产品报废&#xff0c;从而增加生产成本。 传…

【C语言】linux内核tcp_write_xmit和tcp_write_queue_purge

tcp_write_xmit 一、讲解 这个函数 tcp_write_xmit 是Linux内核TCP协议栈中的一部分&#xff0c;其基本作用是发送数据包到网络。这个函数会根据不同情况推进发送队列的头部&#xff0c;确保只要远程窗口有空间&#xff0c;就可以发送数据。 下面是对该函数的一些主要逻辑的中…

C语言--函数指针变量和函数指针数组的区别(详解)

函数指针变量 函数指针变量的作用 函数指针变量是指向函数的指针&#xff0c;它可以用来存储函数的地址&#xff0c;并且可以通过该指针调用相应的函数。函数指针变量的作用主要有以下几个方面&#xff1a; 回调函数&#xff1a;函数指针变量可以作为参数传递给其他函数&…

基于pytorch的视觉变换器-Vision Transformer(ViT)的介绍与应用

近年来&#xff0c;计算机视觉领域因变换器模型的出现而发生了革命性变化。最初为自然语言处理任务设计的变换器&#xff0c;在捕捉视觉数据的空间依赖性方面也显示出了惊人的能力。视觉变换器&#xff08;Vision Transformer&#xff0c;简称ViT&#xff09;就是这种变革的一个…

链表基础知识详解

链表基础知识详解 一、链表是什么&#xff1f;1.链表的定义2.链表的组成3.链表的优缺点4.链表的特点 二、链表的基本操作1.链表的建立2.链表的删除3.链表的查找4.链表函数 一、链表是什么&#xff1f; 1.链表的定义 链表是一种物理存储单元上非连续、非顺序的存储结构&#xf…

人工智能|机器学习——K-means系列聚类算法k-means/ k-modes/ k-prototypes/ ......(划分聚类)

1.k-means聚类 1.1.算法简介 K-Means算法又称K均值算法&#xff0c;属于聚类&#xff08;clustering&#xff09;算法的一种&#xff0c;是应用最广泛的聚类算法之一。所谓聚类&#xff0c;即根据相似性原则&#xff0c;将具有较高相似度的数据对象划分至同一类簇&#xff0c;…

【Docker】golang使用DockerFile正确食用指南

【Docker】golang使用DockerFile正确食用指南 大家好 我是寸铁&#x1f44a; 总结了一篇golang使用DockerFile正确食用指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 问题背景 今天寸铁想让编写好的go程序在docker上面跑&#xff0c;要想实现这样的效果&#xff0c;就需要用…

流放者柯南服务器端搭建!

这是一个开放世界生存游戏。在这个游戏里&#xff0c;你可以建造自己的城堡&#xff0c;探索神秘的遗迹&#xff0c;与野兽和敌人战斗&#xff0c;甚至成为一个神。 首先推荐服务器配置&#xff1a; 4核16G 月50 季度200 8核32G 月120 季度350 含安装搭建服务&#xff01…

《剑指 Offer》专项突破版 - 面试题 76 : 数组中第 k 大的数字(C++ 实现)

目录 详解快速排序 面试题 76 : 数组中第 k 大的数字 详解快速排序 快速排序是一种非常高效的算法&#xff0c;从其名字可以看出这种排序算法最大的特点是快。当表现良好时&#xff0c;快速排序的速度比其他主要对手&#xff08;如归并排序&#xff09;快 2 ~ 3 倍。 快速排…

WordPress高端后台美化WP Adminify Pro优化版

后台UI美化WP Adminify Pro修改自定义插件&#xff0c;适合建站公司和个人使用&#xff0c;非常高大上&#xff0c;下载地址&#xff1a;WP Adminify Pro优化版 修复记录&#xff1a; 1、修复已知BUG 2、修复手机版兼容问题 3、修复打开速度&#xff0c;原版打开速度太慢 4…

Git的基本操作(安装Git,创建本地仓库,配置Git,添加、修改、回退、撤销修改、删除文件)

文章目录 一、Git安装二、创建本地仓库三、配置Git四、认识工作区、暂存区、本地库五、添加文件六、修改文件七、版本回退八、撤销修改1.对于⼯作区的代码&#xff0c;还没有add2.已经add&#xff0c;但没有commit3.已经add&#xff0c;并且已经commit 九、删除⽂件 一、Git安装…

解释区块链技术的应用场景、优势及经典案例

目录 1.区块链应用场景 2.区块链优势 3.区块链经典案例 区块链技术是一种分布式账本技术&#xff0c;它通过加密和安全验证机制&#xff0c;允许网络中的多个参与者之间进行可信的、不可篡改的交易和数据的记录与传输。区块链技术的应用场景广泛&#xff0c;其优势也十分显著…

R语言复现:中国Charls数据库一篇现况调查论文的缺失数据填补方法

编者 在临床研究中&#xff0c;数据缺失是不可避免的&#xff0c;甚至没有缺失&#xff0c;数据的真实性都会受到质疑。 那我们该如何应对缺失的数据&#xff1f;放着不管&#xff1f;还是重新开始?不妨试着对缺失值进行填补&#xff0c;简单又高效。毕竟对于统计师来说&#…