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

原文地址: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.hqwc.cn/news/526071.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day27:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

目录 TP框架-开发-配置架构&路由&MVC模型 TP框架-安全-不安全写法&版本过滤绕过 思维导图 PHP知识点 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等 技…

时间感知自适应RAG(TA-ARE)

原文地址:Time-Aware Adaptive RAG (TA-ARE) 2024 年 3 月 1 日 介绍 随着大型语言模型(LLM)的出现,出现了新兴能力的概念。前提或假设是LLMs具有隐藏的和未知的能力,等待被发现。企业家们渴望在LLMs中发现一些无人知晓…

Linux学习:权限

目录 1. shell命令的工作原理与存在意义1.1 shell命令解释器存在的意义1.2 shell解释器的工作原理 2. Linux操作系统:用户2.1 什么是用户2.2 用户的切换操作2.3 用户权限划分的意义 3. Linux中权限的种类和意义3.1 什么是权限3.2 sudo指令与短暂提权 4. 文件类型与文…

Django模型层(附带test环境)

Django模型层(附带test环境) 目录 Django模型层(附带test环境)连接数据库Django ORM在models.py中建表允许为空指定默认值数据库迁移命令 开启测试环境建表语句补充(更改默认表名)数据的增加时间数据的时区 多表数据的增加一对多多对多 数据的删除修改数据查询数据查询所有数据…

【Claude 3】一文谈谈Anthropic(Claude) 亚马逊云科技(Bedrock)的因缘际会

文章目录 前言1. Anthropic的诞生2. Anthropic的“代表作”——Claude 3的“三驾马车”3. 亚马逊云科技介绍4. 强大的全托管服务平台——Amazon Bedrock5. 亚马逊云科技(AWS)和Anthropic的联系6. Claude 3模型与Bedrock托管平台的关系7. Clude 3限时体验入口分享【⚠️截止3月1…

力扣---腐烂的橘子

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

Diddler抓包工具——学习笔记

F12抓包 302【重定向】&#xff1a;当你发送了一个请求之后&#xff0c;那么这个请求重定向到了另外的资源 跳转和重定向的区别&#xff1a; 跳转是会把数据传到新的地址 重定向不会把新的数据传到新的地址 使用F12抓包时一定要打开Preserve Log开关&#xff0c;作用是保留…

HttpURLConnection详解及使用

HttpURLConnection 请求响应流程 设置连接参数的方法 setAllowUserInteractionsetDoInputsetDoOutputsetIfModifiedSincesetUseCachessetDefaultAllowUserInteractionsetDefaultUseCaches 发送URL请求 建立实际连接之后&#xff0c;就是发送请求&#xff0c;把请求参数传到…

复盘-excel

excel-选列没有用&#xff0c;选小标题才可以 将簇状柱形图放置在一个新表上##### excel: 添加数据模型时&#xff0c;要通过套用表格格式与外部断开连接 透视分析2010年人数未解决(第四套&#xff09; 通过日期显示星期几 判断星期几 因为前面已经通过星期六&#xff0c…

对中国境内所有地区KFC门店基本信息的统计(简略版)

我们要获取每个地区的kfc信息就要先获取中国一共有哪些地区 中国所有城市名称获取 import requests from lxml import etreewith open(f./省份.txt, w) as fp:fp.write() with open(f./城市.txt, w) as fp:fp.write()url1http://www.kfc.com.cn/kfccda/storelist/index.aspx#…

Qt 拖动事件

文章目录 1 自定义控件 TextEdit2 实现打开文件功能3 实现鼠标滚轮放大字体 QEvent::DragEnter 当拖动文件进入到窗口/控件中时&#xff0c;触发该事件&#xff0c;它对应的子类是QDragEnterEvent QEvent::DragLeave 当拖动文件离开窗口/控件时&#xff0c;触发该事件&#xff…

鸿蒙OpenHarmony HDF 驱动开发

目录 序一、概述二、HDF驱动框架三、驱动程序四、驱动配置坚持就有收获 序 最近忙于适配OpenHarmonyOS LiteOS-M 平台&#xff0c;已经成功实践适配平台GD32F407、STM32F407、STM32G474板卡&#xff0c;LiteOS适配已经算是有实际经验了。 但是&#xff0c;鸿蒙代码学习进度慢下…