在资源受限的计算领域,一场静悄悄的革命正在发生。Transformer 凭借其强大的功能在排行榜上占据主导地位,而静态嵌入却出人意料地卷土重来,在显著提升速度的同时,质量的牺牲却出奇地小。我们评估了 Qdrant 用户如何从这场复兴中获益,结果令人欣喜。
静态嵌入有何不同?
Transformer 通常被视为实现词 b2b电子邮件清单 向量嵌入的唯一途径。注意力机制的使用有助于捕捉输入词元之间的关系,因此每个词元都会获得一个上下文感知的向量表示,该向量表示不仅由词元本身定义,还由周围的词元定义。基于 Transformer 的模型轻松超越了 word2vec 或 GloVe 等老方法,后者只能为每个单词创建一个向量嵌入。因此,“银行”一词在“河岸”和“金融机构”的语境中具有相同的表示。
静态嵌入 基于 的模型
会在不同的语境中对“bank”一词进行 您应该注意吗 不同的表示。然而,Transformer 也存在成本。它们的计算成本高昂,通常需要大量内存,尽管嵌入模型的参数通常比大型语言模型要少。即便如此,即使是用于推理,GPU 仍然是首选。
不过,静态嵌入仍然很流行!MinishLab于 2024 年 10 月推出了他们的model2vec 技术,在保持令人印象深刻的性能水平的同时,实现了模型大小显著缩小 15 倍,速度提升高达 500 倍。他们的 错失良机 想法 您应该注意吗 是从基于 Transformer 的句子 Transformer 中提取知识,并创建一个速度更快、内存消耗更少的静态嵌入模型。这一引入似乎成为静态嵌入复兴的催化剂,因为我们可以看到静态嵌入甚至被集成到流行的Sentence Transformers库中。Tom Aarsen最近在 Hugging Face 博客上发表的博文揭示了如何使用 Sentence Transformers 训练静态嵌入模型,并以极低的计算成本获得高达85 % 的 Transformer 级质量。该博文还介绍了一种用于英文文本检索的嵌入模型,称为static-retrieval-mrl-en-v1。
Qdrant 中的静态嵌入
从向量数据库的角度来看,静态嵌入与其他嵌入模型并无二致。毕竟,它们是密集向量,您可以直接将它们存储在 Qdrant 集合中。以下是使用该模型的操作方法
import uuid
检索速度不会仅仅因为使用静态嵌
入就变得更快。然而,从数据创建向量的过程会 购买线索 显著加速,而这通常是瓶颈所在。Hugging Face 的博客文章提到,该模型在 CPU 上的运行速度甚至可能比最先进的嵌入模型快 400 倍。
我们没有对编码速度进行任何适当的基准测试,但对BeIRTREC-COVID数据集进行的一项实验表明,我们可以在大约 7.5 分钟内用 Qdrant 对 171K 文档进行编码和完整索引。所有这些都是在一台消费级笔记本电脑上完成的,没有使用 GPU 加速。
静态嵌入的量化
实际上,使用 Matryoshka 嵌入可以加快检索速度,因为static-retrieval-mrl-en-v1 模型在训练时就考虑到了这种技术。然而,这并不是加速搜索的唯一方法。量化方法在我们的用户中非常流行,我们很想知道它们是否可以应用于静态嵌入并获得同样的成功。
我们采用了该模型,并在包含和不包含二进制量化的BeIRstatic-retrieval-mrl-en-v1子集上进行了测试 ,以了解其对检索质量的影响程度。结果非常令人满意,如我们的 NDCG@10 测量结果所示(该指标用于评估搜索结果的排名质量,分数越高表示性能越好):
NDCG@10
数据集 原始向量 二进制量化,无需重新评分
科学事实 0.59348 0.54195
TREC-COVID 0.4428 0.44185
阿尔古阿纳 0.44393 0.42164
NFC语料库
二进制量化确实可以加快检索速度,降低成本,但在 您应该注意吗 某些情况下似乎也不会对检索质量产生太大影响。不过,您应该在自己的数据上仔细验证这一点。如果您是 Qdrant 用户,那么您可以直接在现有集合上启用量化,并测量其对检索质量的影响。
我们所做的所有测试都是使用执行的beir-qdrant,并且可以通过运行项目 repo 上提供的脚本来重现。
谁应该使用静态嵌入?
对于那些希望在应用程序中使用语义搜索,但又负担不起托管标准表示模型的费用,或者由于硬件限制而无法实现的人来说,静态嵌入似乎是一个经济实惠的选择。一些用例可能包括:
移动应用——尽管许多智能手机拥有强大的 CPU 甚至 GPU,但电池续航时间仍然是一个问题,而静态嵌入或许能在质量和功耗之间取得良好的平衡。此外,静态嵌入还可用于需要离线模式的应用。
Web 浏览器扩展- 在 Web 浏览器中运行基于转换器的模型通常不是一个好选择,但静态嵌入可能是一个不错的选择,因为它们具有更少的参数并且编码速度更快。
嵌入式系统- 对于计算能力有
限的设备(例如物联网设备或微控制器)来说,静态嵌入可能是不错的选择。
如果您属于上述情况之一,那么您绝对应该尝试一下静态嵌入。但是,如果搜索质量并非您的首要考虑,那么即使在高性能环境中,您也可以考虑使用静态嵌入。编码过程的加速可能会为您带来显著的改变。
静态嵌入的定制
最后,但同样重要的是, Tom Aarsen发布的训练流程可以帮助你训练自己的静态嵌入模型,以便你可以轻松地根据数据的具体情况进行调整。此训练过程也比基于 Transformer 的模型快得多,因此你甚至可以更频繁地重新训练它。重新计算嵌入是语义搜索系统的瓶颈,而静态嵌入可能是解决此问题的一个很好的解决方案。自定义静态嵌入模型能否胜过通用的预训练模型仍是一个悬而未决的问题,但绝对值得一试。