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 机器学习
每月下载量 2,995
用于 7 个crate(直接使用6个)
390KB
2K SLoC
🍕 特点
- 支持同步使用。不依赖Tokio。
- 使用@pykeio/ort进行高效ONNX推理。
- 使用@huggingface/tokenizers进行快速编码。
- 支持使用@rayon-rs/rayon进行并行化批嵌入生成。
默认模型是Flag Embedding,它是MTEB排行榜上的第一名。
🔍 不是在寻找Rust?
- 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
点击查看完整列表
- BAAI/bge-large-en-v1.5
- BAAI/bge-small-zh-v1.5
- BAAI/bge-base-en-v1.5
- sentence-transformers/all-MiniLM-L12-v2
- sentence-transformers/paraphrase-MiniLM-L12-v2
- sentence-transformers/paraphrase-multilingual-mpnet-base-v2
- nomic-ai/nomic-embed-text-v1
- nomic-ai/nomic-embed-text-v1.5
- intfloat/multilingual-e5-small
- intfloat/multilingual-e5-base
- intfloat/multilingual-e5-large
- Alibaba-NLP/gte-base-en-v1.5
- Alibaba-NLP/gte-large-en-v1.5
稀疏文本嵌入
图像嵌入
重排序
🚀 安装
在您的项目目录中运行以下命令
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 快速是因为
- 量化模型权重
- ONNX Runtime,允许在 CPU、GPU 和其他专用运行时上进行推理
为什么轻量?
- 没有通过 Huggingface Transformers 隐藏的依赖
为什么准确?
- 优于 OpenAI Ada-002
- 在嵌入排行榜上名列前茅,例如 MTEB
📄 许可证
Apache 2.0 © 2024
依赖项
~18–30MB
~515K SLoC