论文题目:A Survey of Query Optimization in Large Language Models
论文链接:https://arxiv.org/pdf/2412.17558
查询优化指的是旨在提高大型语言模型(LLMs)理解及回答查询的效率和质量的一系列技术,特别是在检索增强生成(RAG)场景中处理复杂查询时。通过改进用户的原始查询,这一过程带来了更加准确和上下文适当的响应,包括语义模糊、复杂需求以及查询与目标文档之间的相关性差异。在处理复杂或多面的问题的场景时,有效的查询优化需要深刻理解用户意图和查询背景。这篇文章总结了四个主要查询优化方法:扩展、消歧、分解和抽象
查询扩展技术对于提高检索增强生成的性能尤其重要,特别是在与 LLMs 集成时。根据不同的知识来源,我们可以将查询扩展大致分为内部扩展和外部扩展两类。
对于复杂查询,直接使用原始查询进行搜索往往无法检索到足够的信息。对于大型语言模型(LLMs)而言,首先将这些查询分解为更简单、可回答的子查询,然后针对这些子组件搜索相关信息是至关重要的。通过整合这些子查询的响应,LLMs 能够构建对原始查询的全面回应。
原始查询: “请告诉我2024年北京冬季奥运会的金牌得主,并列出他们赢得金牌的项目以及这些项目的比赛地点。” 查询分解步骤 子查询1: “2024年北京冬季奥运会的具体举办时间和地点是什么?” 目标是确认事件的存在及其基本详情,这有助于后续查询中的时间过滤和位置限定。 子查询2: “谁在2024年北京冬季奥运会上获得了金牌?” 这一步骤旨在收集所有金牌得主的信息,确保我们有完整的获奖者名单。 子查询3: 对于每位金牌得主,“他们在2024年北京冬季奥运会上赢得了哪些项目的金牌?” 针对每一位金牌得主,进一步细化查询以获取他们具体获胜的项目。 子查询4: 对于每个金牌项目,“该比赛在北京冬季奥运会期间的具体比赛地点是哪里?” 了解每个项目的确切比赛地点,可能需要针对不同项目进行分别查询。
主要技术包括:
对于具有多个可能答案的模糊查询,仅依赖原始查询进行信息检索是不充分的。为了提供完整且细致的响应,大型语言模型(LLMs)必须学会通过识别用户的意图来澄清查询,然后制定更针对性的搜索查询。在收集相关信息后,LLMs 可以提供详细和全面的回答。查询消歧主要分为两种类型的方法:一种是针对本身模糊的查询,另一种则是多轮对话中的查询,需要结合历史对话内容重写查询以实现消歧。
对于复杂的多跳查询,顺序分解可能无法产生准确的答案,甚至会使查询更加复杂。人类常常会退一步进行抽象,以达到高层次的原则来解决复杂查询,减少在中间推理步骤中出错的机会。主要技术包括: