查询分解是提高LLM检索效率的关键,别只依赖简单改写!

部署运行你感兴趣的模型镜像

论文题目:A Survey of Query Optimization in Large Language Models

论文链接:https://arxiv.org/pdf/2412.17558

核心内容

查询优化指的是旨在提高大型语言模型(LLMs)理解及回答查询的效率和质量的一系列技术,特别是在检索增强生成(RAG)场景中处理复杂查询时。通过改进用户的原始查询,这一过程带来了更加准确和上下文适当的响应,包括语义模糊、复杂需求以及查询与目标文档之间的相关性差异。在处理复杂或多面的问题的场景时,有效的查询优化需要深刻理解用户意图和查询背景。这篇文章总结了四个主要查询优化方法:扩展消歧分解抽象

查询优化

查询扩展

查询扩展技术对于提高检索增强生成的性能尤其重要,特别是在与 LLMs 集成时。根据不同的知识来源,我们可以将查询扩展大致分为内部扩展和外部扩展两类。

  1. 内部扩展:内部扩展专注于最大化利用原始查询或所用 LLM 中已有的信息,而不依赖于外部知识源。常见技术包括:
  • QUERY2DOC:QUERY2DOC 引入了一种简单而有效的方法,用于改善稀疏和密集检索系统。通过少样本提示 LLMs 生成伪文档,原始查询被这些生成的文档所扩展。
  • HYDE:HYDE 使用零样本提示与语言模型生成一个捕捉相关模式的假设文档,即使其中可能包含“幻觉”。然后,一个无监督对比编码器将该文档编码为嵌入向量,以识别语料库嵌入空间中的邻域。通过基于向量相似性检索类似的实际文档,HYDE 将生成的内容锚定到实际语料库,编码器的密集瓶颈过滤掉不准确的内容。
  1. 外部扩展:外部扩展是一种复杂的过程,通过无缝集成来自不同外部来源的相关信息,显著增强文档内容。这种方法通过增强文档语料的整体背景、深度和准确性,提升了内容的质量。扩展过程包括有策略地将权威事实、最新数据点和相关的上下文知识纳入其中,这些知识来源于广泛的外部数据集、知识库和精选的信息资源。

查询分解

对于复杂查询,直接使用原始查询进行搜索往往无法检索到足够的信息。对于大型语言模型(LLMs)而言,首先将这些查询分解为更简单、可回答的子查询,然后针对这些子组件搜索相关信息是至关重要的。通过整合这些子查询的响应,LLMs 能够构建对原始查询的全面回应。

原始查询

“请告诉我2024年北京冬季奥运会的金牌得主,并列出他们赢得金牌的项目以及这些项目的比赛地点。”

查询分解步骤

子查询1: “2024年北京冬季奥运会的具体举办时间和地点是什么?”

目标是确认事件的存在及其基本详情,这有助于后续查询中的时间过滤和位置限定。

子查询2: “谁在2024年北京冬季奥运会上获得了金牌?”

这一步骤旨在收集所有金牌得主的信息,确保我们有完整的获奖者名单。

子查询3: 对于每位金牌得主,“他们在2024年北京冬季奥运会上赢得了哪些项目的金牌?”

针对每一位金牌得主,进一步细化查询以获取他们具体获胜的项目。

子查询4: 对于每个金牌项目,“该比赛在北京冬季奥运会期间的具体比赛地点是哪里?”

了解每个项目的确切比赛地点,可能需要针对不同项目进行分别查询。

主要技术包括:

  • LEAST-TO-MOST 提示法:这种方法利用少样本提示首先将复杂问题分解为一系列较简单的子问题,然后按顺序解决它们。
  • PLAN-AND-SOLVE 提示法:这种提示方法包括制定一个计划,将整个任务划分为较小的子任务,并按照该计划执行这些子任务。这种策略有助于提高解决复杂任务的效率和准确性。
  • PLAN×RAG:PLAN×RAG 制定了表示为有向无环图(DAG)的全面推理计划。这个推理 DAG 将主要查询分解为相互关联的原子子查询,提供了计算结构,实现了子查询之间的高效信息共享。

查询消歧

对于具有多个可能答案的模糊查询,仅依赖原始查询进行信息检索是不充分的。为了提供完整且细致的响应,大型语言模型(LLMs)必须学会通过识别用户的意图来澄清查询,然后制定更针对性的搜索查询。在收集相关信息后,LLMs 可以提供详细和全面的回答。查询消歧主要分为两种类型的方法:一种是针对本身模糊的查询,另一种则是多轮对话中的查询,需要结合历史对话内容重写查询以实现消歧。

查询抽象

对于复杂的多跳查询,顺序分解可能无法产生准确的答案,甚至会使查询更加复杂。人类常常会退一步进行抽象,以达到高层次的原则来解决复杂查询,减少在中间推理步骤中出错的机会。主要技术包括:

  • MA-RIR:MA-RIR 定义了一个查询方面(query aspect),即多方面查询的一个子段,代表查询内的不同主题或方面。这允许在复杂查询的不同方面进行更有针对性和有效的推理。
  • META-REASONING:META-REASONING 致力于将每个查询中的实体和操作语义分解为通用的符号表示,从而提高推理效率和准确性。该方法使 LLM能够学习跨多种语义复杂场景的泛化推理模式。

祝大家新年快乐!

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

目前提供的引用中未提及LLM的RAG采用的信息检索技术及原理相关内容,所以无法依据引用内容准确回答。不过,一般来说,RAG中常用的信息检索技术及原理如下: ### 基于向量空间模型的检索 该技术将文本转换为向量表示,在向量空间中计算向量之间的相似度,以此来确定文档与查询的相关性。原理是利用词嵌入技术,如Word2Vec、GloVe等,将文本中的词语映射到低维向量空间中,文档和查询都可以表示为向量。通过计算向量之间的余弦相似度等指标,找出与查询向量最相似的文档向量,对应的文档即为检索结果。 ### 基于BM25算法的检索 BM25算法是一种基于概率检索模型的算法。它通过考虑查询词在文档中的频率、文档的长度等因素来计算文档与查询的相关性得分。原理是对每个查询词在文档中的出现频率进行统计,并根据文档长度进行归一化处理,综合多个查询词的得分得到文档的最终得分,得分越高表示文档与查询越相关。 ### 基于深度学习检索模型 如基于Transformer架构的预训练语言模型,如BERT等。这类模型可以学习到文本的语义信息,通过对查询和文档进行编码,计算它们之间的语义相似度。原理是利用预训练语言模型对文本进行特征提取,将文本转换为具有语义信息的向量表示,然后通过比较向量之间的距离来确定相关性。 ```python # 以下是一个简单的基于向量相似度的信息检索示例 import numpy as np from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # 文档集合 documents = [ "This is the first document.", "This document is the second document.", "And this is the third one.", "Is this the first document?" ] # 查询 query = "This is the first document." # 文本向量化 vectorizer = TfidfVectorizer() document_vectors = vectorizer.fit_transform(documents) query_vector = vectorizer.transform([query]) # 计算相似度 similarities = cosine_similarity(query_vector, document_vectors) # 找到最相似的文档索引 most_similar_index = np.argmax(similarities) print("最相似的文档是:", documents[most_similar_index]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值