要在 Haystack 中微调 Retriever 模型,您需要准备数据、配置训练管道并运行训练过程。 Haystack 支持微调密集检索器,例如 Dense Passage Retrieval (DPR) 和基于嵌入的模型。 核心步骤包括设置带标签的数据集、定义模型架构,并使用 Haystack 的实用程序来优化针对您的特定领域或任务的检索器。 此过程使检索器能够更好地理解数据集中文档的上下文和相关性。
首先,以与 Haystack 兼容的格式准备您的训练数据。 这通常涉及创建问题-文档对的集合,其中每个问题都链接到相关文档(正面示例)和可选的不相关文档(负面示例)。 例如,您可以使用以 question
、positive_ctxs
(相关段落)和 hard_negative_ctxs
(具有挑战性但无关紧要的段落)结构化的 JSON 文件。 Haystack 的 DataSilo
类可以加载此数据并将其拆分为训练/验证集。 如果您使用的是自定义数据集,请确保它反映您的检索器将处理的真实查询和文档。 像 FAISS 或 Milvus 这样的工具可以帮助索引文档,以便在训练期间进行高效检索。
接下来,使用 Haystack 的 RetrieverTrainer
或自定义训练循环来配置训练管道。 初始化您的检索器模型,例如,使用预训练的句子转换器(如 multi-qa-mpnet-base-dot-v1
)的 EmbeddingRetriever
。 指定超参数,例如学习率、批量大小和 epoch 数。 使用对比损失等损失函数来教导模型区分相关文档和不相关文档。 在训练期间,模型会更新其嵌入,以最大程度地减少问题及其正确答案之间的距离,同时最大程度地与否定答案分离。 为了进行评估,请跟踪验证集上的召回率@k 等指标(例如,正确文档在 top-k 结果中出现的频率)。 Haystack 与 PyTorch 和 Hugging Face 库集成,使其能够直接利用现有的训练实用程序。
训练完成后,保存微调的模型并将其集成到您的 Haystack 管道中。 在未见过的数据上测试其性能,以确保其具有良好的泛化能力。 例如,如果您为医疗 FAQ 微调了检索器,请验证它是否能检索新患者查询的准确答案。 如果结果不理想,请考虑调整数据集(例如,添加更多困难的负面示例)或调整超参数。 记住使用更新后的检索器嵌入重新索引您的文档存储。 Haystack 的模块化设计允许在现有管道中交换检索器,而不会破坏其他组件(如阅读器或生成器)。 定期监控生产中的性能并定期重新训练以适应新数据或不断变化的需求。