Haystack 通过将过程分解为顺序阶段来处理多步文档检索,每个阶段旨在优化和改进结果。它不依赖单一方法,而是使用流水线架构,其中不同的组件(如检索器、排序器或过滤器)协同工作。例如,流水线可能首先使用快速的基于关键词的检索器来获取广泛的文档集合,然后应用神经网络重排序器来优先处理最相关的文档。这种方法平衡了速度和准确性,确保系统在扩展的同时保持精度。
典型的流水线始于初始检索器,如 BM25 或稀疏向量搜索,用于快速扫描大型文档集合。这些方法擅长匹配关键词,但可能会错过上下文的细微差别。为了解决这个问题,Haystack 允许添加第二个阶段,例如稠密检索器(如 Dense Passage Retriever)或交叉编码器重排序器。稠密检索器使用神经网络嵌入来捕获语义含义,而像 BERT 这样的交叉编码器则评估文档-查询对以获得更深层次的相关性。例如,流水线可能使用 BM25 检索 1,000 篇文档,然后使用交叉编码器对前 200 篇进行重排序,以筛选出最佳的 10 篇。开发人员还可以在步骤之间插入过滤器(例如,按元数据或日期)来提前缩小范围,从而减少计算开销。
该框架的灵活性使开发人员能够根据特定需求定制流水线。您可以组合多个检索器(例如,混合稀疏-稠密搜索)或添加后处理步骤,如去重或答案提取。Haystack 的预定义组件和模块化设计使其易于尝试不同的配置。例如,医疗搜索系统可能首先按出版年份过滤文档,然后使用生物医学特定的检索器,再应用针对该领域调整的重排序器。通过将关注点分离到独立的步骤中,Haystack 确保每个阶段都能独立优化,而整个流水线能够高效地提供准确、上下文感知的搜索结果。