FastEmbed-rs 项目介绍
FastEmbed-rs 是一个用 Rust 语言实现的快速嵌入生成工具。它旨在为开发者提供高效且强大的嵌入生成解决方案。该项目基于 @qdrant/fastembed,并提供了一系列便利功能,使得在 Rust 生态系统中使用变得更加简单。
🍕 项目功能
- 同步使用支持:无须依赖 Tokio,即可进行同步操作。
- 高效的 ONNX 推理:使用 @pykeio/ort 来提高 ONNX 推理性能。
- 快速编码:采用 @huggingface/tokenizers 以实现快速编码。
- 批量嵌入生成:通过 @rayon-rs/rayon 提供的并行处理支持批量生成嵌入。
默认的模型是 Flag Embedding, 在 MTEB 排行榜上表现非常优异。
🔍 他编程语言实现
如果您正在寻找其他编程语言的实现,也可以查看以下选项:
- Python 🐍: fastembed
- Go 🐳: fastembed-go
- JavaScript 🌐: fastembed-js
🤖 模型支持
文本嵌入
- BAAI/bge-small-en-v1.5 - 默认模型
- sentence-transformers/all-MiniLM-L6-v2
- mixedbread-ai/mxbai-embed-large-v1
点击查看完整模型列表...
稀疏文本嵌入
- prithivida/Splade_PP_en_v1 - 默认模型
图像嵌入
重排序
🚀 安装指南
在项目目录中运行以下命令来添加依赖:
cargo add fastembed
或者可以手动将以下内容添加到 Cargo.toml
:
[dependencies]
fastembed = "3"
📖 使用示例
文本嵌入
以下示例展示如何进行文本嵌入:
use fastembed::{TextEmbedding, InitOptions, EmbeddingModel};
// 使用默认初始化选项
let model = TextEmbedding::try_new(Default::default())?;
// 使用自定义初始化选项
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.",
"fastembed-rs is licensed under Apache 2.0"
];
// 以默认批量大小256生成嵌入
let embeddings = model.embed(documents, None)?;
println!("嵌入数量: {}", embeddings.len());
println!("单个嵌入维度: {}", embeddings[0].len());
图像嵌入
以下示例展示如何进行图像嵌入:
use fastembed::{ImageEmbedding, ImageInitOptions, ImageEmbeddingModel};
// 使用默认初始化选项
let model = ImageEmbedding::try_new(Default::default())?;
// 使用自定义初始化选项
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"];
// 以默认批量大小256生成嵌入
let embeddings = model.embed(images, None)?;
println!("嵌入数量: {}", embeddings.len());
println!("单个嵌入维度: {}", embeddings[0].len());
重新排序
以下示例展示如何进行候选项重新排序:
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",
];
// 使用默认批量大小进行重新排序
let results = model.rerank("what is panda?", documents, true, None)?;
println!("Rerank result: {:?}", results);
🚒 技术详情
为什么快?
FastEmbed-rs 之所以快,是因为:
- 模型权重经过量化处理。
- 使用 ONNX Runtime,可在 CPU、GPU 及其他专用运行时上进行推理。
为什么轻量?
无隐藏依赖,如 Huggingface Transformers。
为什么准确?
比 OpenAI Ada-002 更佳。在嵌入排行榜上名列前茅,如 MTEB。
📄 许可证
FastEmbed-rs 采用 Apache 2.0 许可证授权。