探索AI大模型(LLM)减少幻觉的三种策略
大型语言模型(LLM)在生成文本方面具有令人瞩目的能力,但在面对陌生概念和查询时,它们有时会输出看似合理却实际错误的信息,这种现象被称为“幻觉”。近期的研究发现,通过策略性微调和情境学习、检索增强等方法,可以显著降低这种幻觉现象的发生。
当LLM遭遇不熟悉的查询时,它们可能会产生幻觉,即那些听起来头头是道却与事实不符的回答。这主要是因为在训练数据中缺少相关背景信息时,LLM仍会尝试根据其在训练过程中学到的规律生成通顺的答案。麻省理工学院的研究人员在其首篇论文中指出,当LLM被问到其预训练语料库中鲜有涉及的概念时,幻觉现象尤为明显。例如,如果要求模型撰写一个不太出名人物的传记,由于缺乏足够的数据支持,模型可能会编造出不实的内容。
为了应对这一挑战,研究者们提出了一些策略,来降低LLM幻觉的可能性。
-
策略性微调(Strategic Fine-Tuning),使用包含“I don’t know”标记的响应的数据集来训练模型,特别是在面对不熟悉的查询时。这种训练方法帮助模型学会在不确定时表达不确定性,而不是捏造信息。
-
多样本上下文学习(Many-Shot In-Context Learning),是一种通过在大上下文窗口中提供大量示例来增强模型适应性和准确性的方法。
-
检索增强生成(Retrieval-Augmented Generation, RAG),通过整合外部知识源来减少幻觉现象的方法,确保生成的响应基于从可信来源检索到的事实信息。
通过这些方法,LLM在处理不熟悉查询时的准确性和可靠性得到了显著提升。
策略性微调(Strategic Fine-Tuning)
策略性微调是针对大型语言模型(LLM)的一种先进训练方法,目的在于降低模型在处理不熟悉查询时产生错误响应的倾向。这种方法的核心在于教会模型在知识边界之外时表达不确定性,而不是编造信息。
-
数据集的选择与准备:选择或创建包含熟悉和不熟悉查询的数据集,并为后者标注“I don’t know”。
-
微调过程:使用这个标注过的数据集对模型进行微调,使其学习在面对不熟悉的查询时如何表达不确定性。
-
强化学习(RL)的应用:结合强化学习来鼓励模型在不确定时给出不确定的响应,而不是错误的响应。通过设计奖励函数,使得模型在给出不确定响应时获得正向反馈。
首先需要构建或选择一个包含广泛查询的数据集,并对那些可能导致模型产生幻觉的查询进行明确标注。随后,在该数据集上对模型进行微调,强化其在遇到这些特定查询时识别自身知识的局限。此外,通过结合强化学习技术,模型被激励在不确定时提供不确定的响应,而不是错误的信息。这涉及到设计合适的奖励机制,以正向反馈鼓励模型的适当行为。
效果体现在显著降低模型幻觉的同时,提升了其在面对边缘情况或少见查询时的可靠性。它的优势在于增强了模型的适应性,使其在缺乏足够信息的情况下,能够更加合理地处理查询,而不是盲目生成可能误导用户的响应。
挑战和限制,高质量的标注数据集是成功实施微调的关键,这可能需要大量的人工工作和专业知识。强化学习技术的集成可能会增加计算资源的需求。还有,确保模型在微调后具有良好的泛化能力,能够处理未见过的数据,是另一个重要的考量点。
策略性微调通过精心设计的训练过程和强化学习的应用,有效地提升了大型语言模型在处理不熟悉查询时的表现。这种方法不仅减少了模型产生错误信息的风险,还增强了用户对模型输出的信任度,从而在实际应用中发挥了重要作用。随着人工智能技术的不断进步,策略性微调将继续作为提高语言模型可靠性的重要手段。
多样本上下文学习(Many-Shot In-Context Learning)
这种方法的核心思想是利用大量的、多样化的示例来减少模型在面对不常见或新颖情况时产生幻觉的可能性。模型不是孤立地处理每一个查询,而是通过在上下文中提供大量示例来学习特定任务。这种方法使得模型能够从一系列相关的交互中学习,从而更好地捕捉语言和任务的细微差别。通过这种方式,模型能够接触到更广泛的语言使用场景,包括边缘情况和复杂查询,这有助于提高其泛化能力。
与传统的少量样本学习(few-shot learning)相比,多样本上下文学习通过增加上下文信息的数量,显著提高了模型对复杂任务的理解和适应能力。从提供非常少(1-5)个示例的少样本上下文学习(few-shot learning)到提供很多(100-1000)个示例的多样本上下文学习(Many-Shot In-Context Learning),性能会有很大的飞跃 - 任务越难,提示中更多的示例所带来的好处就越多。
实施多样本上下文学习的第一步是准备一个包含丰富示例的数据集。这些示例应该涵盖各种情况,包括边缘案例和复杂查询,以便模型能够学习到任务的多样性和复杂性。数据集的质量和多样性对模型性能有直接影响。
这种策略可以提高大型语言模型对新任务和不熟悉查询的适应性。通过在训练过程中提供丰富的上下文信息,这种方法有助于减少模型的幻觉现象,提高其在各种语言使用场景下的表现。Google Deepmind的论文提到另一个有意思的发现,提示中示例的顺序也会影响多样本性能,DSPy 等优化系统如何帮助解决这个问题。DSPy是斯坦福大学出的一个开源项目,用于优化大模型Prompt和权重,后面再研究一下这个框架。
检索增强生成(Retrieval-Augmented Generation, RAG)
检索增强生成是一种通过整合外部知识源来减少幻觉现象的方法。这种方法确保生成的响应基于从可信来源检索到的事实信息。RAG的关键步骤包括初始响应生成、多语言一致性检查和检索增强。通过这种方式,模型可以利用外部知识数据库来补充其内部知识,从而提高响应的准确性。
检索增强生成的机制
-
初始响应生成:模型根据其内部知识生成初始响应,通常采用链式思考(Chain-of-Thought)方法来详细说明响应背后的推理过程。
-
多语言一致性检查:多语言检测系统评估初始响应在不同语言中的一致性。如果检测到不一致,系统将响应标记为可能的幻觉。
-
检索增强:对于被标记为不一致的响应,检索机制从外部数据库获取相关信息,并将增强的信息整合到最终响应中,确保输出在事实上是准确的,并且得到了外部知识的充分支持。
检索增强生成(RAG)架构在减少幻觉方面取得了显著的效果,这个已经是一个共识。
三种策略对比
1.熟悉度
FT:最适合查询非常熟悉且与训练数据相似的情况。它在模型需要根据众所周知的信息产生高度准确的响应的场景中表现出色。
ICL:非常适合中等熟悉度到不熟悉的查询。此方法在查询差异很大的场景中表现出色,包括极端情况和不太常见的示例,为模型提供了广泛的上下文供其学习。
RAG:最适合处理不熟悉的查询,其中模型可以通过访问外部信息受益匪浅,以确保响应的准确性。
2.任务的复杂性
-
FT:适用于定义明确且可在训练数据集内全面覆盖的低到中等复杂度任务。
-
ICL:适用于中高复杂度的任务。这种方法通过在大型上下文窗口内提供大量示例,使模型能够处理更细微、更复杂的查询,从而增强模型的适应和泛化能力。
-
RAG:最适合需要大量最新信息的高复杂性、开放式任务。它利用广泛的外部知识来处理复杂的查询。
3.资源可用性
-
FT:需要大量资源,包括大量标记数据集和训练计算能力。适用于拥有大量数据和计算能力的组织。
-
ICL:对资源要求适中。需要样本,但不像微调那样广泛。适用于资源可用但资源不那么丰富的场景。它可以有效利用现有示例来增强模型性能。
-
RAG:对标记数据的要求相对较低,但需要访问强大而全面的外部数据库。适用于标记数据稀缺但可以访问知识库的情况。
4.期望响应精度
-
FT:确保在训练数据范围内响应的准确性较高。非常适合精度至关重要且查询在已知域内的应用。
-
ICL:能够提供较高的准确率,通过利用大量示例,在处理多样化和不熟悉的查询时,其表现通常优于 FT。该方法在准确性和适应性之间取得平衡,使其适用于动态环境。
-
RAG:通过使用外部知识验证响应来提供高精度。最适合事实正确性至关重要的场景,尤其是在处理新颖或鲜为人知的信息时。
5.时间限制
-
FT:由于数据准备和训练需要时间,因此最适合长期项目。不适合快速部署需求。
-
ICL:适用于中期项目。比微调更快,但仍需要时间来收集和整合相关示例。它提供了一种比 FT 更快的替代方案,并且具有提高各种查询性能的优势。
-
RAG:最适合短期需求。通过动态检索相关信息提供实时增强,使其成为快速部署和即时响应场景的理想选择。
总结
这三种方法的结合,显著提升了LLM在处理不熟悉查询时的准确性和可靠性,减少了幻觉现象,增强了模型的整体性能和用户信任度。随着人工智能技术的不断进步,这些策略有望进一步发展和完善,为提高语言模型的可靠性提供关键支持。
相关文章:

