Query Rewrite —— 基于大模型的query扩展改写,综合考虑上下文信息(人大论文)

在session上下文中,捕获用户的搜索意图,是一件较为复杂和困难的事情。

一起看一下人大的这篇论文 Large Language Models Know Your Contextual Search Intent: A Prompting Framework for Conversational Search

 

会话中的搜索意图和query改写

人大的论文中提出了一个简单而有效的提示框架,称为LLM4CS,以利用LLM作为搜索意图解释器来促进会话搜索。具体来说,我们首先提示LLM在多个视角下生成较短的查询重写和较长的假设响应,然后将这些生成的内容聚合成一个集成的表示,以稳健地表示用户的真实搜索意图。在我们的框架下,我们提出三种具体的提示方法和聚合方法,并进行广泛的评估三个广泛使用的会话搜索基准,包括CAsT-19(道尔顿等人,2020),CAsT-20(道尔顿等人,2021),和CAsT-21(道尔顿等人,2022)),全面调查llm对话搜索的有效性。

论文核心内容

论文中吗,主要解决的是从上下文的会话信息中,提取信息,已补充和改写最新的query。解决上下文的关联问题。

论文中提到了三种重写的方式,如下图所示。

  • 第一种REW是直接把历史的qa和当前query一起送给模型,然后让模型给出重写后的query。
  • 第二种RTR是把历史的qa和当前query一起送给模型,然后让模型给出重写后的query。并给出一个回答。把回答的内容和和重写后的query一起构造成新的query。这里论文中虽然没有提到,但是在谷歌和微软的相关论文中,由于生成的答案通常比重写后的query要长,索引要把重写后的query重复拼接5次,然后再拼接上回答的内容,最后构成最终的query。
  • 第三种RAR是把历史的qa和当前query一起送给模型,然后让模型给出重写后的query。并给出一个回答。这里可以生成多个问题和多个回答。也就是可以把复杂的问题进行拆解。

 

额外地生成假设的响应和正确地聚合多个生成的结果对于提高搜索性能是至关重要的!

 

论文中提及的query重写方法如何使用?

最简单的方法是,将会话中的每一个qa对都当做内容,和当前的query一起送给LLM。并给LLM一个提示,让LLM根据这些内容去重写query。

Prompt指令如下,让LLM知道是从上下文中,获取信息。

For an information-seeking dialog, please help reformulate the question into rewrite that 
can fully express the user‘s information needs without the need of context, but also 
generate an informative response to answer the question.

给LLM几个重写的示例
示例中包含了query,和重写的原因,以及重写后的query,最后是LLM针对query的一个简短的回答。

I will give you several example multi-turn dialogs, where each turn contains a question, a
response, and a rewrite. The rewrite part begins with a sentence explaining the reason for 
the rewrite.
Example #1:
Question: What should I consider when buying a phone?
Rewrite: This is the first turn. So the question should be rewritten as: What should I 
consider when buying a phone?
Response: The design of the phone and the overall …
Question: Cool. Which one would you recommend?
Rewrite: Based on Turn 1, you are inquiring about what should be considered when 
buying a phone. So the question should be rewritten as: Cool. Which smartphone would 
you recommend for me?
Response: Just because a phone has everything…
…
Example #2:

 输入如下:

Your Task (only questions and responses are given):
Context:
Question: What was the basis of the Watergate scandal?
Response: ...
Question: …
Response: …
…
Current Question: So what happened to Nixon?
Rewrite: So what happened to Nixon after the events of the Watergate scandal?
(Now, you should give me the rewrite and an informative response of the **Current 
Question** based on the **Context**. The output format should always be: Rewrite: 
$Reason. So the question should be rewritten as: $Rewrite\nResponse: $Response. Go 
ahead!)

模型输入如下

Rewrite: Based on all previous turns, Nixon was badly involved in the Watergate scandal. 
So the question should be rewritten as: So what happened to Nixon after the events of the 
Watergate scandal?
Response: With the mounting evidence and loss…

会话数据

