选择合适的嵌入器
本页面提供了在使用 Haystack 时选择合适的 Embedder 的信息。它解释了 Text Embedder 和 Document Embedder 之间的区别,并讨论了基于 API 的 Embedder 和在本地运行模型的 Embedder。
Haystack 中的 Embedder 使用预训练模型将文本或文档转换为向量表示。Haystack Embedder 生成的嵌入是固定长度的向量。它们捕捉文本中的上下文信息和语义关系。
单独的嵌入仅用于信息检索目的(进行语义搜索/向量搜索)。您可以在管道中使用嵌入来完成诸如问答之类的任务。具有嵌入检索功能的 QA 管道将包含以下步骤:
- 将查询转换为向量/嵌入。
- 根据嵌入相似度查找相似文档。
- 将查询和检索到的文档传递给语言模型,该模型可以是抽取式的或生成式的。
文本和文档 Embedder
有两种类型的 Embedder:文本和文档。
Text Embedder 处理文本字符串,通常在查询管道的开头使用。它们将查询文本转换为向量嵌入,然后将其发送给 Retriever。
Document Embedder 嵌入 Document 对象,通常在索引管道中使用,在 Converters 之后,在 DocumentWriter 之前。它们保留 Document 对象格式,并添加一个包含浮点数列表的嵌入字段。
您必须为文本和文档使用相同的嵌入模型。这意味着,如果您在索引管道中使用 CohereDocumentEmbedder,那么您必须在查询管道中使用具有相同模型的 CohereTextEmbedder。
基于 API 的 Embedder
这些 Embedder 使用外部 API 来生成嵌入。它们使您能够访问强大的模型,而无需自行处理计算。
这些解决方案的成本可能有所不同。根据您选择的解决方案,您需要为消耗的 token(发送和生成的)付费,或者为模型托管付费,通常按小时计费。有关详细信息,请参阅各个提供商的网站。
Haystack 支持各种提供商的模型:OpenAI、Cohere、Jina、Azure、Mistral 和 Amazon Bedrock,并且还在不断增加。
此外,您还可以使用 Haystack 的 Hugging Face API Embedders,通过 HF Serverless Inference API 或 付费 HF Inference Endpoints 进行原型设计。
本地 Embedder
本地 Embedder 允许您在本地机器/基础架构上托管开放模型。这个选择非常适合本地实验。
当您自行托管 embedder 时,可以从许多开放模型选项中选择模型。 Massive Text Embedding Benchmark (MTEB) Leaderboard 是了解检索性能和模型大小的一个不错的参考点。
它适用于数据隐私问题促使决定不向外部提供商传输数据,并且您拥有充足的计算资源(CPU 或 GPU)的生产场景。
以下是 Haystack 中提供的一些选项:
- Sentence Transformers:这个库主要使用 PyTorch,因此如果您使用 GPU,它可能是一个运行速度很快的选项。另一方面,Sentence Transformers 正在逐步添加对更高效后端的支持,这些后端不需要 GPU。
- Hugging Face Text Embedding Inference:这是一个用于在 CPU 和 GPU 上高效地服务开放嵌入模型的库。在 Haystack 中,可以通过 HuggingFace API Embedders 使用它。
- Hugging Face Optimum:这些 Embedder 设计用于在目标硬件上更快地运行模型。它们实现了特定于某种硬件的优化,例如 Intel IPEX。
- Fastembed:Fastembed 经过优化,即使资源有限的普通机器也能运行。它支持多种嵌入类型,包括稀疏技术(BM25, SPLADE)和经典的密集嵌入。
- Ollama:这些 Embedder 在 CPU(+GPU)上运行量化模型。由于对常规模型进行量化,嵌入质量可能会有所下降。但是,这使得这些模型可以在普通机器上高效运行。
- Nvidia:Nvidia Embedders 基于 Nvidia 的 NIM 构建,并托管在其优化的云平台上。它们为您提供了两种选择:通过其 API 使用模型或使用 Nvidia NIM 在本地部署模型。
请参阅主 Embedders 页面上 Haystack 中提供的 Embedders 的完整列表。
更新于 12个月前
