检索增强生成 (RAG) 经常被过度宣传,导致实施后期望落空。虽然它看起来很简单——将向量数据库与大型语言模型 (LLM) 相结合——但要实现最佳性能却很复杂。RAG 易于使用但难以精通,需要超越基本设置的更深入理解和微调。
关于 RAG 的更多信息 使用 Redis、AWS Bedrock 和 LlamaIndex 实现 Agentic RAG
在我之前的两篇博客中,我介绍了如何使用 BGE 嵌入模型和 Redis 向量数据库来微调初始检索部分。
通过微调提升 RAG
重排器是信息检索系统中的专门组件,用于在第二评估阶段优化搜索结果。在初步检索相关项后,重排器会重新排序结果,优先显示最相关的项目,从而提高最终输出的质量和排序。
在这篇博客文章中,我们将重点介绍如何微调重排器。
在 RAG 系统中,查询被编码成向量并在包含文档嵌入的向量数据库中搜索。检索到 Top-k 个匹配文档后,LLM 将它们用作上下文以生成详细且相关的响应。这对于适合 LLM 上下文窗口的小文档效果很好。然而,对于大型数据集,检索到的结果可能会超出上下文窗口,导致信息丢失并降低响应质量。
为了解决这个问题,您应该使用重排器对 Top-k 个匹配文档进行精炼和优先级排序,然后再将其馈送给 LLM。
重排器根据相关性重新排序检索到的文档,确保最相关的信息能适合 LLM 有限的上下文窗口。这优化了上下文的使用,提高了响应的准确性和连贯性。
Cross-Encoder 是一种用于句子对分类任务的神经网络,包括搜索结果重排。
与分别编码每个输入的 Bi-Encoders 不同,Cross-Encoders 会同时处理两个输入文本,从而允许它们之间进行更深入的交互。
什么是“BAAI/bge-reranker-base”?
这是来自 BAAI(北京智源人工智能研究院)的预训练 Cross-Encoder 模型,专门用于重排任务。
读取包含问题和答案的 CSV 文件。从每一行中提取“问题”和“答案”。将它们存储在一个以数字字符串为键的字典中。字典 qa_dict 后续可用于快速查找问答对。
创建蕴含和矛盾对的混合集合,用于训练 NLI 模型。帮助模型区分真实的问答对和不相关的对。通过确保同时存在蕴含和矛盾标签来平衡数据集。
蕴含示例
矛盾示例
定义用于均方误差 (MSE) 精度评估的自定义评估器类
创建训练数据加载器
训练模型
使用微调模型预测蕴含对
使用微调模型预测矛盾对
微调重排模型是继嵌入工作之后的逻辑发展,并提供了一种强大的方法来增强系统解释和优先处理信息的能力。从生成合成数据到训练和评估模型,每个步骤都带来了独特的挑战和机遇。无论您是利用真实世界数据还是构建自定义数据集,成功都取决于持续的实验、迭代和改进。希望本指南能鼓励您在自己的项目中探索微调的潜力。