Model2Vec:快速、高效的静态嵌入模型
在当今这个信息爆炸的时代,自然语言处理(NLP)技术的应用越来越广泛,从文本分类到信息检索,再到构建复杂的问答系统,模型的性能和效率至关重要。Model2Vec 就是这样一个技术,它将句子转换器(Sentence Transformer)转换为小巧、快速且功能强大的静态模型,为各种 NLP 任务提供了全新的解决方案。
快速入门
如果您已经熟悉了 NLP 和模型部署的基本概念,那么只需几分钟,您就可以开始使用 Model2Vec。以下是安装和使用 Model2Vec 的基本步骤:
pip install model2vec
一旦安装完成,您可以从 HuggingFace hub 加载预先训练好的模型,并立即开始创建嵌入。例如,使用 potion-base-8M 模型:
from model2vec import StaticModel
# 从 HuggingFace hub 加载模型
model = StaticModel.from_pretrained("minishlab/potion-base-8M")
# 创建嵌入
embeddings = model.encode(["It's dangerous to go alone!", "It's a secret to everybody."])
# 创建标记嵌入序列
token_embeddings = model.encode_as_sequence(["It's dangerous to go alone!", "It's a secret to everybody."])
如果您想从头开始蒸馏自己的 Model2Vec 模型,可以按照以下步骤操作:
pip install model2vec[distill]
然后,您可以使用以下代码在 CPU 上快速蒸馏模型:
from model2vec.distill import distill
# 从句子转换器模型中提取
m2v_model = distill(model_name="BAAI/bge-base-en-v1.5", pca_dims=256)
# 保存模型
m2v_model.save_pretrained("m2v_model")
在蒸馏之后,您还可以在提取的模型或预先训练的模型上微调您自己的分类模型:
pip install model2vec[training]
以下是如何进行模型微调的示例:
import numpy as np
from datasets import load_dataset
from model2vec.train import StaticModelForClassification
# 从预先训练的模型初始化分类器
classifier = StaticModelForClassification.from_pretrained(model_name="minishlab/potion-base-32M")
# 加载数据集
ds = load_dataset("setfit/subj")
# 在文本(X)和标签(y)上训练分类器
classifier.fit(ds["train"]["text"], ds["train"]["label"])
# 评估分类器
classification_report = classifier.evaluate(ds["test"]["text"], ds["test"]["label"])
更新与公告
Model2Vec 团队一直在不断更新和改进模型,以提供更好的性能和更丰富的功能。以下是一些重要的更新:
-
2024 年 12 月 2 日:发布了 Model2Vec 训练功能,允许您在 Model2Vec 模型上微调自己的分类模型。相关文档和结果可以在训练文档和结果部分找到。 -
2024 年 1 月 30 日:发布了两个新模型:potion-base-32M 和 potion-retrieval-32M。potion-base-32M 是我们迄今为止性能最高的模型,采用了更大的词汇量和更高的维度。potion-retrieval-32M 是 potion-base-32M 的微调版本,针对检索任务进行了优化,是目前表现最好的静态检索模型。 -
2024 年 10 月 30 日:发布了三个新模型:potion-base-8M、potion-base-4M 和 potion-base-2M。这些模型的训练采用了 Tokenlearn 方法。对于任何使用旧版英文 M2V 模型的用户,我们建议切换到这些新模型,因为它们在所有任务上的表现都更好。
Model2Vec 的主要特点
-
卓越的性能:Model2Vec 模型在我们测试的所有任务中都大大超过了其他静态嵌入模型(如 GLoVe 和 BPEmb),测试结果可以在结果部分查看。 -
小巧的体积:Model2Vec 将句子转换器模型的大小减小了最多 50 倍。我们最好的模型在磁盘上仅约 30MB,而最小的模型只有约 8MB(使其成为 MTEB 上最小的模型)。 -
轻量级依赖:基础软件包的主要依赖只有 numpy。 -
闪电般的推理速度:在 CPU 上比原始模型快 500 倍。 -
快速、无需数据集的蒸馏:在 CPU 上只需 30 秒即可完成自己的模型的蒸馏,无需数据集。 -
微调:可以在 Model2Vec 模型上微调自己的分类模型。 -
与多个流行库集成:Model2Vec 直接集成到诸如 Sentence Transformers 和 LangChain 等流行库中。有关更多信息,请参阅我们的集成文档。 -
与 HuggingFace hub 紧密集成:可以使用熟悉的 from_pretrained 和 push_to_hub 方法轻松地在 HuggingFace hub 上共享和加载模型。我们的模型可以在这里找到。
Model2Vec 是什么?
Model2Vec 创建了一个小而强大的模型,在我们发现的所有任务中都大大超过了其他静态嵌入模型的性能,同时比传统的静态嵌入模型(如 GloVe)创建得更快。和 BPEmb 一样,它可以创建子词嵌入,但性能更好。蒸馏不需要任何数据,只需要词汇表和模型。
核心思想是将词汇表通过句子转换器模型进行前向传递,为各个标记创建静态嵌入。在此之后,我们进行了一些后处理步骤以生成我们的最佳模型。有关更深入的了解,请参阅以下资源:
-
我们的初始 Model2Vec 博客文章。注意,尽管这篇文章很好地概述了核心思想,但我们已经对其进行了许多实质性的改进。 -
我们的 Tokenlearn 博客文章。这篇文章描述了我们用于训练 potion 模型的 Tokenlearn 方法。 -
我们的官方文档。这份文件提供了 Model2Vec 如何工作的高级概述。
文档
我们的官方文档可以在这里找到。其中包含以下内容:
-
使用文档:提供关于如何使用 Model2Vec 的技术概述。 -
集成文档:提供在各种下游库中使用 Model2Vec 的示例。 -
Model2Vec 技术文档:提供 Model2Vec 工作原理的高级概述。
模型列表
我们提供了许多可以直接使用的模型。这些模型在 HuggingFace hub 上可用,并且可以使用 from_pretrained 方法加载。以下是部分模型列表:
模型 | 语言 | 句子转换器 | 参数 | 任务 |
---|---|---|---|---|
potion-base-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 | 通用 |
potion-retrieval-32M | 英文 | bge-base-en-v1.5 | 32.3M | 检索 |
M2V_multilingual_output | 多语言 | LaBSE | 471M | 通用 |
结果展示
我们对 Model2Vec 模型的性能进行了广泛的实验评估。结果记录在结果文件夹中。结果分为以下几个部分:
-
MTEB 结果:MTEB(大规模文本嵌入基准)是一个用于评估文本嵌入质量的基准测试,涵盖了多种 NLP 任务,如文本分类、聚类和信息检索等。Model2Vec 模型在 MTEB 测试中表现优异,特别是在文本分类和信息检索任务上,其性能远超其他静态嵌入模型。 -
训练结果:展示了 Model2Vec 在不同训练条件下的性能表现,包括不同参数设置、训练数据集大小等对模型性能的影响。这些结果有助于用户了解如何根据自己的需求选择合适的模型和训练策略。 -
消融实验:通过移除或修改 Model2Vec 的某些关键组件,研究这些组件对模型性能的影响。例如,我们发现模型的后处理步骤对最终性能有显著影响,这表明这些步骤在生成高质量嵌入方面的重要性。
总结
Model2Vec 是一种将句子转换器转换为小型静态模型的技术,它在保持高性能的同时,大幅减小了模型的体积并提高了推理速度。无论您是希望快速部署 NLP 应用,还是需要在资源受限的环境中运行模型,Model2Vec 都是一个理想的选择。通过其简单的安装和使用过程,以及与多个流行库的集成,Model2Vec 为广泛的 NLP 任务提供了强大的支持。随着 Model2Vec 的不断发展和更新,我们可以期待它在未来的 NLP 领域中发挥更大的作用。