# ⚡️什么是FastEmbed?
FastEmbed是一个轻量级、快速的Python库,用于嵌入生成。我们[支持流行的文本模型](https://qdrant.github.io/fastembed/examples/Supported_Models/)。如果您希望我们添加新的模型,请[打开一个GitHub问题](https://github.com/qdrant/fastembed/issues/new)。
默认的文本嵌入(`TextEmbedding`)模型是Flag Embedding,在[MTEB](https://huggingface.co/spaces/mteb/leaderboard)排行榜中展示。它支持输入文本的“query”和“passage”前缀。这里是[检索嵌入生成](https://qdrant.github.io/fastembed/qdrant/Retrieval_with_FastEmbed/)的示例以及如何使用[FastEmbed与Qdrant](https://qdrant.github.io/fastembed/qdrant/Usage_With_Qdrant/)的示例。
## 📈 为什么选择FastEmbed?
1. 轻量:FastEmbed是一个轻量级库,外部依赖很少。我们不需要GPU,也不下载GB级别的PyTorch依赖,而是使用ONNX Runtime。这使得它成为无服务器运行时(如AWS Lambda)的理想选择。
2. 快速:FastEmbed为速度而设计。我们使用ONNX Runtime,它比PyTorch更快。我们还使用数据并行来编码大规模数据集。
3. 精确:FastEmbed优于OpenAI Ada-002。我们还[支持](https://qdrant.github.io/fastembed/examples/Supported_Models/)不断扩展的模型集,其中包括一些多语言模型。
## 🚀 安装
安装FastEmbed库,使用pip是最好的方式。您可以选择带或不带GPU支持的安装方式:
```bash
pip install fastembed
# 或者带GPU支持
pip install fastembed-gpu
📖 快速入门
from fastembed import TextEmbedding
from typing import List
# 示例文档列表
documents: List[str] = [
"这是为了比其他嵌入库(例如Transformers、Sentence-Transformers等)更快、更轻而构建的。",
"fastembed由Qdrant支持和维护。",
]
# 这将触发模型的下载和初始化
embedding_model = TextEmbedding()
print("模型BAAI/bge-small-en-v1.5已准备好使用。")
embeddings_generator = embedding_model.embed(documents) # 提醒:这是一个生成器
embeddings_list = list(embedding_model.embed(documents))
# 您也可以将生成器转换为列表,然后转换为numpy数组
len(embeddings_list[0]) # 384维的向量
Fastembed支持各种任务和模态的多种模型。 所有可用模型的列表可以在这里找到。
🎒 密集文本嵌入
from fastembed import TextEmbedding
model = TextEmbedding(model_name="BAAI/bge-small-en-v1.5")
embeddings = list(model.embed(documents))
# [
# array([-0.1115, 0.0097, 0.0052, 0.0195, ...], dtype=float32),
# array([-0.1019, 0.0635, -0.0332, 0.0522, ...], dtype=float32)
# ]
🔱 稀疏文本嵌入
- SPLADE++
from fastembed import SparseTextEmbedding
model = SparseTextEmbedding(model_name="prithivida/Splade_PP_en_v1")
embeddings = list(model.embed(documents))
# [
# SparseEmbedding(indices=[ 17, 123, 919, ... ], values=[0.71, 0.22, 0.39, ...]),
# SparseEmbedding(indices=[ 38, 12, 91, ... ], values=[0.11, 0.22, 0.39, ...])
# ]
🦥 延迟交互模型(又称ColBERT)
from fastembed import LateInteractionTextEmbedding
model = LateInteractionTextEmbedding(model_name="colbert-ir/colbertv2.0")
embeddings = list(model.embed(documents))
# [
# array([
# [-0.1115, 0.0097, 0.0052, 0.0195, ...],
# [-0.1019, 0.0635, -0.0332, 0.0522, ...],
# ]),
# array([
# [-0.9019, 0.0335, -0.0032, 0.0991, ...],
# [-0.2115, 0.8097, 0.1052, 0.0195, ...],
# ]),
# ]
🖼️ 图像嵌入
from fastembed import ImageEmbedding
images = [
"./path/to/image1.jpg",
"./path/to/image2.jpg",
]
model = ImageEmbedding(model_name="Qdrant/clip-ViT-B-32-vision")
embeddings = list(model.embed(images))
# [
# array([-0.1115, 0.0097, 0.0052, 0.0195, ...], dtype=float32),
# array([-0.1019, 0.0635, -0.0332, 0.0522, ...], dtype=float32)
# ]
⚡️FastEmbed在GPU上的使用
FastEmbed支持在GPU设备上运行。
这需要安装fastembed-gpu
包。
pip install fastembed-gpu
查看我们的示例以获取详细的说明和CUDA 12.x支持。
from fastembed import TextEmbedding
embedding_model = TextEmbedding(
model_name="BAAI/bge-small-en-v1.5",
providers=["CUDAExecutionProvider"]
)
print("模型BAAI/bge-small-en-v1.5已准备在GPU上使用。")
在Qdrant中的使用
在Python中安装Qdrant客户端:
pip install qdrant-client[fastembed]
或者
pip install qdrant-client[fastembed-gpu]
在zsh中,您可能需要使用引号pip install 'qdrant-client[fastembed]'
。
from qdrant_client import QdrantClient
# 初始化客户端
client = QdrantClient("localhost", port=6333) # 生产环境
# client = QdrantClient(":memory:") # 小规模实验
# 准备您的文档、元数据和ID
docs = ["Qdrant有Langchain集成", "Qdrant也有Llama Index集成"]
metadata = [
{"source": "Langchain-docs"},
{"source": "Llama-index-docs"},
]
ids = [42, 2]
# 如果您想更改模型:
# client.set_model("sentence-transformers/all-MiniLM-L6-v2")
# 支持的模型列表: https://qdrant.github.io/fastembed/examples/Supported_Models
# 使用新的add()而不是upsert()
# 这会内部调用配置的嵌入模型的embed()
client.add(
collection_name="demo_collection",
documents=docs,
metadata=metadata,
ids=ids
)
search_result = client.query(
collection_name="demo_collection",
query_text="这是一篇查询文档"
)
print(search_result)