大模型外挂知识库优化——如何利用大模型辅助召回

大模型外挂知识库优化——如何利用大模型辅助召回?

一、为什么需要使用大模型辅助召回?

我们可以通过向量召回的方式从文档库里召回和用户问题相关的文档片段,同时输入到LLM中,增强模型回答质量。

常用的方式直接用用户的问题进行文档召回。但是很多时候,用户的问题是十分口语化的,描述的也比较模糊,这样会影响向量召回的质量,进而影响模型回答效果

策略一: HYDE

  • 论文:《Precise Zero-Shot Dense Retrieval without Relevance Labels》
  • 论文地址:https://arxiv.org/pdf/2212.10496.pdf

1. 介绍一下 HYDE 思路?

  1. 用LLM根据用户query生成k个"假答案"。(大模型生成答案采用sample模式,保证生成的k个答案不一样。此时的回答内容很可能是存在知识性错误,因为如果能回答正确,那就不需要召回补充额外知识了对吧。不过不要紧,我们知识想通过大模型去理解用户的问题,生成一些"看起来"还不错的假答案)

  2. 利用向量化模型,将生成的k的假答案和用户的query变成向量;

  3. 将k+1个向量取平均:其中dk为第k个生成的答案,q为用户问题,f为向量化操作。
    在这里插入图片描述

  4. 利用融合向量v从文档库中召回答案。融合向量中既有用户问题的信息,也有想要答案的模式信息,可以增强召回效果

2. 介绍一下 HYDE 问题?

该方法在结合微调过的向量化模型时,效果就没那么好了,非常依赖打辅助的LLM的能力。

原始的该模型并未在TREC DL19/20数据集上训练过。模型有上标FT指的是向量化模型在TREC DL相关的数据集上微调过的。黄框标出来的是未使用hyde技术的baseline结果。绿框标出来的是未微调的向量化模型使用hyde技术的实验结果。红框标出来的是微调过的向量化模型使用hyde技术的实验结果。实验指标为NDCG@10。可以发现,对于没有微调过的向量户化模型(zero shot 场景),hyde还是非常有用的,并且随着使用的LLM模型的增大,效果不断变好(因为LLM的回答质量提高了)。非常有意思的一点是是对于微调过的向量化模型,如果使用比较小的LLM生成假答案(小于52B参数量),hdye技术甚至会带来负面影响。
在这里插入图片描述

策略二: FLARE

  • 论文:《Active REtrieval Augmented Generation》
  • 论文地址:https://arxiv.org/abs/2305.06983

为什么 需要 FLARE ?

对于大模型外挂知识库,大家通常的做法是根据用户query一次召回文档片段,让模型生成答案。只进行一次文档召回在长文本生成的场景下效果往往不好,生成的文本过长,更有可能扩展出和query相关性较弱的内容,如果模型没有这部分知识,容易产生模型幻觉问题。一种解决思路是随着文本生成,多次从向量库中召回内容

FLARE 有哪些召回策略?

  1. 每生成固定的n个token就召回一次;
  2. 每生成一个完整的句子就召回一次;
  3. 用户query一步步分解为子问题,需要解答当前子问题时候,就召回一次

已有的多次召回方案比较被动,召回文档的目的是为了得到模型不知道的信息,a、b策略并不能保证不需要召回的时候不召回,需要召回的时候触发召回。c.方案需要设计特定的prompt工程,限制了其通用性。

作者在本文里提出了两种更主动的多次召回策略,让模型自己决定啥时候触发召回操作。

2.1 策略1

  1. 策略1 思路?

    通过设计prompt以及提供示例的方式,让模型知道当遇到需要查询知识的时候,提出问题,并按照格式输出,和toolformer的模式类似。

    1. 提出问题的格式为[Serch(“模型自动提出的问题”)](称其为主动召回标识)。利用模型生成的问题去召回答案。
    2. 召回出答案后,将答案放到用户query的前边,然后去掉主动召回标识之后,继续生成。
    3. 当下一次生成主动召回标识之后,将上一次召回出来的内容从prompt中去掉。
      下图展示了生成拜登相关答案时,触发多次召回的例子,分别面对拜登在哪上学和获得了什么学位的知识点上进行了主动召回标识的生成。
      在这里插入图片描述
  2. 策略1 缺陷?

    1. LLM不愿意生成主动召回标识。解决方法:对"[“对应的logit乘2,增加生成”[“的概率,”["为主动召回标识的第一个字,进而促进主动召回标识的生成。
    2. 过于频繁的主动召回可能会影响生成质量。解决方法:在刚生成一次主动召回标识、得到召回后的文档、去掉主动召回标识之后,接下来生成的几个token禁止生成"["。
    3. 不微调该方案不太可靠,很难通过few shot的方式让模型生成这种输出模式。

