model2vec
将 Sentence Transformer 模型蒸馏为指尖大小的静态嵌入向量,速度提升500倍,仅依赖NumPy的极轻量方案
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将 Sentence Transformer 模型蒸馏为指尖大小的静态嵌入向量,速度提升500倍,仅依赖NumPy的极轻量方案
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景: 你是一名独立开发者,正在构建一个本地化问答系统。你需要在用户的树莓派上运行语义搜索——但传统 Sentence Transformer 模型光加载就要占用 500MB 内存,推理一次要好几秒,体验极差。Model2Vec 就是来解决这个问题的: 它能把一个几百 MB 的 Sentence Transformer 模型,压缩到只有 8MB 左右,速度提升最高 500 倍,而性能损失几乎可以忽略。这不是模型量化,不是剪枝,而是一种全新的蒸馏-静态化范式。
传统词嵌入模型(如 GloVe、BPEmb)的问题在于: 它们是静态的——每个词只有一个固定向量,无法处理一词多义。BERT 等上下文模型解决了这个问题,但代价是推理速度极慢,无法在资源受限设备上实时运行。
Model2Vec 的核心创新是绕过 Transformer 的推理过程。它将一个训练好的 Sentence Transformer 模型的全部 token embedding(通常是 3 万~5 万个 token)一次性提取出来,然后用 Tokenlearn 算法在这个巨大的 embedding 矩阵上做子集选择——最终只保留最具代表性的几千个 token embedding,其余 token 通过 KNN 映射到最近的代表 token 上。
这样做的好处是: 推理时不再需要 Transformer 的多层非线性计算,直接做一次简单的查表 + 加权求和即可。模型从「神经网络」变成了「一个浮点数矩阵」,参数量从数亿级别骤降到几百万级别,但语义表示能力依然强大。
图1: Model2Vec 官方 Logo — 小而强大的静态嵌入向量方案
Model2Vec 在 MTEB(Massive Text Embedding Benchmark)标准测试集上进行了全面评估。结果显示,potion-base-32M 模型达到了当前全球最强的静态嵌入性能,超越了 GloVe、BPEmb 等经典方案:
图2: MTEB 平均分数 vs 推理速度气泡图。气泡大小代表模型参数量,Model2Vec 系列在保持竞争力的同时,速度比传统模型快 100~500 倍
具体数字:
图3: MTEB 各任务类型分数对比,Model2Vec 在分类、聚类、语义相似等任务上全面领先 BPEmb 和 GloVe
2025 年 5 月,MinishLab 发布了 potion-multilingual-128M,基于 BGE-M3 模型蒸馏而来,支持 101 种语言的文本嵌入。这意味着开发者可以用同一个模型处理中文、阿拉伯语、日语、西班牙语等混合内容,特别适合多语言 RAG 系统、跨语言信息检索等场景。这是目前全球性能最好的多语言静态嵌入模型。
Model2Vec 的设计哲学是极简主义。基础包只依赖 numpy,安装后只需三行代码即可完成嵌入:
from model2vec import StaticModel
model = StaticModel.from_pretrained("minishlab/potion-base-32M")
embeddings = model.encode(["Hello world!", "你好世界!"])
此外,Model2Vec 还深度集成到主流 AI 框架中:
SentenceTransformer 后端加载,无需修改代码embeddings 接口无缝接入 LangChain RAG 流水线from_pretrained 一键加载,模型卡片完整Model2Vec 的另一大亮点是零数据蒸馏。用户不需要准备任何训练数据集,只需一行代码,就能在 CPU 上用 30 秒将任何 HuggingFace 上的 Sentence Transformer 模型蒸馏成 Model2Vec 格式:
from model2vec.distill import distill
m2v_model = distill(model_name="BAAI/bge-base-en-v1.5")
m2v_model.save_pretrained("my_model2vec")
蒸馏过程完全离线,不依赖外部数据集,非常适合企业内部模型私有化部署场景。
图4: 蒸馏速度 vs 最终性能,验证了 Tokenlearn 算法在效率和精度上的双重优势
除了蒸馏,Model2Vec 还支持在静态嵌入之上微调分类头。用户只需要准备文本和标签数据,就能快速训练一个轻量级文本分类器:
from model2vec.train import StaticModelForClassification
classifier = StaticModelForClassification.from_pretrained("minishlab/potion-base-32M")
classifier.fit(train_texts, train_labels)
report = classifier.evaluate(test_texts, test_labels)
这种方式结合了静态嵌入的速度优势和微调任务的灵活性,适合产品评论分类、情感分析、垃圾邮件检测等垂直场景。
model.onnx 文件发出安全警告,MinishLab 回应称是误报(模型 forward 路径的特殊性与 ONNX 导出方式导致误判),相关转换代码已开源Model2Vec 的代码库结构清晰,核心模块如下:
model2vec/model.py — StaticModel 核心类,实现 encode() 和 encode_as_sequence()model2vec/distill/ — 蒸馏模块,将 Sentence Transformer 转换为静态模型model2vec/train/ — 分类微调模块,基于静态嵌入构建下游分类器model2vec/inference/ — 推理加速模块,支持量化(int8)和维度压缩model2vec/tokenizer/ — 自定义 Tokenizer,支持 BPE 和 Unigram 模式model2vec/persistence/ — 模型持久化,支持 HuggingFace Hub 读写model2vec/vocabulary_quantization.py — 词汇表量化,减少 50% 模型体积技术栈方面: 核心推理仅依赖 numpy,蒸馏可选 torch 和 transformers,微调可选 lightning 和 scikit-learn,整体依赖极简,符合小而美的设计理念。
Model2Vec 的出现代表了一个重要趋势:嵌入式 AI 的民主化。过去,部署高质量语义搜索意味着必须使用云端 API 或大型 Transformer 模型,门槛高、成本高、延迟高。Model2Vec 将这个门槛拉低到「一台树莓派就能跑」的水平,让边缘计算、本地隐私保护、低成本 SaaS 等场景成为可能。
MinishLab 团队由 Stephan Tulkens 和 Thomas van Dongen 两人组成,专注于 NLP 轻量化。他们此前还开发了 Semble、SemHash 等嵌入相关项目,团队虽小但技术积累深厚。随着 potion 模型在 MTEB 榜单上持续领跑,Model2Vec 有望成为本地 AI 嵌入的事实标准。