假设性文档嵌入 HyDE:大模型 + 对比学习,从关键词相似度搜索到语义搜索

news2024/10/6 22:23:00

假设性文档嵌入 HyDE:大模型 + 对比学习,从关键词相似度搜索到语义搜索

    • 提出背景
    • 流程图
    • 解法拆解
      • 类比
        • 1. 单一文档嵌入空间的搜索
        • 2. 指令跟随型语言模型(InstructLM)的引入
        • 3. 生成文档的嵌入编码

 


提出背景

论文:https://arxiv.org/pdf/2212.10496

代码:https://github.com/texttron/hyde

HyDE 特别适合,当需要捕获广泛的语义内容并减少对关键词直接依赖时。

比如医学一个概念有很多术语,比如用户搜索感冒,数据库是风热流感,这俩的相似度很低,相似度匹配解决不了,只能语义匹配。

相似度搜索工作原理

  • 相似度搜索依赖于直接比较查询词与数据库中文档的关键词的匹配度。
  • 使用如TF-IDF(词频-逆文档频率)或余弦相似度等算法来评估查询与每个文档的相似度。
  • 最终的输出是根据相似度分数排序的文档列表,分数最高的文档最相关。

应用场景

  • 医生输入查询:“膝关节炎治疗方法”。
  • 检索系统在医学文档数据库中查找包含“膝关节炎”和“治疗方法”这些关键词的文档。
  • 返回的结果直接反映了关键词的出现频率和文档中的分布情况。

HyDE工作原理

  • HyDE首先通过一个生成性语言模型根据输入的查询“膝关节炎治疗方法”生成一个内容丰富的、假设性的答案或文档,这个文档详细描述了可能的治疗方法,如药物治疗、物理治疗、手术选项等,即使这样的文档在实际数据库中并不存在。
  • 然后,这个生成的假设文档被转换成嵌入向量,使用对比编码器进行编码。
  • 系统使用这个向量与数据库中文档的向量进行相似度比较,寻找与假设文档内容相似的实际文档。

应用场景

  • 通过假设性文档生成和后续的向量比较,HyDE能够捕捉查询的深层意图和复杂内容,不仅限于关键词匹配。
  • 这使得即使医生的查询用词非常专业或非常通俗,系统也能理解并返回最相关的、专业的医疗建议和研究成果。

相似度搜索比作使用地图找到特定地址,而HyDE则像是先绘制一个详尽的旅行指南,然后再在地图上寻找与之最匹配的路径。

相似度搜索直接依赖于现有的、明确的标记和路径,而HyDE通过创造性地解释和拓展查询内容,提供更深层次的匹配和理解。

通过这种方式,HyDE不仅提高了检索的相关性和准确性,还能处理更复杂和多样化的查询,特别适用于需要高度解释性和语义理解的领域,如医疗、法律和科研文献检索。

流程图

在这里插入图片描述
这张图是对Hypothetical Document Embeddings (HyDE) 模型的说明。

这个模型通过以下步骤来处理和检索信息:

  1. 输入指令和查询:HyDE接收一个查询指令,例如“写一个段落来回答这个问题”。

    这个查询可以涵盖各种主题,如图中示例所示,包括“智齿拔除需要多长时间”,“COVID-19大流行如何影响心理健康?”,以及“인간은 언제 피를 사용했나요?”(人类何时开始使用血液?)。

  2. 生成文档:根据查询指令,一个基于GPT的语言模型生成一个假设的文档。

    这个文档不是真实的,但它旨在模拟相关文档的内容。

    例如,对于智齿拔除的查询,生成的文档可能会说“通常需要30分钟到两小时来拔除智齿”。

  3. 文档编码与检索:生成的文档被送入一个对比学习的编码器(如图中的Contriever),该编码器将文档转换成嵌入向量。

    然后,这个向量被用来在语料库中查找最相似的真实文档。

  4. 返回结果:模型根据生成的文档与真实文档之间的语义相似性返回查询结果。

    例如,关于智齿拔除的查询可能返回一些解释智齿拔除过程的真实文档。