策略2

  1. 策略2 思路?

    策略1存在的第3点缺陷比较知名。因此作者提出了另外一个策略。该策略基于一个假设:模型生成的词对应该的概率能够表现生成内容的置信度。(传统的chatgpt接口是用不了策略2的,因为得不到生成每个词的概率。)

    1. 根据用户的query,进行第一次召回,让模型生成答案。
    2. 之后,每生成64个token,用NLTK工具包从64个token里边找到第一个完整句子,当作"假答案",扔掉多余的token。(和第一篇文章思想一样,利用LLM生成符合回答模式的"假答案")
    3. 如果"假答案"里有任意一个token对应的概率,低于某一阈值,那么就利用这个句子进行向量召回。触发召回的"假答案"很可能包含事实性错误,降低召回准确率。设计了两种方法解决这个问题。方法1:将"假答案"中生成概率低于某一阈值的token扔掉(低概率的token很有可能存在错误信息),然后再进行向量召回。方法2:利用大模型能力,对"假答案"中置信度低的内容进行提问,生成一个问题,用生成的问题进行向量召回。
    4. 利用召回出来的文本,重新生成新的"真答案",然后进行下一个句子的生成。
      依然针对拜登的问题,下图给出了例子。
      在这里插入图片描述

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

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

相关文章

three.js实现地球 外部扫描的着色器

three.js实现地球 外部扫描的着色器 https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idearthScan import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { GUI } from three/ex…

STM32 BootLoader 刷新项目 (十一) Flash写操作-命令0x57

STM32 BootLoader 刷新项目 (十一) Flash写操作-命令0x57 1. 引言 嵌入式系统中,BootLoader 是设备启动的第一部分代码,负责硬件初始化和主程序加载。在 STM32F407 中,BootLoader 的另一重要功能是支持应用程序的在线升级,这需要…

Spring IoC——针对实习面试

目录 Spring IoC谈谈你对Spring IoC的理解IoC和DI有区别吗?IoC(控制反转)DI(依赖注入)IoC与DI的区别 什么是Spring Bean?作用域有哪些?Bean是线程安全的吗?说一下Spring Bean的生命周…

【H2O2|全栈】MySQL的云端部署

目录 前言 开篇语 准备工作 MySQL移除 为什么需要移除? 移除操作 Yum仓库 yum简介 rpm安装 yum库安装 MySQL安装 使用yum安装 开机自启动 检查运行状态 MySQL配置 初始密码 ​编辑登录 修改root密码 退出MySQL 字符集配置 结束语 前言 开篇语…

数据结构-二叉平衡树

一.平衡二叉树 二叉搜索树插入的次序不同导致不同的深度和平均查找长度ASL 左右子树高度差不超过绝对值1的二叉搜索是二叉平衡树 二.平衡二叉树的调整 在右子树的右子树上的插入做RR插入 把被破坏节点的右子树变成跟节点并把这个右子树的左子树挂载到原来被破坏的结点的右子树…

【PCIE716-0】基于PCIe总线架构的XC7Z100 FPGA高性能实时信号处理平台

板卡概述 PCIE716-0是一款基于PCIe总线架构的XC7Z100 FPGA高性能实时信号处理平台。该平台采用Xilinx的ZYNQ SOC系列产品XC7Z100作为主处理器。 该平台的PL端具有1个FMC(HPC)接口,1路PCIe x8主机接口,支持1路UART串口、支持1组6…

从0开始的数据结构速过——番外(1)

目录 尝试 思考与架构设置 编写! 一些额外知识的补充 可变参数模板 std::common_type std::forward 这是《数据结构从0开始》的一个番外。实际上是介绍一下一些现代C的写法。这里以快速构建std::array作为契机来说明一下一些现代C的语法。 尝试 我们在这里呢…

