前沿重器[38] | 微软新文query2doc:用大模型做query检索拓展

前沿重器

栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经是20年的事了!)

2023年文章合集发布了!在这里:又添十万字-CS的陋室2023年文章合集来袭

往期回顾

  • 前沿重器[33] | 试了试简单的prompt

  • 前沿重器[34] | Prompt设计——LLMs落地的版本答案

  • 前沿重器[35] | 提示工程和提示构造技巧

  • 前沿重器[36] | ACL23-基于检索的大语言模型-报告阅读

  • 前沿重器[37] | 大模型对任务型对话的作用研究

目前比较主流的检索方案主要是字面检索(sparse,稀疏)和向量检索(dense,稠密),然而检索哪怕是到了现在也一直有一个很大的困境,就是query对文档文段的召回,一直是存在困难的,因为两者无论是信息还是语义,其实都有很大的鸿沟,一般地,大家常用的方式有诸如“将qa匹配转化为qq匹配”、query改写、同义词、通过用户反馈构造匹配模型等手段,今天给大家介绍的一个方案,是通过大模型的手段来进行改写。

论文:Query2doc: Query Expansion with Large Language Models

整篇论文其实没讲什么很高端的手段,而且本身也不需要什么很特别的工作,然而这个工作所带来的提升还不小,可操作性和实用性可以说是拉满了,有兴趣的可以直接看看论文,难度非常小。

拓展方法

文章的思想非常简单,就是在开始检索之前,先用query让模型生成一次答案,然后把query和答案合并送给模型。

举个例子,例如用户输入的是“儿童防沉迷”,原来是直接把“儿童防沉迷”直接用于检索,输入检索库中进行召回,然而现在,我们会结合prompt,先输入给大模型,并得到大模型的结果:

输入:
什么是儿童防沉迷。
要求,用大约100字回复。
------------------
输出:(结果来自chatglm2-int8)
儿童防沉迷是指避免儿童沉迷于网络、游戏、电子书等电子娱乐活动,保护儿童身心健康和防止未成年人受到网络游戏沉迷、网络信息诈骗等问题的影响。为了实现这一目标,家长和社会应该共同努力,对儿童进行网络安全教育,限制儿童使用电子产品的时间和内容,并营造良好的家庭氛围,鼓励儿童积极参与有益身心的活动,如运动、阅读、艺术等。

可以看到,相比原始query儿童防沉迷,还拓展了大量的相关信息,例如游戏、网络、未成年人等,这些词汇很直观地,能扩展更多概念解释,对提升召回肯定是有好处的。

改写是改写玩了,但是要放进去检索,更好地进行召回,还是有些技巧的,按照论文,对字面检索和向量检索,都有一些特定的设计。

首先是字面检索,因为模型的生成多半会很长,所以在相似度计算的过程中,会稀释,所以在拼接过程中,需要对原始query复制几份再来拼接,用公式来描述,就是这样,其中d‘是大模型生成的内容,n是复制的次数:

然后是向量检索,因为向量召回的泛化能力是比较强的,因此不需要复制,直接拼接起来就好了:

然而相比字面检索,最大的困难并不在拼接,而在于训练,因为输入和文档仍旧不是一个分布(两者语义并不相同甚至完全不相同,只是匹配),所以仍旧离不开训练,不过为了体现拓展的部分的效果,此处还是使用比较朴素的训练方案,即根据用户点击之类的行为构造数据集,并使用BM25等的方式获得难负例。

实验结果和分析

从实验结果看,收益无疑是巨大的,此处就不赘述了,这里作者的分析其实更加有收获,我直接把重要的结论和解释总结一下:

  • 模型大小的提升对最终的召回效果是有收益的,随着模型变大,生成的文本对预测效果有提升。

  • 该方案本身对向量表征模型的训练,也是有明显收益的。

  • 对字面检索而言,原始query和大模型生成的回复之间,是互补关系,两者组合才能真正达到提升。

然后是作者用两个案例做了分析,来探索本方案生效的机理和可能的缺陷。

  • 首先,大模型直接生成一个答案,很大程度拉近了检索词和文档之间在语义空间上的相似,因为本质上两者都是回复问题。

  • 其次,大模型的生成可能并不正确(幻觉问题),尤其是关键部位(例如时间、关键名词之类的),这个关键部位的错误可能会导致最终的检索错误。

