FastEmbed:Qdrant 高效嵌入生成 Python 库

FastEmbed:Qdrant 高效嵌入生成 Python 库

💡 原文英文,约600词,阅读约需3分钟。
📝

内容提要

FastEmbed 是一个可在 CPU 上生成文本嵌入的 Python 库,无需 GPU、PyTorch 或 API 密钥。教程演示了如何用 qdrant-client 配合 FastEmbed 对文档进行嵌入、索引和搜索。默认模型 BAAI/bge-small-en-v1.5 为量化 ONNX 文件,输出 384 维向量。客户端在本地进程运行 FastEmbed,自动嵌入文档和查询。此外还支持稀疏、多向量、图像嵌入及重排序,并可通过 fastembed-gpu 扩展。

🔎

延伸解读

本地嵌入的隐私与成本优势

FastEmbed 在本地进程运行,无需 API 密钥,文档和查询不会离开你的环境,适合对数据隐私敏感的场景。同时,它不依赖 GPU 或 PyTorch,降低了硬件门槛和部署复杂度。但首次使用需下载模型文件,且嵌入计算消耗本地 CPU 资源,批量处理时需考虑性能影响。

默认模型的能力与限制

默认模型 BAAI/bge-small-en-v1.5 输出 384 维向量,上下文窗口为 512 token。这意味着长文档需要分块处理,例如取各块嵌入的均值。该模型为英文优化,若处理中文或其他语言,建议在 MTEB 排行榜上对比其他模型,并注意部分模型需要为文档和查询添加不同前缀。

与 Qdrant 集成的便利性

通过 qdrant-client 的 FastEmbed 扩展,客户端自动嵌入文档和查询,你无需手动管理向量。创建集合时可用 get_embedding_size 获取向量维度,避免硬编码。上传时用 models.Document 包装文本并指定模型,查询时同样包装查询文本,简化了流程。

扩展与生产注意事项

FastEmbed 还支持稀疏、多向量、图像嵌入及重排序,可通过 fastembed-gpu 和 cuda=True 利用 GPU 加速。生产环境中应锁定 FastEmbed 版本,因为默认模型可能随版本更新而变化。若需持久化存储,可使用 Qdrant Cloud 或 Docker 部署服务。

❓

Q&A

FastEmbed 是什么?它有什么特点?

FastEmbed 是一个在 CPU 上生成嵌入的 Python 库,无需 GPU、PyTorch 或 API 密钥。它默认使用量化 ONNX 模型 BAAI/bge-small-en-v1.5,输出 384 维向量,并支持稀疏、多向量、图像嵌入及重排序。

如何安装 qdrant-client 以使用 FastEmbed?

使用命令:pip install "qdrant-client[fastembed]>=1.14.2" 即可安装带有 FastEmbed 扩展的 Qdrant 客户端。

FastEmbed 默认使用哪个模型?它的输出维度是多少?

默认模型是 BAAI/bge-small-en-v1.5,它是一个量化 ONNX 文件,每个嵌入输出 384 维向量。

如何使用 FastEmbed 和 Qdrant 进行文档嵌入、索引和搜索?

首先创建 QdrantClient(如内存模式),然后创建集合,指定向量大小和距离度量。上传文档时,将文本包装为 models.Document 并指定模型,客户端会自动嵌入并上传。搜索时,同样将查询文本包装为 models.Document,客户端会嵌入查询并返回结果。

FastEmbed 支持哪些其他类型的嵌入?

FastEmbed 还支持稀疏嵌入(SparseTextEmbedding,包括 BM25、SPLADE 和 miniCOIL)、多向量嵌入(LateInteractionTextEmbedding,包括 ColBERT)、图像嵌入(ImageEmbedding)以及交叉编码器重排序器(TextCrossEncoder)。

如何处理超过模型上下文窗口的长文本?

默认模型最多读取 512 个 token。对于更长的文本,可以将其分块嵌入,然后对分块嵌入进行池化,例如取平均值。

如何扩展 FastEmbed 以使用 GPU 或并行处理?

安装 fastembed-gpu 并传递 cuda=True,可使用 device_ids 指定多个 GPU。使用 parallel 参数将 CPU 工作分散到多个工作进程,使用 lazy_load 延迟模型加载。

🏷️

标签

➡️

继续阅读