【RAG提升技巧】查询改写HyDE

简介

提高 RAG 推理能力的一个好方法是添加查询理解层 ——在实际查询向量存储之前添加查询转换。以下是四种不同的查询转换:

  • 路由:保留初始查询,同时查明其所属的适当工具子集。然后,将这些工具指定为合适的选项。
  • 查询重写:维护选定的工具,但以多种方式重新编写查询,以将其应用于同一组工具。
  • 子问题:将查询分解为几个较小的问题,每个问题针对由其元数据确定的不同工具。
  • ReAct Agent 工具选择:根据原始查询,确定要使用的工具并制定要在该工具上运行的特定查询。

HyDE来自于Precise Zero-Shot Dense Retrieval without Relevance Labels,这篇文章主要做zero-shot场景下的稠密检索,通过借助LLM的力量不需要Relevance Labels,开箱即用。作者提出Hypothetical Document Embeddings (HyDE)方法,即“假设”文档嵌入。具体的做法是通过GPT生成虚构的文档,并使用无监督检索器对其进行编码,并在其嵌入空间中进行搜索,从而不需要任何人工标注数据

模型结构如下图所示,HyDE将密集检索分解为两个任务,即 instruction-following的LM生成任务和对比编码器执行的文档相似性任务。

paper:https://arxiv.org/pdf/2212.10496
code:https://github.com/texttron/hyde

原理以及实现

典型的密集信息检索过程包括以下步骤:

  • 将查询和文档转换为嵌入(向量)
  • 计算查询和文档之间的余弦相似度
  • 返回余弦相似度最高的文档

    通过 HyDE,query embedding我做了一些改进。首先让 LLM 生成回答查询的文档,然后将生成的虚拟答案转换为嵌入,而不是直接将查询转换为嵌入。


我们在LangChain上实际使用一下。