总之是有优势也有劣势吧,在实际应用中,还是要多做实验和分析,看看问题最终来决定。

个人思考

本文的思路其实挺简单的,但是背后做的实验和分析很有价值,在现实应用中也很有意义,所以单独把这篇文章进行了分享。然而在现实中,仍旧有很多细节问题还需要进一步考虑,我还没完全想好,不过应该是逃不开的:

  • 现实场景下的召回相似度应该如何计算,尤其是向量相似度,这里需要很多的数据支撑。

  • 召回后的下一步,仍旧依赖相对完善的精排模块,也需要考虑类似的匹配机制,否则即使召回层有了召回,排序层面也会被排到后面去。

  • 大模型本身的幻觉问题,会对召回带来很大的影响,该问题对召回还是有影响的,需要考虑如何尽可能剔除或者缓解。

  • 性能问题,依赖大模型是能够有所提升,但是多一次的大模型的请求,无疑让整体耗时有了很大的影响。(这点在论文中也有提及)

7105527b49ad1ad8acd0653e7a9f4129.png

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

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

相关文章

机器学习的复习笔记2-回归

一、什么是回归 机器学习中的回归是一种预测性分析任务,旨在找出因变量(目标变量)和自变量(预测变量)之间的关系。与分类问题不同,回归问题关注的是预测连续型或数值型数据,如温度、年龄、薪水…

Java核心知识点整理大全17-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

SpringMVC 实现文件的上传和下载

文章目录 1、文件下载2、文件上传3. 好书推荐 SpringMVC 是一个基于 Java 的 Web 框架,它提供了方便的文件上传和下载功能。下面是它的实现原理简要描述: 文件上传: 客户端通过表单(HTML 的 标签)将文件选择并提交到…

【云平台】STM32微信小程序阿里云平台汇总——持续更新

【云平台】STM32微信小程序阿里云平台汇总——持续更新 文章目录 前言总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 【云平台】STM32微信小程序阿里云平台学习板 【云平台】小白从零开始:小程序阿里云平台控制STM32&#xff08…

Zookeeper分布式锁实现Curator十一问

前面我们通过Redis分布式锁实现Redisson 15问文章剖析了Redisson的源码,理清了Redisson是如何实现的分布式锁和一些其它的特性。这篇文章就来接着剖析Zookeeper分布式锁的实现框架Curator的源码,看看Curator是如何实现Zookeeper分布式锁的,以…

matlab 计算点云的最值

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 matlab有自带的函数可以直接获取点云的最值,具体实现看代码即可。 二、代码实现 clc; clear; close all…

探索计算机视觉:深度学习与图像识别的融合

探索计算机视觉:深度学习与图像识别的融合 摘 要: 本文将探讨计算机视觉领域中的深度学习技术,并重点关注图像识别方面的应用。我们将介绍卷积神经网络(CNN)的原理、常用的图像数据集以及图像识别的实际应用场景&…

数组与链表

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 除了HashMap&#xff0…

有关循环依赖和三级缓存的这些问题,你都会么?(面试常问)

一、什么是循环依赖 大家平时在写业务的时候应该写过这样的代码。 其实这种类型就是循环依赖,就是AService 和BService两个类相互引用。 二、三级缓存可以解决的循环依赖场景 如上面所说,大家平时在写这种代码的时候,项目其实是可以起来的&am…

ros2智能小车中STM32地盘需要用到PWM的模块

我做的地盘比较简单,使用了一下模块: 4个直流减速电机,(每个模块用到了一个PWM)---这会通过L298N的ENA,ENB来实现控制 光电对射测速模块(不用PWM) 超声波测距模块(不用PWM,只需要…

Co-DETR:DETRs与协同混合分配训练论文学习笔记

论文地址:https://arxiv.org/pdf/2211.12860.pdf 代码地址: GitHub - Sense-X/Co-DETR: [ICCV 2023] DETRs with Collaborative Hybrid Assignments Training 摘要 作者提出了一种新的协同混合任务训练方案,即Co-DETR,以从多种标…

opencv-利用DeepLabV3+模型进行图像分割去除输入图像的背景

分离图像中的人物和背景通常需要一些先进的图像分割技术。GrabCut是一种常见的方法,但是对于更复杂的场景,可能需要使用深度学习模型。以下是使用深度学习模型(如人像分割模型)的示例代码: #导入相关的库 import cv2 …