项目介绍:FastEmbed
FastEmbed 是一个轻量级且快速的 Python 库,专门用于生成嵌入。该库支持多种流行的文本模型,如果用户希望添加新模型,可以通过 GitHub 提交请求。
FastEmbed 功能介绍
FastEmbed 提供默认的文本嵌入模型 TextEmbedding
,该模型在 MTEB 排行榜上排名较高,支持对输入文本添加“查询”和“段落”前缀。用户可以通过它进行检索嵌入生成,并且可以将 FastEmbed 与 Qdrant 一起使用来增强功能。
为什么选择 FastEmbed?
- 轻量化:FastEmbed 是一个轻量级的库,依赖极少,不需要 GPU 也无需下载大量的 PyTorch 依赖,这使得它非常适合于无服务器运行环境,如 AWS Lambda。
- 速度快:FastEmbed 注重速度,使用 ONNX Runtime,比 PyTorch 更快,同时利用数据并行来编码大型数据集。
- 准确性:FastEmbed 比 OpenAI Ada-002 更准确,并支持越来越多的模型,包括部分多语言模型。
安装指南
用户可以使用 pip 不同选项安装 FastEmbed,不论是否需要 GPU 支持:
pip install fastembed
# 或者支持 GPU
pip install fastembed-gpu
快速开始
以下是一个关于 FastEmbed 的简单示例:
from fastembed import TextEmbedding
from typing import List
documents: List[str] = [
"FastEmbed 是构建得比其他嵌入库快且轻,比如 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))
len(embeddings_list[0]) # 输出 384 维的向量
支持的嵌入类型
FastEmbed 支持多种模型进行不同任务和模式的嵌入生成:
密集文本嵌入 (Dense text embeddings)
用户可以通过如下代码生成密集文本嵌入:
from fastembed import TextEmbedding
model = TextEmbedding(model_name="BAAI/bge-small-en-v1.5")
embeddings = list(model.embed(documents))
稀疏文本嵌入 (Sparse text embeddings)
from fastembed import SparseTextEmbedding
model = SparseTextEmbedding(model_name="prithivida/Splade_PP_en_v1")
embeddings = list(model.embed(documents))
晚期交互模型 (Late interaction models)
from fastembed import LateInteractionTextEmbedding
model = LateInteractionTextEmbedding(model_name="colbert-ir/colbertv2.0")
embeddings = list(model.embed(documents))
图像嵌入 (Image embeddings)
FastEmbed 还支持图像嵌入:
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))
Rerankers
from typing import List
from fastembed.rerank.cross_encoder import TextCrossEncoder
query = "Who is maintaining Qdrant?"
documents: List[str] = [
"FastEmbed 是构建得比其他嵌入库快且轻,比如 Transformers, Sentence-Transformers 等。",
"fastembed 由 Qdrant 支持并维护。",
]
encoder = TextCrossEncoder(model_name="Xenova/ms-marco-MiniLM-L-6-v2")
scores = list(encoder.rerank(query, documents))
GPU 加速
FastEmbed 支持在 GPU 设备上运行,只需安装 fastembed-gpu
包:
pip install fastembed-gpu
与 Qdrant 结合使用
FastEmbed 可以与 Qdrant 配合使用,安装方法如下:
pip install qdrant-client[fastembed]
from qdrant_client import QdrantClient
client = QdrantClient("localhost", port=6333)
docs = ["Qdrant 有 Langchain 集成", "Qdrant 也有 Llama Index 集成"]
metadata = [
{"source": "Langchain-docs"},
{"source": "Llama-index-docs"},
]
ids = [42, 2]
client.add(
collection_name="demo_collection",
documents=docs,
metadata=metadata,
ids=ids
)
search_result = client.query(
collection_name="demo_collection",
query_text="This is a query document"
)
print(search_result)
FastEmbed 是一个强大的工具,旨在以更快的速度和更高的准确性生成嵌入,适合各种文本和图像处理任务,并支持在不同的计算环境中使用。