from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import LLMChain, HypotheticalDocumentEmbedder
from langchain.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAI
from dotenv import load_dotenv
# set the environment variables
load_dotenv()# prepare the prompt template for document generation
Prompt_template = """回答问题。
问题:{question}
回答:”””
llm = ChatOpenAI()
# multi_llm = ChatOpenAI(n=4)
prompt = PromptTemplate(input_variables=["question"], template=prompt_template)
llm_chain = LLMChain(llm=llm, prompt=prompt, verbose=True)# initialize the hypothetical document embedder
base_embeddings = OpenAIEmbeddings()
embeddings = HypotheticalDocumentEmbedder(llm_chain=llm_chain, base_embeddings=base_embeddings)result = embeddings.embed_query("塞尔达传说的主角是谁?")
len(result)

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

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

相关文章

随身WIFI修改MAC(bssid)并接收短信

将SIM卡插入随身WiFi卡槽 将随身WIFI插入电脑 打开 http://ufi.icewifi.com ,输入设备IMEI (或直接扫描设备包装盒上的二维码) 点击“确认” 登录到设备主页(网址可收藏保存) 点击“WIFI配置”按钮,输入想…

C#——枚举类型详情

枚举类型 枚举类型(也可以称为“枚举器”)由一组具有独立标识符(名称)的整数类型常量构成,在 C# 中枚举类型不仅可以在类或结构体的内部声明,也可以在类或结构体的外部声明,默认情况下枚举类型…

【Python报错】已解决AttributeError: Nonetype Object Has NoAttribute Group

解决Python报错:AttributeError: ‘list’ object has no attribute ‘get’ 在Python中,AttributeError通常表示你试图访问的对象没有你请求的属性或方法。如果你遇到了AttributeError: list object has no attribute get的错误,这通常意味着…

【NoSQL数据库】Redis——哨兵模式

Redis——哨兵模式 Redis哨兵 Redis——哨兵模式1.什么是哨兵机制(Redis Sentinel)1.1 哨兵的作用 2.哨兵的运行机制3.故障处理redis常见问题汇总1、redis缓存击穿是什么?如何解决?2、redis缓存穿透是什么?如何解决&am…

如何查询公网IP?

在互联网中,每个设备都有一个唯一的公网IP地址,用于标识设备在全球范围内的位置。查询公网IP是一个常见的需求,无论是用于远程访问、网络配置还是其他目的,了解自己的公网IP地址都是很有必要的。本文将介绍几种常见的方法来查询公…

HQChart使用教程100-自定义Y轴分段背景色

HQChart使用教程100-自定义Y轴分段背景色 效果图步骤1. 注册Y轴自定义刻度创建事件2. 配置Y轴背景色eventdataobj示例 交流QQ群HQChart代码地址 效果图 步骤 1. 注册Y轴自定义刻度创建事件 事件IDSCHART_EVENT_ID.ON_CREATE_CUSTOM_Y_COORDINATE, 如何注册事件详见教程 HQCh…

代码审计(1):CVE-2022-4957分析及复现

0x00漏洞描述: ѕрееdtеѕt iѕ а vеrу liɡhtԝеiɡht nеtԝоrk ѕрееd tеѕtinɡ tооl imрlеmеntеd in Jаvаѕсriрt. Thеrе iѕ а Crоѕѕ-ѕitе Sсriрtinɡ vulnеrаbilitу in librеѕроndеd ѕрееdtеѕt…

[word] word2019中制表符的妙用 #媒体#笔记#知识分享

word2019中制表符的妙用 word2019表格功能是非常强大的,很多朋友都认为以前的制表符已经没有什么用途了,其实不然,在一切特殊的场合,word2019制表符还是非常有用的,下面就为大家介绍word2019中制表符的妙用。 步骤1、…

每日复盘-20240606

今日关注: 这几天市场环境不好,一直空仓。 排名标准: ------沪深A股 排名--------代码--------- 名称 六日涨幅最大: ------1--------301176--------- 逸豪新材 五日涨幅最大: ------1--------301176--------- 逸豪新材 四日涨幅最大: ------1--------…

信息系统项目管理师0146:输入(9项目范围管理—9.3规划范围管理—9.3.1输入)

点击查看专栏目录 文章目录 9.3 规划范围管理9.3.1 输入9.3 规划范围管理 规划范围管理是为了记录如何定义、确认和控制项目范围及产品范围,而创建范围管理计划的过程。本过程的主要作用是在整个项目期间对如何管理范围提供指南和方向。本过程仅开展一次或仅在项目的预定义点开…

Quartz持久化

1、为什么需要ouartz持久化 Quartz持久化即将定时任务保存在介质中,持久化目的是保证任务在发生异常后也不会丢失Quartz默认将定时任务存在内存(RAM]obstore),优点是数据读取速度块,缺点是一旦异常发生,任务 数据就没有了Quartz还…

Objective-C之通过协议提供匿名对象

概述 通过协议提供匿名对象的设计模式,遵循了面向对象设计的多项重要原则: 接口隔离原则:通过定义细粒度的协议来避免实现庞大的接口。依赖倒置原则:高层模块依赖于抽象协议,而不是具体实现。里氏替换原则&#xff1…

台式机安装Windows 11和Ubuntu 22双系统引导问题

一、基本情况 1.1、硬件情况 电脑有2个NVMe固态硬盘,1个SATA固态硬盘,1个机械硬盘。其中一个NVMe固态硬盘是Windows系统盘,另一个NVMe固态为Windows软件和文件盘,SATA固态硬盘为Ubuntu专用,机械硬盘为数据备份盘。 …

Bandizip 专业版正版激活码 - 超好用文件解压缩工具

要说新电脑必装的软件,一定少不了解压缩工具。面对各式各样的压缩包,总要有一个速度快、稳定安全、功能多、支持格式广的工具才行。 好多用户推荐,用过都说好的 Win 端解压缩工具:Bandizip 值得你一试! 无论是解压速度…

Redis Key过期监听配置

默认情况下在Windows系统中双击redis-server.exe用的是内置的配置文件 如果希望用这两个配置文件 redis.windows.conf:这是用于在Windows上运行Redis服务器的标准配置文件。可以使用这个文件通过命令行启动Redis服务器。redis.windows-service.conf:这是…

ESD防护SP3232E真+3.0V至+5.5V RS-232收发器

特征 采用3.0V至5.5V电源,符合真正的EIA/TIA-232-F标准 满载时最低 120Kbps 数据速率 1μA 低功耗关断,接收器处于活动状态 (SP3222E) 可与低至 2.7V 电源的 RS-232 互操作 增强的ESD规格: 15kV人体模型 15kV IEC1000…

java:一个简单的WebFlux的例子

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>org.spr…

零基础打靶—Glasgow Smile靶场

一、打靶的主要五大步骤 1.确定目标&#xff1a;在所有的靶场中&#xff0c;确定目标就是使用nmap进行ip扫描&#xff0c;确定ip即为目标&#xff0c;其他实战中确定目标的方式包括nmap进行扫描&#xff0c;但不局限于这个nmap。 2.常见的信息收集&#xff1a;比如平常挖洞使用…

1.音视频开篇

目录 音视频播放的原理 音视频数据格式YUV YUV数据存储比 ​编辑 YUV空间格式 RGB与YUV转换 音视频播放的原理 主要分为&#xff1a;解协议->解封装->解码->音视频同步->播放。当然&#xff0c;如果是本地播放&#xff0c;没有解协议这一步骤。 采集数据其实…

【大事件】docker可能无法使用了

今天本想继续学习docker的命令&#xff0c;突然发现官方网站的文档页面打不开了。 难道是被墙了&#xff1f; 我用同事的翻了一下&#xff0c;能进&#xff0c;果然&#xff01; 正好手头的工作告一段落&#xff0c;将代码上传&#xff0c;然后通过jenkins将服务器自动部署到…