EmbedAnything 使用教程
1. 项目介绍
EmbedAnything 是一个用 Rust 语言编写的轻量级、多模态的嵌入管道项目。它支持从文本、图像、音频、PDF、网页等多种媒体格式生成嵌入向量,并且能够高效地将这些向量流式传输到向量数据库中。该项目支持多种嵌入模型,包括稠密、稀疏、ONNX 和晚期交互嵌入,适用于广泛的场景。
2. 项目快速启动
安装
首先,您需要安装 EmbedAnything。可以通过以下命令使用 pip 进行安装:
pip install embed-anything
如果您需要支持 GPU 以及特殊模型,如 ColPali,请使用以下命令安装:
pip install embed-anything-gpu
使用
本地嵌入使用
要使用本地的嵌入模型,目前支持 Bert 和 Jina 模型。以下是一个使用 Bert 模型嵌入 PDF 文件的例子:
from embed_anything import EmbeddingModel
# 加载 Bert 模型
model = EmbeddingModel.from_pretrained_local(
WhichModel.Bert,
model_id="Hugging_face_link"
)
# 嵌入 PDF 文件
data = embed_anything.embed_file(
"test_files/test.pdf",
embedder=model
)
多模态嵌入使用
对于多模态嵌入,目前支持 CLIP 模型。以下是一个使用 CLIP 模型嵌入图片文件夹的例子:
import embed_anything
from embed_anything import EmbedData
# 加载 CLIP 模型
model = embed_anything.EmbeddingModel.from_pretrained_local(
embed_anything.WhichModel.Clip,
model_id="openai/clip-vit-base-patch16"
)
# 嵌入图片文件夹
data: list[EmbedData] = embed_anything.embed_directory(
"test_files",
embedder=model
)
# 计算嵌入向量与查询的相似度
embeddings = np.array([data.embedding for data in data])
query = ["Photo of a monkey?"]
query_embedding = np.array(embed_anything.embed_query(query, embedder=model)[0].embedding)
similarities = np.dot(embeddings, query_embedding)
max_index = np.argmax(similarities)
# 显示最相似的图片
Image.open(data[max_index].text).show()
3. 应用案例和最佳实践
语义分块
在处理大型文件时,可以采用语义分块策略。以下是如何配置和使用语义分块:
# 配置语义分块
config = TextEmbedConfig(
chunk_size=1000,
batch_size=32,
splitting_strategy="semantic",
semantic_encoder=semantic_encoder
)
# 嵌入文件
data = model.embed_file(
"test_files/attention.pdf",
config=config
)
晚期分块
晚期分块是一种在分块过程中延迟决策的分块策略。以下是如何配置和使用晚期分块:
# 配置晚期分块
config = TextEmbedConfig(
chunk_size=1000,
batch_size=8,
splitting_strategy="sentence",
late_chunking=True
)
# 嵌入文件
data = model.embed_file(
"test_files/attention.pdf",
config=config
)
4. 典型生态项目
EmbedAnything 可以与多种生态项目集成,例如:
- Elastic: 使用 EmbedAnything 生成文档的嵌入向量,然后在 ElasticSearch 中进行搜索和推荐。
- Weaviate: 与 Weaviate 向量数据库集成,实现快速的向量搜索和检索。
- SingleStore: 利用 SingleStore 数据库的高性能,存储和管理 EmbedAnything 生成的嵌入数据。
通过以上教程,您应该能够开始使用 EmbedAnything 并将其集成到您的项目中。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考