微信扫码
与创始人交个朋友
我要投稿
查询扩展
在进行信息检索时,为了提高搜索系统的召回率,可以使用查询扩展方法。通过向搜索查询中添加额外的术语,查询扩展可以找到那些与初始查询词汇不完全匹配但相关的文档。这对于提升检索增强生成 (RAG) 系统的性能尤为重要和有用。
为什么使用查询扩展?
查询扩展有几个重要的原因:
- **提高召回率**:帮助检索与查询语义相关但不一定包含相同关键词的文档。
- **解决查询歧义**:对于简短或模糊的查询,查询扩展提供更多上下文和清晰度。
- **增强文档匹配**:扩展查询术语增加了匹配数据库中正确文档的可能性。
LLM 在查询扩展中的应用
最近的进展提出利用大语言模型 (LLM) 进行查询扩展。与依赖检索文档内容的传统方法(如伪相关反馈 (PRF) )不同,LLM 利用其生成能力创建有意义的查询扩展。这种方法利用了 LLM 内部编码的知识,生成可能与原始查询相关的替代术语和短语。
下面是用于查询扩展的代码
#we are using openai for generating query
import os
import openai
from openai import OpenAI
openai.api_key = os.environ['OPENAI_API_KEY']
openai_client = OpenAI()
def augment_query_generated(query, model="gpt-3.5-turbo"):
messages = [
{
"role": "system",
"content": "You are a helpful expert financial research assistant. Provide an example answer to the given question, that might be found in a document like an annual report. "
},
{"role": "user", "content": query}
]
response = openai_client.chat.completions.create(
model=model,
messages=messages,
)
content = response.choices[0].message.content
return content
original_query = "What were the most important factors that contributed to increases in revenue?"
hypothetical_answer = augment_query_generated(original_query)
# we are combining our orignal query + hypothetical_answer
joint_query = f"{original_query} {hypothetical_answer}"
print(word_wrap(joint_query))
对于给定的查询,提示 LLM 生成一个假设的答案。我们可以将生成的答案与原始查询结合,然后将其作为联合查询传递回我们的 LLM。这为 LLM 提供了更多的上下文,以便在检索结果之前进行提示。
以这种方式在 RAG 系统中使用查询扩展有几个好处:
- **更好的文档检索**:扩展查询可以更准确和全面地检索文档,这是 RAG 模型中的一个关键步骤。
- **增强理解**:扩展查询为 RAG 模型提供了更多上下文,改善了模型的理解和响应。
- **多功能性**:这种方法适用于各种领域和查询类型,增强了 RAG 模型的多功能性。
缺点及重排序的角色
尽管查询扩展有显著的好处,但也存在一些缺点:
- **过度扩展**:添加过多术语有时会导致检索到不相关的文档。
- **质量控制**:扩展术语的相关性并不总是有保证。
为了缓解这些问题,重排序起着至关重要的作用。它精炼初始检索输出,基于扩展查询的相关性重新校准文档排名。这确保了只有最相关的文档被优先考虑,有效地筛选了查询扩展引入的噪音。
交叉编码重排序
在重排序方法中,交叉编码模型以显著提高搜索准确性而著称。这些模型不同于传统的排名度量(如余弦相似度),通过深度学习直接评估每个文档与查询之间的对齐。交叉编码器通过同时处理查询和文档来输出相关性评分,使文档选择过程更加细致入微。
实际应用
在实际应用中,交叉编码重排序在扩展查询后进行,涵盖更广泛的文档集合。这种方法不仅精炼了初始检索的文档选择,还通过以下方式增强了 RAG 模型的实用性:
- **提高准确性**:交叉编码器通过确保文档根据其与查询的实际相关性进行排名来提高文档检索的精度。
- **扩大多功能性**:这种方法可以无缝适应各种领域和查询类型,提高 RAG 模型的适应性。
示例用例
考虑这样一种场景,我们需要根据用户查询的相关性来检索和排序文档。初始查询扩展后,我们应用交叉编码模型对结果进行重排序。
在下面的示例中,我们使用句子 Transformer 交叉编码器。从 RAG 中传递检索文档,随后交叉编码器将根据最相关的文档提供排名。我们可以使用这个或从重排序器中获取答案,并进行进一步处理,例如将顶级文档传递给 LLM 以获得最终答案。
import numpy as np
#cross encoder reranker
from sentence_transformers import CrossEncoder
cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
# Extract text content from Document objects and convert to strings
document_texts = [doc.page_content for doc in retrieved_documents]
query_text = "What were the most important factors that contributed to increases in revenue?"
# Create pairs as strings
pairs = [[query_text, doc_text] for doc_text in document_texts]
# Predict scores for pairs
scores = cross_encoder.predict(pairs)
# Print scores
print("Scores:")
for score in scores:
print(score)
print("New Ordering:")
for o in np.argsort(scores)[::-1]:
print(o+1)
接下来,我们将介绍重排序模型 ColBERTv2,它是目前可用的最快重排序模型之一。
理解 ColBERT:重排序模型
ColBERT 是一种文档重排序模型,采用基于 BERT 的延迟交互架构,旨在提高文档检索和排序的性能。它特别以平衡计算效率和高准确率而著称。
核心思想和架构
ColBERT 使用 BERT 将查询和文档文本的编码分离,允许离线预计算文档编码。这大大减少了每个查询的计算负荷。该模型采用了一种独特的方法,将每个查询和文档 Token 编码成低维向量,促进快速和准确的检索。
延迟交互机制
ColBERT 效率的核心在于其延迟交互机制。它不将所有 Token 向量压缩成一个单一向量,而是将查询的每个向量与文档的每个向量进行比较。这种方法确保了文档与查询相关性的更细致和准确的表示。
ColBERT 的索引和检索
ColBERT 的索引过程是一个三阶段过程:
- **质心选择**:使用 k-means 聚类选择用于残差编码的质心。
- **段落编码**:使用选定的质心编码文档并计算量化残差。
- **索引倒置**:创建一个按质心分组的嵌入倒排列表以便快速检索。
在检索过程中,ColBERT 高效地计算每个查询向量的余弦相似度,从而快速准确地对文档进行排名。
FlashRank
FlashRank 是一个超轻量级且超快速的 Python 库,用于将重排序添加到现有的搜索和检索管道中。它基于最先进的交叉编码器。
from flashrank import Ranker, RerankRequest
query = 'What were the most important factors that contributed to increases in revenue?'
ranker = Ranker(model_name="ms-marco-MiniLM-L-12-v2", cache_dir="/opt")
rerankrequest = RerankRequest(query=query, passages=formatted_data)
results = ranker.rerank(rerankrequest)
print(results)
结论
基于 LLM 的查询扩展和先进的重排序模型如交叉编码器 ColBERT v2 和 FlashReranker 的集成正在为信息检索领域开辟新的可能性。这些方法不仅提高了文档检索系统的精度和召回率,还确保 RAG 模型能够提供高度相关和上下文丰富的结果。随着我们在这一领域的不断探索和创新,这些工具将变得更易于使用,并在各种用例和领域中更为普遍。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-24
除了混合搜索,RAG 还需要哪些基础设施能力?
2024-12-24
万字长文梳理 2024 年的 RAG
2024-12-24
面向医疗场景的大模型 RAG 检索增强解决方案
2024-12-23
一文详谈20多种RAG优化方法
2024-12-23
深入RAG工作流:检索生成的最佳实践
2024-12-23
o1 pro “碾压式”洞察:世界顶尖免疫学专家被机器深度分析“惊醒”
2024-12-23
使用 Lang Chain 和 Lang Graph 构建多代理 RAG :分步指南 + Gemma 2
2024-12-23
RAG评估框架:RAG Triad框架及其实战
2024-07-18
2024-05-05
2024-06-20
2024-09-04
2024-05-19
2024-07-09
2024-07-09
2024-07-07
2024-06-13
2024-07-07