这个模型的特点是它不直接计算查询与文档之间的相似度,而是通过生成文档和编码这两个步骤间接地处理查询,使得系统能够以零样本的方式工作,即不依赖于具体的相关性标签进行训练。

这使得HyDE模型能够适应多种语言和任务,即使在没有明确训练数据的情况下也能进行有效的文档检索。

解法拆解

目的:解决零样本密集检索的问题,这是因为在没有相关性判断或评分的情况下,传统的密集检索模型难以学习查询和文档的嵌入表示。

解法:HyDE模型设计

  1. 子解法1:单一文档嵌入空间的搜索

    • 特征:只需学习文档之间的相似性,无需处理查询的嵌入。
    • 原因:这通过使用无监督的对比学习来实现,可以简化学习过程,因为它不依赖于外部的相关性标签。

     
    例如,通过Izacard等人的研究(2021),已经证明无监督对比学习在没有明确监督的情况下有效地学习文档特征。

  2. 子解法2:指令跟随型语言模型(InstructLM)的引入

    • 特征:通过生成“假设文档”来间接捕获查询的相关性。

    • 原因:InstructLM能根据给定的指令生成内容,这种方法将查询相关性的建模负担从传统的表示学习转移到了更容易泛化的自然语言生成模型上。

       
      这使得模型即使在缺乏明确相关性数据的情况下也能有效工作。

    例如,如果指令是“写一个回答问题的段落”,InstructLM生成的文档虽然不是真实的,但能够反映出与查询相关的内容模式。

  3. 子解法3:生成文档的嵌入编码

    • 特征:通过文档编码器将生成的“假设文档”转化为嵌入向量,再进行相似性搜索。

    • 原因:使用文档编码器f作为损失压缩器,可以过滤掉生成文档中的冗余细节,只保留与查询相关的核心内容,从而实现高效的文档检索。

       
      这种方法利用了文档之间的相似性嵌入,进一步将假设向量与实际语料库中的真实文档对齐。

逻辑链:这些子解法形成一个线性逻辑链,每个步骤都是为了解决零样本密集检索中遇到的具体问题。

首先通过无监督学习建立文档嵌入,然后利用指令跟随模型生成与查询相关的假设文档,最后通过文档编码器压缩和过滤信息,执行有效的检索。

这个过程通过结合无监督学习和自然语言生成技术,创新性地解决了无法直接从标注数据学习的难题。

 

类比

想象一下你正在组装一套复杂的家具,但你没有明确的说明书,只有一些基本的工具和一些不标记的零件。

这就是传统密集检索系统在没有相关性标签时面临的挑战:它们需要准确地匹配查询和文档,但缺乏直接指导他们如何完成任务的明确指示。

HyDE模型的设计就像是给你一个能够生成使用说明的智能工具,同时也提供了检测哪些工具和零件最适合当前步骤的能力。

1. 单一文档嵌入空间的搜索

类比:这就像使用一个高级的金属探测器在沙滩上寻找金属物体。

探测器不需要知道每个物体具体是什么,只需要识别出哪些地方有金属物体。

在HyDE模型中,这个过程相当于用对比学习探测文档库中的文档,识别它们之间的相似性,而不是直接寻找与特定查询完全匹配的文档。

2. 指令跟随型语言模型(InstructLM)的引入

类比:想象你有一个能够根据你描述的需要自动生成建议方案的智能助手。

比如你说:“我需要一个可以放杂志的小桌子。”

即使你没有直接说明要用木头制作,智能助手也能生成一个包括材料和设计的建议方案。

在HyDE中,InstructLM正是这样一个智能助手,它能根据查询生成一个假设性的“方案”(即文档),捕捉查询的核心需求。

3. 生成文档的嵌入编码

类比:这就像把一份详细的设计图纸转换成一个更简洁的部件清单。

在建造时,你不需要再次查看复杂的图纸,只需根据这个清单挑选正确的材料和工具即可。

HyDE模型中的编码器就是这样一个工具,它将生成的文档转换为核心特征的集合(即向量),使得检索系统能够快速有效地找到与这些特征匹配的真实文档。

通过这种方式,HyDE模型有效地解决了传统密集检索在无标注数据情况下的局限,通过创新的方法优化了信息检索过程,使其更加智能和适应性强。

这种模型不仅适用于学术和科研领域,也可以广泛应用于医疗、法律、商业等信息密集型行业,提高检索的准确性和效率。

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

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

相关文章

2024亚太杯中文赛数学建模B题【洪水灾害的数据分析与预测】思路详解

2024 年第十四届 APMCM 亚太地区大学生数学建模竞赛 B题 洪水灾害的数据分析与预测 附件 train.csv 中提供了超过 100 万的洪水数据,其中包含洪水事件的 id、季风强度、地形排水、河流管理、森林砍伐、城市化、气候变化、大坝质量、淤积、农业实践、侵蚀、无效防灾、…

一文搞懂 java 线程池:ScheduledThreadPool 和 WorkStealingPool 原理

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

Google Gemini:大上下文窗口是杀手级功能吗?

在八个月前,一封泄露的谷歌电子邮件透露,谷歌正努力超越其人工智能竞争对手。谷歌不仅没有围绕其人工智能产品的护城河——换句话说,没有建立起商业优势——也没有可以改变现状的秘诀。就在他们努力解决这个问题的同时,他们也看到…

SpringSecurity中文文档(Servlet Password Storage)

存储机制(Storage Mechanisms) 每种支持的读取用户名和密码的机制都可以使用任何支持的存储机制: Simple Storage with In-Memory AuthenticationRelational Databases with JDBC AuthenticationCustom data stores with UserDetailsServic…

2024/07/04

1、梳理笔记(原创) 2、终端输入一个日期&#xff0c;判断是这一年的第几天 scanf("%d-%d-%d",&y,&m,&d); 闰年2月29天&#xff0c;平年2月28天 #include<stdio.h> int main(int argc, char const *argv[]) {int y0,m0,d0;printf("please ente…

KBL610-ASEMI无人机专用整流桥KBL610

编辑&#xff1a;ll KBL610-ASEMI无人机专用整流桥KBL610 型号&#xff1a;KBL610 品牌&#xff1a;ASEMI 封装&#xff1a;KBL-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;6A 功率(Pd)&#xff1a;中小功率 芯片个数&#xff1a…

【每天学会一个渗透测试工具】SQLmap安装教程及使用

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 ✨SQLmap简介 Sqlmap是一款开源的渗透测试工具 &#x1f680;下载及安装 下载地址&#xff1a;http://sqlmap.org/ windo…

黑马点评DAY4|整体项目介绍、短信登录模块

项目整体介绍 项目功能介绍 项目结构 该项目前后端分离架构模式&#xff0c;后端部署在Tomcat服务器&#xff0c;前端部署在Niginx服务器上&#xff0c;这也是现在企业开发的标准做法。PC端首先向Niginx发起请求&#xff0c;得到页面的静态资源&#xff0c;页面再通过ajax向服…

【UE5.3】笔记7 控制Pawn移动

使用A、D键控制角色左右移动 打开我们的BP_Player蓝图类&#xff0c;选择事件图表&#xff0c;添加我们的控制事件 右键&#xff0c;搜索A keyboard&#xff0c;选择A,如下图&#xff0c;D也是 添加扭矩力 首先我们要把我们的player上的模拟物理选项打开&#xff0c;这样我们…

Windows系统安装MySQL8.0.38

MySQL 8.0 相对于 MySQL 5.7 来说有几个显著的区别和改进&#xff0c;以下是一些主要的区别&#xff1a; JSON 数据类型和函数改进&#xff1a; MySQL 8.0 引入了更多的 JSON 支持&#xff0c;包括 JSON 数据类型、JSON 函数和操作符。这使得存储和查询 JSON 数据更加方便和高效…

sql语句练习注意点