C t = (q 1 , r 1 , ..., q t 1 , r t 1
一般回话都是由N个 query和响应构成的。根据模型的可输入长度的限制,则可以根据滑动窗口的方式,选取最邻近的一些query响应对。

思维链

思维链(CoT)(Wei et al.,2020)诱导大型语言模型将一个推理任务分解为多个中间步骤,从而释放它们更强的推理能力。在这项工作中,我们还研究了整合推理用户真实搜索意图的思维链是否可以提高重写和响应生成的质量。

意图聚合

将LLM多次的生成的Rewrite query 和 假设性回答进行聚合
在一个会话中,可能包含了多次问答。每次都有一个Rewrite query 和 假设性回答。我们可以称做qa对。
第一种意图聚合方式: MaxProb
对于  REW ,没有假设性回答。所以可以直接用生成的Rewrite query。对于 RTR和RAR,则使用(q的向量 + 假设性回答的向量)/2
 
第二种意图聚合方式: Self-Consistency (SC)
对于  REW ,没有假设性回答。先算所有生成的Rewrite query 的平均值(叫做中心向量)。然后再算每一个Rewrite query和中心向量的点积。
第三种意图聚合方式:使用平均值 Mean
对于  REW ,没有假设性回答。所以可以直接用生成的Rewrite query。注意这里是多轮的query的平均值。最后用平均值,作为搜索意图,去进行搜索。

效果如何

首先,RAR和RTR提示方法的性能明显优于REW提示,这表明生成的假设响应可以有效地补充较短的查询重写,从而提高检索性能。然而,即使是与现有基线相比,即使是简单的REW提示也可以实现相当有竞争力的性能,特别是在更具挑战性的CAsT-20和CAsT-21数据集上,它显示了显著的优势(例如,CAsT-20上0.380vs.0.350,CAsT-21上0.465vs.0.385)。这些积极的结果进一步突出了利用LLM进行对话搜索的显著优势。

其次,在聚合方法方面,Mean和SC始终优于MaxProb。这些结果表明,仅仅依赖于语言模型的顶级预测可能不能提供足够的可靠性。相反,利用多个结果的集体强度被证明是一个更好的选择。此外,我们观察到,平均聚合方法,它将所有生成的内容融合到最终的搜索意图向量中(公式11),并不始终优于SC(例如,在CAsT-20上),它实际上只融合了一个重写和一个响应。

 

再看一下思维链CoT对结果的影响

可以明显看到,不管是在哪种意图聚合方式下,启用思维链,几乎总是有正向的效果。

 

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

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

相关文章

测试环境搭建整套大数据系统(三:搭建集群zookeeper,hdfs,mapreduce,yarn,hive)

一:搭建zk https://blog.csdn.net/weixin_43446246/article/details/123327143 二:搭建hadoop,yarn,mapreduce。 1. 安装hadoop。 sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt2. 修改java配置路径。 cd /opt/hadoop-3.2.4/etc…

微服务OAuth 2.1认证授权Demo方案(Spring Security 6)

文章目录 一、介绍二、auth微服务代码1. SecurityConfig2. UserDetailsService3. 总结 三、gateway微服务代码1. 统一处理CORS问题 四、content微服务代码1. controller2. SecurityConfig3. 解析JWT Utils4. 总结 五、一些坑 书接上文 微服务OAuth 2.1认证授权可行性方案(Sprin…

端口号被占用怎么解决

1、快捷键"winR"打开运行,在其中输入"cmd"命令,回车键打开命令提示符。 2、进入窗口后,输入"netstat -ano"命令,可以用来查看所有窗口被占用的情况。 比如端口号为7680的端口被占用了&#xff0c…

【开工大吉】推荐4款开源、美观的WPF UI组件库

WPF介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有丰富用户界面的 Windows 应用。它提供了灵活的布局、数据绑定、样式和模板、动画效果等功能,让开发者可以创建出吸引人且交互性强的应用程序。 HandyControl HandyControl是一套WPF控件库&#xf…

socket通信 smallchat简介

文章目录 前言一、socket的基本操作(1) socket()函数(2) bind()函数(3) listen()、connect()函数(4) accept()函数(5) read()、write()等函数(6) close()函数 二、smallchat代码流程smallchat-server.csmallchat-client.cchatlib.c 参考资料 前言 本文介绍了socket通信的相关A…

VNCTF2024misc方向部分wp

文章目录 sqlsharkLearnOpenGLez_msbOnlyLocalSql sqlshark tshark -r sqlshark.pcap -Y "http" -T fields -e frame.len -e http.file_data > data.txt不太像常规的盲注,一次性发送两条很类似的payload,比常规的多了一个least在判断passw…

并发编程-JUC-原子类

JUC 整体概览 原子类 基本类型-使用原子的方式更新基本类型 AtomicInteger:整形原子类AtomicLong:长整型原子类AtomicBoolean :布尔型原子类 引用类型 AtomicReference:引用类型原子类AtomicStampedReference:原子更新…

协调尺度:特征缩放在机器学习中的重要作用

目录 一、介绍 二、背景知识 三、了解功能缩放 四、特征缩放方法 五、特征缩放的重要性 六、实际意义 七、代码 八、结论 一、介绍 特征缩放是机器学习和数据分析预处理阶段的关键步骤,在优化各种算法的性能和效率方面起着至关重要的作用。本文深入探讨了特征缩放的…

LeetCode JS专栏刷题笔记(一)

一、前言 LeetCode 在前不久出了一个 JavaScript 专栏,这个专栏一个目的是为了非前端工程师学习 JS,另一个是为了前端工程师提升 JS 能力。 因此在这个专栏中,基本不涉及什么具体算法问题,都是一些 JS 的入门语法与常见的 JS 面…

【c++ debug】记一次protobuf结构相关的coredump问题

文章目录 1. 问题现象2. 问题描述3. 问题分析4. 问题根因5. 问题修复6. 补充:类成员变量定义为引用类型 1. 问题现象 其中curr_lanes是一个目标上一帧的当前车道current_lanes_curr_lane是lane_id对应的LaneInfo信息现象:在lane_info->lane().success…

【Java面试】MongoDB

目录 1、mongodb是什么?2、mongodb特点什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?NoSQL数据库有哪些类型?启用备份故障恢复需要多久什么是master或primary什么是secondary或slave系列文章版…

多模态基础---BERT

1. BERT简介 BERT用于将一个输入的句子转换为word_embedding,本质上是多个Transformer的Encoder堆叠在一起。 其中单个Transformer Encoder结构如下: BERT-Base采用了12个Transformer Encoder。 BERT-large采用了24个Transformer Encoder。 2. BERT的…

VPX信号处理卡设计原理图:9-基于DSP TMS320C6678+FPGA XC7V690T的6U VPX信号处理卡 信号处理 无线电通信

一、概述 本板卡基于标准6U VPX 架构,为通用高性能信号处理平台,系我公司自主研发。板卡采用一片TI DSP TMS320C6678和一片Xilinx公司Virtex 7系列的FPGA XC7V690T-2FFG1761I作为主处理器,Xilinx 的Aritex XC7A200T作为辅助处理器。XC7A2…

JVS智能BI的ETL数据集实践:数据自动化分析的秘诀

数据集是JVS-智能BI中承载数据、使用数据、管理数据的基础,同样也是构建数据分析的基础。可以通俗地将其理解为数据库中的普通的表,它来源于智能的ETL数据加工工具,可以将数据集进行分析图表、统计报表、数字大屏、数据服务等制作。 数据集管…

ElasticSearch之Index Template 和Dynamic Template

写在前面 在ElasticSearch之Mapping 一文中我们一起看了es的dynamic mapping机制,通过该机制允许我们不需要显式的定义mapping信息,而是es根据插入的文档值来自动生成 ,比如插入如下的文档: {"firstName": "Chan…

初识 Rust 语言

目录 前言一、Rust 的背景二、Rust的特性三、部署开发环境,编写一个简单demo1、在ubuntu 20.04部署环境2、编写demo测试 四、如何看待Linux内核引入Rust 前言 自Linux 6.1起,初始的Rust基础设施被添加到Linux内核中。此后为了使内核驱动程序能够用Rust编…

第13章 网络 Page744~746 asio核心类 ip::tcp::endPoint

2. ip::tcp::endpoint ip::tcp::socket用于连接TCP服务端的 async_connect()方法的第一个入参是const endpoint_type& peer_endpoint. 此处的类型 endpoint_type 是 ip::tcp::endpoint 在 在 ip::tcp::socket 类内部的一个别名。 libucurl 库采用字符串URL表达目标的地…

Android开机不显示bootloader界面

Turn it off in the following way LINUX\android\bootable\bootloader\edk2\QcomModulePkg\Library\BootLib\MenuKeysDetection.c 试了没有生效 --- a/QcomModulePkg/Library/BootLib/MenuKeysDetection.cb/QcomModulePkg/Library/BootLib/MenuKeysDetection.c-364,7 364,8…

显微测量|台阶仪二维超精密测量微观形貌

台阶仪通过扫描被测样品表面,获取高分辨率的表面形貌数据,能够揭示微观结构的特征和性能。 标题了解工作原理和性能特点 台阶仪利用扫描探针在样品表面上进行微观测量,通过探测探针和样品表面之间的相互作用力,获取表面形貌信息…

数据分析 — 动画图 pyecharts

目录 一、概念二、安装和导入三、绘图逻辑四、绘图1、柱状图2、折线图3、散点图4、饼图5、南丁格尔图6、Geo() 地理坐标第7、Map() 绘制区域8、词云图9、层叠图10、3D 图11、仪表板 一、概念 Pyecharts 是一个基于 Echarts 的 Python 可视化库,它通过 Python 生成 …