3 个不稳定版本
0.2.1 | 2024年8月9日 |
---|---|
0.1.23 | 2024年7月30日 |
0.1.21 | 2024年7月27日 |
#97 in 机器学习
342 次每月下载
140KB
3K SLoC
EmbedAnything是一个极简且高性能、轻量级、闪电般快速的多源、多模态本地嵌入管道,由Rust构建。无论您是处理文本、图像、音频、PDF、网站或其他媒体,EmbedAnything都能简化从各种来源生成嵌入并将其存储在向量数据库中的过程。
🚀 主要功能
- 本地嵌入 : 与BERT和JINA等本地嵌入模型协同工作
- 云嵌入模型:支持OpenAI,即将支持Mistral和Cohere。
- 多模态:与PDF、txt、md等文本源以及JPG图像和.WAV音频协同工作
- Rust:所有文件处理都在Rust中完成,以提高速度和效率
- Candle:我们还通过Candle处理了硬件加速
- Python接口:作为Python库打包,以便无缝集成到现有项目中。
- 可扩展性:将嵌入存储在向量数据库中,以便轻松检索和可扩展。
🦀 为什么选择EmbedAnything
➡️更快执行
➡️内存管理:Rust同时执行内存管理,防止其他语言可能遇到的内存泄漏和崩溃
➡️真正的多线程
➡️本地和高效地运行语言模型或嵌入模型
➡️Candle允许在具有CUDA功能的GPU上直接进行推理。
➡️减少EmbedAnything的内存使用。
⭐ 支持的模型
我们支持一系列模型,这些模型可以通过Candle支持。我们提供了一套经过测试的模型,但如果您有特定的用例,请在问题中说明。
如何添加自定义模型和Chunk大小。
jina_config = JinaConfig(
model_id="Custom link given below", revision="main", chunk_size=100
)
embed_config = EmbedConfig(jina=jina_config)
模型 | 自定义链接 |
---|---|
Jina | jinaai/jina-embeddings-v2-base-en |
jinaai/jina-embeddings-v2-small-en | |
Bert | sentence-transformers/all-MiniLM-L6-v2 |
sentence-transformers/all-MiniLM-L12-v2 | |
sentence-transformers/paraphrase-MiniLM-L6-v2 | |
Clip | openai/clip-vit-base-patch32 |
Whisper | 大多数OpenAI Whisper都由huggingface支持。 |
🧑🚀 开始使用
💚 安装
pip install embed-任意内容
用法
要使用本地嵌入:我们支持Bert和Jina
import embed_anything
data = embed_anything.embed_file("file_path.pdf", embeder= "Bert")
embeddings = np.array([data.embedding for data in data])
对于多模态嵌入:我们支持CLIP
需求目录,包含您要搜索的图片,例如我们测试的files包含猫、狗等的图片
import embed_anything
data = embed_anything.embed_directory("directory_path", embeder= "Clip")
embeddings = np.array([data.embedding for data in data])
query = ["photo of a dog"]
query_embedding = np.array(embed_anything.embed_query(query, embeder= "Clip")[0].embedding)
similarities = np.dot(embeddings, query_embedding)
max_index = np.argmax(similarities)
Image.open(data[max_index].text).show()
使用Whisper进行音频嵌入
要求:.wav音频文件。
import embed_anything
from embed_anything import JinaConfig, EmbedConfig, AudioDecoderConfig
import time
start_time = time.time()
# choose any whisper or distilwhisper model from https://hugging-face.cn/distil-whisper or https://hugging-face.cn/collections/openai/whisper-release-6501bba2cf999715fd953013
audio_decoder_config = AudioDecoderConfig(
decoder_model_id="openai/whisper-tiny.en",
decoder_revision="main",
model_type="tiny-en",
quantized=False,
)
jina_config = JinaConfig(
model_id="jinaai/jina-embeddings-v2-small-en", revision="main", chunk_size=100
)
config = EmbedConfig(jina=jina_config, audio_decoder=audio_decoder_config)
data = embed_anything.embed_file(
"test_files/audio/samples_hp0.wav", embeder="Audio", config=config
)
print(data[0].metadata)
end_time = time.time()
print("Time taken: ", end_time - start_time)
🚧 为EmbedAnything做出贡献
首先,感谢您抽出时间为此项目做出贡献。我们非常珍视您的贡献,无论是错误报告、功能建议还是pull请求。在这个项目中,您的时间和精力是非常宝贵的。🚀
本文件提供了指南和最佳实践,以帮助您有效地做出贡献。这些旨在作为指南,而非严格规则。我们鼓励您根据自己的最佳判断,并通过pull请求提出对本文档的更改。
路线图
EmbedAnything的目标之一是允许AI工程师轻松地在典型文件和文档上使用最先进的嵌入模型。在这方面已经取得了许多成果,这是我们目前支持的格式,还有一些需要完成。
✅ Markdown、PDF和网站
✅ WAV文件
✅ JPG、PNG、webp
✅ 添加Whisper进行音频嵌入
✅ 自定义模型上传,Candle中可用的任何内容
✅ 自定义块大小
✅ Pinecone适配器,可以直接将其保存在上面。
✅ 零样本应用
尚未完成
☑️ 向量数据库:添加与任何向量数据库集成的功能
☑️ 图嵌入--深度优先构建deepwalk嵌入和word2vec
✔️ 行为准则
请阅读我们的[行为准则],了解我们对该项目中所有参与者的期望。通过参与,您同意遵守我们的行为准则。
快速开始
您可以通过在[问题部分]搜索带有标签"Good First Issue"或"Help Needed"的问题来快速开始贡献。如果您认为您可以做出贡献,请对问题进行评论,我们将将其分配给您。
要设置您的开发环境,请按照以下步骤操作
- 从dev分支中分叉存储库,我们不允许直接向main分支贡献
贡献指南
🔍 报告错误
- 标题清晰地描述问题,并带有相关标签
- 提供问题的详细描述以及重现问题的必要步骤。
- 包括任何相关的日志、截图或其他有助于支持问题的信息。
依赖关系
~51-68MB
~1M SLoC