探索AI大模型(LLM)减少幻觉的三种策略
大型语言模型(LLM)在生成文本方面具有令人瞩目的能力,但在面对陌生概念和查询时,它们有时会输出看似合理却实际错误的信息,这种现象被称为“幻觉”。近期的研究发现,通过策略性微调和情境学习、检索增强等方…...

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第十三章 Linux连接档
i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…...

鸿蒙语言基础类库:【@ohos.uri (URI字符串解析)】
URI字符串解析 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 导入…...
JavaScript---new Map()用法
new Map 创建 Map 对象设置键值对获取值检查键是否存在键值对数量删除键值对清空所有键值对迭代 Map 在JavaScript中,Map 是一个构造函数,用于创建 Map 对象,它可以存储键值对集合。与普通的对象不同,Map 的键可以是任何类型的值&…...
【数据基础】— 基于Go1.19的站点模板爬虫的实现
目录 1. 定义目标站点 2. 使用Go的库 3. 发送HTTP请求 4. 解析HTML并提取数据 5. 存储数据 6. 并发处理 示例代码 基于Go 1.19的站点模板爬虫实现通常涉及几个关键步骤:定义目标站点、解析HTML页面、提取所需数据、存储数据以及可能的并发处理。下面我将详细…...

Angular进阶之九: JS code coverage是如何运作的
环境准备 需要用到的包 node 18.16.0# Javascript 代码编辑"babel/core": "^7.24.7","babel/preset-env": "^7.24.7","babel-loader": "^9.1.3",# 打包时使用的 module, 给代码中注入新的方法# http…...
el-table 鼠标移入更改悬停背景颜色
鼠标悬停时需要更改当前行背景颜色,一开始写的颜色会改变,但是一闪而过就没了 这是因为移入移出的动画效果导致的 .el-table__body {.el-table__row:hover {background-color: pink !important;}} 更改为后面的代码,就可以了 .el-table__…...

