要在 Haystack 中设置和训练检索器,首先安装库并配置文档存储。Haystack 支持 BM25(基于关键词)和稠密神经模型(例如 Dense Passage Retriever)等检索器。首先,将文档转换为 Haystack 的 Document
格式来准备数据,该格式包含文本和元数据。例如,使用 Document
对象加载 CSV 或 JSON 文件,然后将其写入 Elasticsearch 或 FAISS 等文档存储。通过选择模型来初始化检索器——BM25 需要最少的设置,而稠密检索器需要预训练的 transformer 模型(例如 facebook/dpr-question_encoder
)。配置 embedding_dim
或 max_seq_len
等参数以匹配您的模型。
训练自定义检索器涉及在您的数据集上对稠密模型进行微调。使用 Haystack 的 DensePassageRetriever
并提供包含查询-文档对的数据集。例如,如果您的数据包含问题和相关的段落,请将其结构化为包含"question"
和"positive_context"
键的字典列表。使用 Dataset
和 DataLoader
加载数据集,然后使用 retriever.train()
训练模型。指定学习率(例如 1e-5
)、批量大小和 epoch 等超参数。在训练期间,模型学习将查询和文档映射到共享的嵌入空间,使相关的对更接近。监控 recall@k 等指标以评估检索准确性。
训练后,保存模型并将其集成到 Haystack 流水线中。例如,将检索器与阅读器模型结合使用,构建问答系统。通过运行 pipeline.run(query="你的问题")
并检查返回的文档来测试检索器。如果性能不佳,请调整训练数据或进一步微调。对于 BM25,可以调整 top_k
等参数来控制检索的文档数量。务必使用留出数据集进行验证,以确保泛化能力。Haystack 的模块化设计允许您替换检索器或组合它们(例如,使用 EnsembleRetriever
)以获得更好的结果。