1、时间可以进行排序&#xff0c;也可以用聚合函数对时间求最大值max&#xff08;时间&#xff09; 例如下面的例子&#xff1a;取最晚入职的人&#xff0c;那就是将入职时间倒序排序&#xff0c;然后limit 1 表&#xff1a; 场景&#xff1a;查找最晚入职员工的所有信息 se…

MySQL-作业1

一、数据库 1、登陆数据库 2、创建数据库zoo 3、修改数据库zoo字符集为gbk 4、选择当前数据库为zoo 5、查看创建数据库zoo信息 6、删除数据库zoo 二、创建表 1、创建一个名称为db_system的数据库 2、在该数据库下创建两张表&#xff0c;具体要求如下&#xff1a; 员工表 user …

贵的智能猫砂盆值得买吗?包含百元、千元的高性价比品牌推荐!

对于养猫的上班族来说&#xff0c;智能猫砂盆真的是越早买越好&#xff0c;普通猫砂盆用这么久下来能把我们这些上班的都累死&#xff0c;每次一回到家就能闻到猫屎的臭味&#xff0c;一看就收获猫砂盆里满满当当的猫屎&#xff0c;在外面要上班&#xff0c;在家里也要给猫上班…

C语言数据类型和变量(三)

目录 1.赋值操作符 1&#xff09;连续赋值 2&#xff09;复合赋值符 2.单目操作符&#xff1a;、- -、&#xff08;正号&#xff09;、- &#xff08;负号&#xff09; 1&#xff09;和-- 2&#xff09; 和 - 3.强制类型转换 4.printf&#xff08;&#xff09;函数 1…

用for语句实现九九乘法表

① #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {for (int i 1; i < 9; i){for (int j 1; j < i; j){printf("%d*%d%d\t", j, i, i * j);}printf("\n");}return 0; } ② #define _CRT_SECURE_NO_WARNINGS #include &…

美特CRM anotherValue FastJson反序列化RCE漏洞复现

0x01 产品简介 MetaCRM是一款智能平台化CRM软件,通过提升企业管理和协同办公,全面提高企业管理水平和运营效率,帮助企业实现卓越管理。美特软件开创性地在CRM领域中引入用户级产品平台MetaCRM V5/V6,多年来一直在持续地为客户创造价值,大幅提升了用户需求满足度与使用的满意…

前端学习(三)CSS介绍及选择符

##最近在忙期末考试&#xff0c;因此前端笔记的梳理并未及时更新。在学习语言过程中&#xff0c;笔记的梳理对于知识的加深very vital.因此坚持在明天学习新知识前将笔记梳理完整。 主要内容&#xff1a;CSS介绍及选择符 最后更新时间&#xff1a;2024/7/4 目录 内容&#x…

震惊!运气竟能如此放大!运气的惊人作用,你了解吗?

芒格&#xff1a;得到你想要的东西&#xff0c;最保险的办法&#xff0c;就是让自己配得上你想要的那个东西。今天仔细想了想这句话&#xff0c;他其实说的是无数成功人士的心声 —— “我配得上&#xff01;” 美剧《绝命毒师》有个导演叫文斯吉里根&#xff08;Vince Gilliga…

JAVA:文件防重设计指南

1、简述 在现代应用程序中&#xff0c;处理文件上传是一个常见的需求。为了保证文件存储的高效性和一致性&#xff0c;避免重复存储相同的文件是一个重要的优化点。本文将介绍一种基于哈希值的文件防重设计&#xff0c;并详细列出实现步骤。 2、设计原理 文件防重的基本思路…

「Java开发指南」如何用MyEclipse完成Spring Web Flow 2.0搭建?

本教程将引导您完成Spring Web Flow的软件组件生成&#xff0c;这是Spring的一个项目&#xff0c;用于简化Web应用程序的开发。虽然Spring Web Flow与Spring MVC兼容&#xff0c;但Spring Web Flow使用流而不是控制器来实现应用程序的Web层。在本教程中&#xff0c;您将学习如何…