提升搜索引擎性能:使用Cross Encoder Reranker优化结果排序

# 介绍

在现代信息检索系统中,检索器(Retriever)和重排序器(Reranker)通常被结合使用,以提高搜索结果的质量。Cross Encoder Reranker是一种重排序技术,通过使用模型对检索的初步文档进行重新排序,以更好地匹配查询意图。在本文中,我们将详细介绍如何使用Hugging Face的Cross Encoder模型实现Cross Encoder Reranker,并展示如何在Amazon SageMaker上部署这些模型。

# 主要内容

## 1. 向量存储检索器的设置

我们首先设置一个简单的向量存储检索器,利用2023年美国国情咨文的文本数据。该检索器将会检索出20篇相关文档。

```python
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 加载文档并进行分块处理
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)

# 创建嵌入模型和检索器
embeddingsModel = HuggingFaceEmbeddings(model_name="sentence-transformers/msmarco-distilbert-dot-v5")
retriever = FAISS.from_documents(texts, embeddingsModel).as_retriever(search_kwargs={"k": 20})

# 查询示例
query = "What is the plan for the economy?"
docs = retriever.invoke(query)
pretty_print_docs(docs)

2. 用CrossEncoderReranker进行重排序

我们将使用ContextualCompressionRetrieverCrossEncoderReranker对检索结果进行重排序,从而提高结果的质量。

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain_community.cross_encoders import HuggingFaceCrossEncoder

# 配置Cross Encoder模型
model = HuggingFaceCrossEncoder(model_name="BAAI/bge-reranker-base")
compressor = CrossEncoderReranker(model=model, top_n=3)
compression_retriever = ContextualCompressionRetriever(base_compressor=compr
<think>我们正在讨论三个不同的技术概念:Embedding、Reranker、Chat(可能指大语言模型)。用户询问这样理解是否正确。需要分别解释每个术语的核心功能,并说明它们之间的关系。 1. **Embedding(嵌入)**:用于将数据转化为向量表示,捕捉语义信息,常用于相似度计算、降维等。 2. **Reranker(重新排序器)**:在搜索或推荐系统中,对初步检索的结果进行重新排序,以提高相关性。通常使用更复杂的模型对候选结果进行精细排序。 3. **Chat(聊天)与推理**:这里可能指大语言模型(如ChatGPT)的聊天和推理能力,能够根据输入生成文本,进行问答、推理等任务。 它们之间的关系:在一些系统中,Embedding用于初步检索(比如从海量数据中快速找到相关候选),Reranker对候选进行精细排序,而Chat模型则用于生成回答或进行推理。 因此,用户的理解基本正确,但需要更清晰地阐明各自的功能和协作关系。 </think>### Embedding、Reranker、Chat模型的技术定位与关联 您的理解**基本正确**,但需要更精确的技术界定。以下是关键概念解析: --- ### **三大技术的核心分工** | **技术** | **核心功能** | **典型应用场景** | |----------------|-----------------------------------------------------------------------------|--------------------------------------| | **Embedding** | **数据语义化表示**<br>- 将文本/图像等离散对象映射为稠密向量<br>- 捕获隐藏的语义关系 | 相似搜索、推荐召回层、特征预处理 | | **Reranker** | **结果精细化排序**<br>- 对召回结果进行相关性重排<br>- 融合上下文语义深度理解 | 搜索引擎TOP-N优化、推荐系统精排阶段 | | **Chat模型** | **生成与推理**<br>- 基于输入生成连贯文本<br>- 执行逻辑推理和知识关联 | 问答系统、文本创作、多步推理任务 | --- ### **技术协作流程(以问答系统为例)** ```mermaid graph LR A[用户问题] --> B{Embedding模块} B --> C[向量化查询] C --> D[向量数据库召回] D --> E{Reranker模块} E --> F[重排TOP10结果] F --> G{Chat模型} G --> H[生成最终回答] ``` ### **关键区别澄清** 1. **Embedding vs Reranker** - Embedding:解决"找相似"(如:用户问"苹果" → 返回水果/手机相关文档) - Reranker:解决"哪条最相关"(如:在100篇手机文档中选出iPhone14最新评测) ```python # Reranker典型工作伪代码 retrieved_docs = vector_db.search(query_embedding, top_k=100) # Embedding召回 ranked_docs = cross_encoder.rerank(query, retrieved_docs) # 精细化排序 ``` 2. **Chat模型的特殊能力** - 超越检索:当问题需要**跨知识推理**时(如:"为什么苹果市值高于特斯拉但市盈率更低?") - 动态生成:创建不存在于检索库中的新内容(如:写一首关于AI的诗) --- ### **典型错误认知纠正** - ❌ "Embedding直接生成答案" → 仅提供语义表示,不生成文本 - ❌ "Reranker等同于Chat" → Reranker排序已有内容,Chat可创造新内容 - ✅ **最佳实践组合**: `Embedding召回 → Reranker精排 → Chat生成/推理` (例:Perplexity.ai搜索引擎架构) --- ### **行业应用验证** | 场景 | Embedding作用 | Reranker作用 | Chat作用 | |---------------------|------------------------|---------------------------|--------------------------| | 电商客服 | 匹配用户问题到商品库 | 筛选最相关商品描述 | 解释商品参数对比优势 | | 科研文献系统 | 查找相关论文 | 按创新性重排结果 | 总结多篇论文核心观点 | | 法律咨询 | 检索相似案例 | 按判决结果相关性排序 | 生成风险分析报告 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值