#embedding #model #vector #retrieval #generate #qdrant-fastembed #reranking

fastembed

Rust对https://github.com/qdrant/fastembed的实现

48个稳定版本 (4个主要版本)

4.0.0 2024年8月18日
3.14.1 2024年8月5日
3.12.0 2024年7月30日
3.3.0 2024年3月28日
0.6.0 2023年10月2日

#5 in 机器学习

Download history 495/week @ 2024-05-03 432/week @ 2024-05-10 692/week @ 2024-05-17 518/week @ 2024-05-24 546/week @ 2024-05-31 353/week @ 2024-06-07 472/week @ 2024-06-14 858/week @ 2024-06-21 612/week @ 2024-06-28 715/week @ 2024-07-05 780/week @ 2024-07-12 468/week @ 2024-07-19 1078/week @ 2024-07-26 863/week @ 2024-08-02 518/week @ 2024-08-09 448/week @ 2024-08-16

每月下载量 2,995
用于 7 个crate(直接使用6个)

Apache-2.0

390KB
2K SLoC

🍕 特点

默认模型是Flag Embedding,它是MTEB排行榜上的第一名。

🔍 不是在寻找Rust?

🤖 模型

文本嵌入

点击查看完整列表

稀疏文本嵌入

图像嵌入

重排序

🚀 安装

在您的项目目录中运行以下命令

cargo add fastembed

或将以下行添加到您的 Cargo.toml 文件中

[dependencies]
fastembed = "3"

📖 使用方法

文本嵌入

use fastembed::{TextEmbedding, InitOptions, EmbeddingModel};

// With default InitOptions
let model = TextEmbedding::try_new(Default::default())?;

// With custom InitOptions
let model = TextEmbedding::try_new(
        InitOptions::new(EmbeddingModel::AllMiniLML6V2).with_show_download_progress(true),
    )?;

let documents = vec![
    "passage: Hello, World!",
    "query: Hello, World!",
    "passage: This is an example passage.",
    // You can leave out the prefix but it's recommended
    "fastembed-rs is licensed under Apache  2.0"
    ];

 // Generate embeddings with the default batch size, 256
 let embeddings = model.embed(documents, None)?;

 println!("Embeddings length: {}", embeddings.len()); // -> Embeddings length: 4
 println!("Embedding dimension: {}", embeddings[0].len()); // -> Embedding dimension: 384

图像嵌入

use fastembed::{ImageEmbedding, ImageInitOptions, ImageEmbeddingModel};

// With default InitOptions
let model = ImageEmbedding::try_new(Default::default())?;

// With custom InitOptions
let model = ImageEmbedding::try_new(
    ImageInitOptions::new(ImageEmbeddingModel::ClipVitB32).with_show_download_progress(true),
)?;

let images = vec!["assets/image_0.png", "assets/image_1.png"];

// Generate embeddings with the default batch size, 256
let embeddings = model.embed(images, None)?;

println!("Embeddings length: {}", embeddings.len()); // -> Embeddings length: 2
println!("Embedding dimension: {}", embeddings[0].len()); // -> Embedding dimension: 512

候选重排序

use fastembed::{TextRerank, RerankInitOptions, RerankerModel};

let model = TextRerank::try_new(
    RerankInitOptions::new(RerankerModel::BGERerankerBase).with_show_download_progress(true),
)?;

let documents = vec![
    "hi",
    "The giant panda (Ailuropoda melanoleuca), sometimes called a panda bear, is a bear species endemic to China.",
    "panda is animal",
    "i dont know",
    "kind of mammal",
];

// Rerank with the default batch size
let results = model.rerank("what is panda?", documents, true, None)?;
println!("Rerank result: {:?}", results);

或者,可以通过相应结构的 try_new_from_user_defined(...) 方法使用本地模型文件进行推理。

🚒 内部机制

为什么速度快?

我们有必要为 FastEmbed 中的“快速”做出解释。FastEmbed 快速是因为

  1. 量化模型权重
  2. ONNX Runtime,允许在 CPU、GPU 和其他专用运行时上进行推理

为什么轻量?

  1. 没有通过 Huggingface Transformers 隐藏的依赖

为什么准确?

  1. 优于 OpenAI Ada-002
  2. 在嵌入排行榜上名列前茅,例如 MTEB

📄 许可证

Apache 2.0 © 2024

依赖项

~18–30MB
~515K SLoC