要在 Haystack 中处理用户反馈和相关性反馈,首先要从用户那里收集关于搜索结果质量的显式或隐式信号。 Haystack 提供了一个 Feedback
API 来记录用户交互,例如点击、赞/踩或文档评分。例如,当用户点击特定搜索结果时,您可以使用 document_store.write_feedback()
将其记录为积极反馈。 这些数据与查询和文档一起存储,从而创建一个数据集来改进您的检索或排名模型。 开发人员通常通过将反馈收集直接添加到其应用程序的前端或 API 层来实现这一点,确保捕获每个交互并将其发送到 Haystack 的文档存储。
相关性反馈通过诸如微调检索器(例如,DensePassageRetriever)或排名器(例如,SentenceTransformersRanker)等技术集成到模型改进中。 例如,如果用户始终将包含代码片段的文档标记为与“Python 错误处理”之类的查询相关,则您可以重新训练检索器以优先考虑包含大量代码的内容。 Haystack 通过将反馈数据导出到 Triplet 或 Pairwise 数据集等训练格式来支持这一点。 您还可以使用 Learning-to-Rank (LTR) 方法,其中像 XGBoost 这样的模型在诸如文档点击率或关键词匹配等特征上进行训练,以预测相关性得分。 对于主动学习,诸如 LabelStudio 集成之类的工具允许开发人员识别低置信度预测并征求用户对这些情况的直接反馈,从而优化反馈循环。
实际上,通过以下方式实施反馈管道:
- 设置反馈记录系统(例如,使用 REST 端点来捕获用户操作)。
- 使用更新的反馈数据定期重新训练模型(例如,在新三元组上运行
retriever.train()
)。 - 在 A/B 实验中测试更新的模型以衡量性能提升。 例如,在使用反馈数据微调检索器后,使用保留的验证集将其 recall@k 与之前的版本进行比较。 将反馈存储在 SQLite 或 PostgreSQL 等数据库中,并使用 Haystack 的评估指标(例如,
eval()
方法)来量化改进。 通过验证各种查询并使用交叉验证等技术来避免过度拟合。 这种结构化方法确保反馈直接转化为搜索质量的可衡量改进。