提纲
1 简介
2 任务介绍
3 decoder-only
3.1 模型基底优化
3.2 注意力机制优化
3.3 Pooling方式调整
3.4 训练数据优化
3.5 训练方式优化
4 encoder-only
5 讨论
参考文献
1 简介
在大概一年前的时候写过一篇text embedding的总结性文章
语言模型之text embedding(思考篇) ,对当时出现的text embedding模型做了归纳跟讨论(无论是encoder-only还是decoder_only)。在接下来的一年时间里,text embedding模型的发展可谓迅速,该领域最权威的benchmark MTEB的榜一频繁易主,我这一年间也陆续写了10篇相关的文章介绍各种新模型或者方法,所以在这里将这一年所看到的工作再做些总结。
对该领域有兴趣的朋友,推荐看这篇文章之前先按顺序阅读另外两篇文章,效果更佳。
2 任务介绍
**Text embedding就是将文本转成一组固定维度的向量表示。** 我们所熟知的word embedding是以token为基本单位,而text embedding则是以文本为基本单位的。**理想的text embedding应该尽可能保留文本的语义信息,相同语义但不同表述方式的文本可以被映射到同一个位置,而不同语义的文本在向量空间应该保持对应的距离。**
Text embedding能用来做些什么?它可以用在Classification, Clustering, Pair Classification, Reranking, Retrieval, STS, Summarization, Bitext Mining等任务中。如何评价它的好坏,也可以通过在这些任务的表现来评估。
如何从语言模型中获得Text embedding呢?以目前主流的Transformer为例,先获取文本经过模型最后一层的隐层表示后,再通过某种pooling方式得到一个特定维度的向量。
3 Decoder-only
在一年之前,虽然也出现了一些decoder-only模型来生成text embedding的方案,但效果相比于encoder-only模型并没有明显优势。但是 **这一年来所涌现的很多deconder-only模型,效果出现了质的飞跃。可以看到榜单靠前的模型基本都是基于mistral或者qwen的,没有一点Bert的影子。** 至于为什么短短一年间,decoder-only的模型在text embedding任务出现怎么大的变化,我在后面会给出一些自己的想法。
图1: MTEB榜单
3.1 模型基底优化
这两年大模型的发展非常迅速,基底能力的不断增强也是大家有目共睹的。对于text embedding任务而言,同样的数据+训练流程,如果基底模型越强,最终得到的text embedding模型性能也会更强,例如上图中基qwen2-7B的模型性能就明显强于基于qwen1.5-7B的模型。我们自己在finetune时也会选择更佳强力的基底模型也是在这个道理,还是那句话,站在巨人的肩膀上,可以看的更远。
3.2 注意力机制优化
对于decoder-only模型而言,它处理text embedding任务最大的短板就是它的单向注意力机制,前面的token看不到后面token的信息,同时一般情况下模型的last token又会把注意力放在句子结束的位置,而一个高质量的text embedding是需要考虑到文本各个位置的信息的,不能厚此薄彼。
针对这个问题, **目前主流且占据优势的做法还是会将单向注意力机制调整为双向注意力机制,这个模型架构的调整是跟deconder-only原本训练任务有冲突的,所以是需要进一步训练的,不支持改完即用,包括GritLM,LLM2Vec等方案皆是如此,确实双向注意力机制在text embedding任务上是有明显优势的。** 也有一些做法是继续拥抱单项注意力机制,只是通过特定任务的训练,让单向注意力机制去适应text embedding任务,例如E5-mistral-7b-instruct就是如此。除此之外,还有一些不需要训练的小操作,比如PromptEOL这种通过构建一个prompt,“This sentence:[X] means in one word:”,让语言模型将文本信息浓缩到一个词的summarization方式,或者Echo embedding这种将文本重复两次的做法。
3.3 Pooling方式调整
传统的pooling一般分为mean pooling,[CLS] token pooling跟last token pooling三种,encoder-only模型多采用前两者,而decoder only模型则多采用最后一种方式,这也是为了跟decoder only模型原本的训练任务相匹配,不会产生更多的冲突,目前看到的效果比较好的text embedding模型多采用这种pooling方式。
3.4 训练数据优化
一方面受益于大模型的生成能力,以及更多数据的挖掘跟搜集,研究者获得更多高质量且多样的数据,另一方面受益于对不同text embedding任务的更深入研究,对于如何构建更佳高质量的数据三元组,研究者有更多的心得。
3.5 训练范式优化
目前这类模型主要阶段的损失函数还是沿用对比学习损失,但不同模型整体的训练流程还是存在一些差异,例如GritLM会加入生成任务的损失,LLM2Vec会为双向注意力机制设计两个无监督任务损失,Piccolo系列模型将数据划分为三种不同类型并适配不同的损失函数等等。
除此之外,还有一个值得注意的变化就是Matryoshka Embedding运用到越来越多模型去了,这种支持玩家自由定制embedding维度的机制必定会是一种趋势,要不然后以后embedding模型对的维度从现在的几K增加到几十K后你让玩家怎么用?
4 Encoder-only
这一年来虽然也出现了一些encoder-only模型,但没有像decoder-only模型那样五花八门的,更多是一些炼丹技巧,给了我一种不可持续发展的预感。当时这也可能是我孤陋寡闻的,并没有留下这方面的记忆。
5 讨论
一年前的话我会把生成任务跟embedding任务视作两类相对对立的任务,所以我理解将目前火热的decoder-only模型直接迁移到text embedding任务可能不会产生明显受益。但现在我更倾向于把text embedding视作大模型的一种能力,就跟agent相似,大模型本身基础能力是足够强的,是具备产出高质量embedding的潜力的,只是需要合适的训练去激发这种能力。
在这一年里,在text embedding任务上,围绕着decoder-only模型的各种新方法层出不穷,一方面这跟现在大模型当道的氛围有关,研究者对此有更多热度的关注,另一方面也说明了decoder-only模型上的空间会更多,ROI会更高。
从效果上看,我认为目前这类decoder-only的模型是明显超过encoder-only模型的,它的优势在于它的效果跟泛化能力,而由于它的模型规模明显高了一个量级,所以它的劣势在于它的成本上。相比于之前的decoder-only跟text embeddingying的硬 炒CP,当下我觉得decoder-only模型在text embedding任务上成功走出了自己的路子,已经翻身做主人了,未来可期。
参考文献
4 微软E5-mistral-7b-instruct: 站在LLM肩膀上的text embedding
5 BGE M3-Embedding:智源最新发布的text embedding模型,多语言检索效果超过微软跟openai
6 GritLM: 能同时支持embedding跟generation的语言模型,RAG玩家有福了!
7 Echo embedding: 把文本重复两次,自回归模型就能生成更高质量的embedding
8 Matryoshka Embedding Models: 可以自由截断embedding长度
9 LLM2Vec: 改造Decoder-only LLM以生成高质量text embedding
10 NV-Embed: 不装了,NVIDIA亲自下场,发布自家embedding模型并成功登顶MTEB
11 SFR-Embedding-Mistral: 都来看看吧,大佬们把炼丹秘籍都坦白了。
12 Multi-task Hybrid Loss Training:因地制宜,充分利用数据信息