dot Redis 8 已发布——而且是开源的

了解更多

使用微调的重排器改进信息检索

GitHub 上的 Colab Notebook

检索增强生成 (RAG) 经常被过度宣传,导致实施后期望落空。虽然它看起来很简单——将向量数据库与大型语言模型 (LLM) 相结合——但要实现最佳性能却很复杂。RAG 易于使用但难以精通,需要超越基本设置的更深入理解和微调。

关于 RAG 的更多信息 使用 Redis、AWS Bedrock 和 LlamaIndex 实现 Agentic RAG

在我之前的两篇博客中,我介绍了如何使用 BGE 嵌入模型 Redis 向量数据库来微调初始检索部分。

通过微调提升 RAG

重排器是信息检索系统中的专门组件,用于在第二评估阶段优化搜索结果。在初步检索相关项后,重排器会重新排序结果,优先显示最相关的项目,从而提高最终输出的质量和排序。

在这篇博客文章中,我们将重点介绍如何微调重排器。

重排器如何改进 RAG?

在 RAG 系统中,查询被编码成向量并在包含文档嵌入的向量数据库中搜索。检索到 Top-k 个匹配文档后,LLM 将它们用作上下文以生成详细且相关的响应。这对于适合 LLM 上下文窗口的小文档效果很好。然而,对于大型数据集,检索到的结果可能会超出上下文窗口,导致信息丢失并降低响应质量。

为了解决这个问题,您应该使用重排器对 Top-k 个匹配文档进行精炼和优先级排序,然后再将其馈送给 LLM。

Redis Blog Information Retrieval With Rerankers Inline Image

重排器根据相关性重新排序检索到的文档,确保最相关的信息能适合 LLM 有限的上下文窗口。这优化了上下文的使用,提高了响应的准确性和连贯性。

Cross-Encoder 微调

Cross-Encoder 是一种用于句子对分类任务的神经网络,包括搜索结果重排。

与分别编码每个输入的 Bi-Encoders 不同,Cross-Encoders 会同时处理两个输入文本,从而允许它们之间进行更深入的交互。

什么是“BAAI/bge-reranker-base”?

这是来自 BAAI(北京智源人工智能研究院)的预训练 Cross-Encoder 模型,专门用于重排任务。

BAAI

读取包含问题和答案的 CSV 文件。从每一行中提取“问题”和“答案”。将它们存储在一个以数字字符串为键的字典中。字典 qa_dict 后续可用于快速查找问答对。

Question and Answer

创建蕴含和矛盾对的混合集合,用于训练 NLI 模型。帮助模型区分真实的问答对和不相关的对。通过确保同时存在蕴含和矛盾标签来平衡数据集。

蕴含示例

Entailment example

矛盾示例

Contradiction example

定义用于均方误差 (MSE) 精度评估的自定义评估器类

Mean Squared Error

创建训练数据加载器

Create Training DataLoader

训练模型

Train the model

使用微调模型预测蕴含对

Predict the entailment pair with fine-tune model

使用微调模型预测矛盾对

Predict the contradiction with fine-tune model

微调重排模型是继嵌入工作之后的逻辑发展,并提供了一种强大的方法来增强系统解释和优先处理信息的能力。从生成合成数据到训练和评估模型,每个步骤都带来了独特的挑战和机遇。无论您是利用真实世界数据还是构建自定义数据集,成功都取决于持续的实验、迭代和改进。希望本指南能鼓励您在自己的项目中探索微调的潜力。