Day10_CSS过度动画

Day10_CSS过度动画 背景 : PC和APP项目我们已经开发完毕, 但是再真正开发的时候有些有些简易的动态效果我们可以使用CSS完成 ; 本节课我们来使用CSS完成基础的动画效果 今日学习目标 CSS3过度CSS3平面动态效果CSS3动画效果案例 1. CSS3过渡 ​ 含义 :过渡指的是元素从一种…

如何制作代购系统的客服支持模块

在代购系统中,客服支持模块是维护用户满意度和忠诚度的关键环节。一个有效的客服支持模块不仅可以解决用户的疑问和问题,还可以收集用户反馈,用于改进服务和产品。本文将详细介绍如何制作一个代购系统的客服支持模块,包括前端界面…

【unity小技巧】一些unity3D灯光的使用与渲染及性能优化方案

文章目录 天空盒反射配置太阳耀斑眩光烘培光照烘培光照时弹出错误,记得勾选模型下面的选择阴影项目配置光源模型模型shader的问题 全局光照混合光照模式混合照明模式减性照明模式Shadowmask照明模式间接烘焙照明模式 环境光遮罩灯光探针反射探针技术关闭反射探针可以…

Spring Boot汽车资讯:科技与汽车的对话

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 汽车资讯网站的系统管理员可以管理用户,可以对用户信息修改删除审核以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 汽车品牌管理 系统管理员可以汽车品牌信息进行添加&#xf…

go 学习网站,go例子 go demo go学习视频

1. 代码例子: Go by Example 2. b站 视频: 尚硅谷视频: 004_尚硅谷_程序的基本概念_哔哩哔哩_bilibili 3. go技术文档: fmt Go语言中文文档

记录下,用油猴Tampermonkey监听所有请求,绕过seesion

油猴Tampermonkey监听所有请求,绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口,这个接口的页面入口被隐藏掉了,不能通过页面调用,幸好之前有想过逆向破解通过账号密码模拟登录后拿到token,请求该…

网络安全:我们的安全防线

在数字化时代,网络安全已成为国家安全、经济发展和社会稳定的重要组成部分。网络安全不仅仅是技术问题,更是一个涉及政治、经济、文化、社会等多个层面的综合性问题。从宏观到微观,网络安全的重要性不言而喻。 宏观层面:国家安全与…

多账号登录管理器(淘宝、京东、拼多多等)

目录 下载安装与运行 解决什么问题 功能说明 目前支持的平台 功能演示 登录后能保持多久 下载安装与运行 下载、安装与运行 语雀 解决什么问题 多个账号的快捷登录与切换 功能说明 支持多个电商平台支持多个账号的登录保持支持快捷切换支持导入导出支持批量删除支持…

浅谈网络 | 二层到三层

目录 物理层到MAC层第一层(物理层)第二层(数据链路层)局域网 交换机与VLAN生成树协议VLAN ICMP与pingICMP 协议的格式 网关静态路由是什么? 路由协议如何配置策略路由?动态路由算法动态路由协议 物理层到MA…

c++ 后端

基础知识 1. 指针、引用2. 数组3. 缺省参数4. 函数重载5. 内联函数6. 宏7. auto8. const9. 类和对象10. 类的6个默认成员函数11. 初始化列表12. this指针13. C/C的区别14. C 三大特性15. 结构体内存对齐规则16. explicit17. static18. 友元类、友元函数19. 内部类20. 内存管理&…

汽车资讯新趋势:Spring Boot技术解读

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 汽车资讯网站的系统管理员可以管理用户,可以对用户信息修改删除审核以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 汽车品牌管理 系统管理员可以汽车品牌信息进行添加&#xf…

【C++】vector

一、vector的介绍及使用 1.1 vector的介绍 vector的底层与string相似都是顺序表形式管理数组,本质上来说string就可以归入到vector里面,但是在实际使用中,字符有很多自身独有的接口设计需要,因此string被单独拿出来设计。在前面s…

uniapp Uview上传图片组件Upload会自动刷新

背景 最近在做跑团小程序,马上接近尾声了,今天新增一个团长增加活动页面: 然后一切准备就绪,发现了一个问题,当选择上传图片后,页面会自动刷新,把之前填写的信息全部重置了。奇怪了&#xff0c…