Model2Vec: 极速静态嵌入
Model2Vec 是一种新技术,它可以将任何Sentence Transformer转换为一个小型静态词嵌入模型,但在现代基准测试中却能提供显著更优的性能。
如果您曾经构建过语义搜索系统、RAG 管道或文本分类工作流程,您可能熟悉一些常见问题。
- Sentence Transformer 功能强大,但体积庞大。
- 它们需要 GPU 才能快速推理。
- 索引数百万份文档需要时间和内存。
- 在边缘设备或低资源环境中部署它们非常困难。
现在想象一下:
- 模型体积缩小 50 倍
- CPU 运行速度提升 500 倍
- 无需 GPU
- 生成最先进的静态词嵌入
- 支持零预索引的即时向量搜索
- 无需任何训练数据集,即可在 30 秒内完成提炼
这正是 Model2Vec 的优势所在。而且它是 100% 开源的。
1、什么是 Model2Vec?
Model2Vec 是一种新技术,它可以将任何Sentence Transformer转换为一个小型静态词嵌入模型——比 GloVe、BPEmb 或其他传统静态词嵌入模型小得多,但在现代基准测试中却能提供显著更优的性能。
Model2Vec 的核心步骤如下:
- 接收一个词汇表
- 将其输入句子转换器
- 提取静态词嵌入
- 应用多个后处理步骤
- 生成一个小型、快速、仅用于推理的模型
无需训练数据集。无需 GPU。无需漫长的训练过程。
只需 30 秒即可在 CPU 上运行。
2、为何再次使用静态嵌入?
静态嵌入(例如 Word2Vec 和 GloVe)曾经是标准,但 Transformer 模型在语义任务中已经超越了它们。
Model2Vec 能够恢复静态嵌入,并达到 Transformer 级别的质量。
您可以将其视为两全其美:
- Transformer 的性能
- 静态模型的速度和简洁性
这使得 Model2Vec 特别适用于:
- 实时搜索
- 大规模向量检索
- 轻量级 RAG(随机无序)
- 离线或边缘推理
- 纯 CPU 环境
- 可扩展的多租户系统
- 快速分类微调
3、性能概览
| 特性 | Model2Vec |
|---|---|
| 模型大小 | 最多缩小 50 倍 |
| 推理速度 | 速度提升高达 500 倍 |
| 依赖项 | 仅支持 NumPy |
| 数据蒸馏 | 30 秒,无需数据集 |
| 搜索 | 即时完成,无需索引 |
| 微调 | 支持 |
所有模型均可在 HuggingFace Hub 上找到。
4、开始:30 秒内学会使用 Model2Vec
安装基础包:
pip install model2vec加载预训练模型:
from model2vec import StaticModel
# Load the potion-base-32M model
model = StaticModel.from_pretrained("minishlab/potion-base-32M")
# Make embeddings
embeddings = model.encode([
"It's dangerous to go alone!",
"It's a secret to everybody."
])
# Token embeddings if needed
token_embeddings = model.encode_as_sequence([
"It's dangerous to go alone!",
"It's a secret to everybody."
])就是这样。无需 GPU。没有繁重的依赖项。
现在,您可以以闪电般的速度生成词嵌入。
5、30 秒内提炼您自己的模型
想转换您现有的Sentence Transformer吗?
安装蒸馏插件:
pip install model2vec[distill]
蒸馏模型:
from model2vec.distill import distill
# Distill from BAAI/bge-base-en-v1.5
m2v_model = distill(model_name="BAAI/bge-base-en-v1.5")
# Save the result
m2v_model.save_pretrained("m2v_model")Model2Vec 的工作原理:
- 构建词汇表
- 将其前向传递给模型
- 提取词元级嵌入
- 应用特殊的后处理
- 生成紧凑的静态模型
无需数据集。无需调整超参数。
6、在此基础上微调分类器
Model2Vec 还支持下游训练。
安装训练扩展:
pip install model2vec[train]微调分类器:
import numpy as np
from datasets import load_dataset
from model2vec.train import StaticModelForClassification
# Load a pre-trained model
classifier = StaticModelForClassification.from_pretrained(
model_name="minishlab/potion-base-32M"
)
# Load a dataset (supports single & multi-label)
ds = load_dataset("setfit/subj")
# Train the classifier
classifier.fit(ds["train"]["text"], ds["train"]["label"])
# Evaluate
report = classifier.evaluate(ds["test"]["text"], ds["test"]["label"])
print(report)这样就得到了一个快速、轻量级的分类器,可以部署到任何地方。
7、集成无处不在
Model2Vec 已集成到以下平台:
- Sentence Transformers
- LangChain
- HuggingFace Hub(来自预训练,推送到中心)
如果您的工作流程使用这些工具,Model2Vec 可以无缝集成。
8、Model2Vec 的重要性
这项技术可能会改变开发者构建以下应用的方式:
- 搜索引擎
- RAG 系统
- 边缘 AI 应用
- 大规模嵌入管道
- 多语言检索系统
- CPU 优先的 AI 产品
现在,我们无需到处部署大型 Sentence Transformer 模型,而是可以:
- 一次蒸馏
- 部署一个小型模型
- 实现接近 Transformer 的性能
- 在 CPU 上每秒运行数百万个嵌入
这是效率工程的极致体现。
9、可用模型
| 模型 | 语言 | Transformer 源 | 参数 | 任务 |
|---|---|---|---|---|
| potion-base-32M | 英语 | bge-base-en-v1.5 | 32.3M | 通用 |
| potion-multilingual-128M | 多语言 | bge-m3 | 128M | 通用 |
| potion-retrieval-32M | 英语 | bge-base-en-v1.5 | 32.3M | 检索 |
| potion-base-8M | 英语 | bge-base-en-v1.5 | 7.5M | 通用 |
| potion-base-4M | 英语 | bge-base-en-v1.5 | 3.7M | 通用 |
| potion-base-2M | 英语 | bge-base-en-v1.5 | 1.8M | 通用 |
所有模型均可在 HuggingFace 上找到。
10、结束语
Model2Vec 为词嵌入带来了全新的视角:
- 静态词嵌入回归
- 性能媲美 Transformer,但开销却远低于 Transformer
- 速度和压缩率大幅提升
- 生态系统中最简单的蒸馏工作流程
如果您正在使用向量嵌入,Model2Vec 值得您深入了解,甚至值得您采用。
原文链接:Make Sentence Transformers 50× Smaller and 500× Faster with Model2Vec
汇智网翻译整理,转载请标明出处