【《无主之地3》风格角色渲染在Unity URP下的实现_角色渲染(第四篇) 】
文章目录 概要描边问题外秒变分叉解决办法1:测试效果如下:外秒变分叉解决办法2:URP管线下PBR渲染源码关键词解释:完整shader代码如下:URP管线下二次元皮肤渲染源码URP管线下二次元头发渲染源码简要介绍文章的目的、主要内容和读者将获得的知识。 概要 提示:《无主之地3》…...

【linux服务器篇】-Redis-RDM远程连接redis
redis desktop manager 使用远程连接工具RDM连接redis 市面上比较常见的其中一款工具redis desktop manager 简单的说: Redis Desktop Manager 简单的来讲就是Redis可视化工具,可以让我们看到Redis中存储的内容。 redis desktop manager是一款功能强…...

【pytorch15】链式法则
x到u再到y,可以理解为x是输入,中间层hidden layer 是u,最后y是pred 对于一个简单的线性层可以展开得到y的表达式,但是对于实际的神经网络还要加上激活函数,此时展开就非常的复杂,不能够一次到位,…...
C#用链表和数组分别实现堆栈
1.链表 实现栈的四个基本功能 入栈 出栈 长度 栈顶值 public class 基础 : MonoBehaviour {public class MyStack{//定义每一个元素的数据结构 //下一个元素 和 该元素的值public class StackData{public StackData next;public object data;public StackData(StackData next,…...
【AI原理解析】—强化学习(RL)原理
目录 一、基本原理 二、基本框架与要素 三、学习过程 四、关键概念 五、算法实现 六、应用领域 七、总结 强化学习(Reinforcement Learning, RL) 一、基本原理 强化学习的基本原理是基于“试错学习”(trial-and-error learning&…...
java解析请求的字符串参数Content-Disposition: form-data;和拼接的键值对
项目场景: 获取到http请求的参数,已经被字符串接收了,需求是需要从字符串中解析出来。 一种情况是:Content-Disposition: form-data; name"userCode" 另一种是:key1value1&key2value2&key3value3…...

活动回顾|2024 MongoDB Developer Day圆满收官!
上周六,MongoDB专家与团队在深圳 与90位开发者度过了充实一日 至此,2024 MongoDB Developer Day 北上深三站之行全部圆满结束! 一文回顾本次活动全程与精彩影像! MongoDB Developer Day 专为开发者定制的技术盛宴 全天沉浸动手实…...

MySQL资源组的使用方法
MySQL支持创建和管理资源组,并允许将服务器内运行的线程分配给特定的组,以便线程根据组可用的资源执行。组属性允许控制其资源,以启用或限制组中线程的资源消耗。DBA可以针对不同的工作负载适当地修改这些属性。 目前,CPU时间是一…...

python--实验7 函数(1)
知识点 函数的定义与调用 函数分类:内置函数和自定义函数。函数定义:使用def关键字定义函数,包括函数名、参数列表和函数体。注意: (1)即使该函数不需要接收任何参数,也必须保留一对空的圆括号…...

【力扣】数组中的第K个最大元素
一、题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…...

WTM的项目中EFCore如何适配人大金仓数据库
一、WTM是什么 WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代码风格不统一的问题。2017年9月,将代码移植到了.Net Core上&…...

互联网3.0时代的变革者:华贝甄选大模型创新之道
在当今竞争激烈的商业世界中,华贝甄选犹如一颗璀璨的明星,闪耀着独特的光芒。 华贝甄选始终将技术创新与研发视为发展的核心驱动力。拥有先进的研发团队和一流设施,积极探索人工智能、大数据、区块链等前沿技术,为用户提供高性能…...

Tomcat的安全配置
1、生产环境优化 2、部分漏洞修复 转载自风险评估:Tomcat的安全配置,Tomcat安全基线检查加固-CSDN博客...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...