Haystack 通过其管道架构和内置组件来管理文档的批量处理,这些组件旨在高效地处理多个文档。该框架通过将一组文档传递到结构化工作流程中的一系列节点(如转换器、预处理器或检索器)来处理批次。管道中的每个节点都经过优化,可以对批次进行操作,从而减少重复操作的开销,并在可能的情况下利用硬件加速。例如,当使用文本嵌入模型时,一次处理多个文档可以更好地利用 GPU 资源,因为神经网络通常以批处理方式更快地计算预测结果。
一个关键的例子是 Haystack 的 PreProcessor
类,它将文档拆分为更小的文本块。如果将 100 个文档传递给具有配置了 batch_size
为 10 的 PreProcessor
节点的管道,则该节点将一次处理 10 个文档,并将每个文档拆分为段落或句子。这种方法平衡了内存使用和速度,避免了一次处理所有文档造成的瓶颈。同样,当在 Retriever
中使用嵌入模型时,批量处理允许将文本块批量转换为向量嵌入,这比一次嵌入一个块快得多。开发人员可以使用节点中的 batch_size
等参数来控制批量大小,或者根据可用内存调整它们。
Haystack 还与支持批量索引的文档存储(如 Elasticsearch 或 FAISS)集成。处理后,文档或嵌入会批量保存,而不是单独保存,从而减少了写入操作的数量。例如,使用带有 500 个文档列表的 DocumentStore.write_documents()
将批量插入它们,这比 500 个单独的插入要快。这在摄取大型数据集时特别有用。通过将管道级别的批处理与存储优化相结合,Haystack 可确保高效地处理大规模的文档处理任务,同时允许开发人员针对其特定的硬件和用例微调批量大小。