3 个不稳定版本

0.2.1 2024年8月9日
0.1.23 2024年7月30日
0.1.21 2024年7月27日

#97 in 机器学习

Download history 229/week @ 2024-07-27 74/week @ 2024-08-03 39/week @ 2024-08-10

342 次每月下载

Apache-2.0GPL-3.0 许可证

140KB
3K SLoC

Downloads Open in Colab license package discord

使用在Rust中构建的极简且快速的框架来提升您的嵌入管道 🦀
探索文档

观看演示 · 示例 · 请求功能 . 音频空间搜索

EmbedAnything是一个极简且高性能、轻量级、闪电般快速的多源、多模态本地嵌入管道,由Rust构建。无论您是处理文本、图像、音频、PDF、网站或其他媒体,EmbedAnything都能简化从各种来源生成嵌入并将其存储在向量数据库中的过程。

目录
  1. 关于项目
  2. 入门
  3. 用法
  4. 路线图
  5. 贡献
  6. 如何添加自定义模型和块大小

🚀 主要功能

  • 本地嵌入 : 与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"的问题来快速开始贡献。如果您认为您可以做出贡献,请对问题进行评论,我们将将其分配给您。

    要设置您的开发环境,请按照以下步骤操作

    1. 从dev分支中分叉存储库,我们不允许直接向main分支贡献

    贡献指南

    🔍 报告错误

    1. 标题清晰地描述问题,并带有相关标签
    2. 提供问题的详细描述以及重现问题的必要步骤。
    3. 包括任何相关的日志、截图或其他有助于支持问题的信息。

    依赖关系

    ~51-68MB
    ~1M SLoC