提纲
1 简介
2 NV-Embed
2.1 模型结构
2.2 模型训练
3 实验结果
4 讨论
参考文献
1 简介
上个月MTEB的榜首再次又换人了,NVIDIA亲自下场,发布了自己的embedding模型NV-Embed,成功占据榜首之位。芯片公司不好好做芯片,亲自下场做模型了,来给大家压力了。
NV-Embed移除了Decoder-only模型结构中的单向mask机制,并添加了一个后置模块latent attention layer用于进一步提升embedding的表征能力,加上其特有的训练流程设计,最终在诸多评测任务上表现出色。
图1:MTEB榜单截图
2 NV-Embed
2.1 模型结构
相比于传统的Decoder-only语言模型,NV-Embed做了以下几个调整。
a) 移除了单向mask机制,改单向注意力机制为双向注意力机制。因为研究人员认为单向注意力机制限制了模型的表征能力,而这也跟NLU任务中同等参数规模的GPT效果不及BERT或T5的现象相符。
b) 引入Latent Attention Layer。目前语言模型生成文本embedding的两种常见方式分别为,其一是mean pooling,直接对所有token embedding求平均,但是有可能忽略掉关键片段的重要信息(如果每个词都一视同仁,那么每个词就都不是很重要了),其二是利用最后位置<EOS>的token embedding,但是很可能会严重依赖于最后一个token的信息。基于此,研究人员提出了一个新的embedding获取方式,将语言模型最后一层的表征作为Q,再利用训练好的的Latent Array获取对应K,V,通过attention机制得到更具表征能力的文本embedding。可以理解为,额外引入了一个attention模块,并且这个模块的V跟K是通过训练得到的,跟具体的Q无关。
图2: NV-Embed流程示意
2.2 模型训练
**NV-Embed采用了两阶段的Instruction-Tuning,第一阶段是在检索数据上进行对比学习,利用了in-batch的负样本以及挖掘出了各种hard negative,第二阶段则是混合了诸多检索跟非检索数据,但不再使用in-batch的负样本。** 这种训练设计的目的在于研究人员认为检索任务比其他任务更难,所以训练策略一开始需要先聚集在提升模型在检索任务上的性能。此外,NV—Embed两个阶段使用的都是数据都来源于开源的公共数据集。
模型输入中,query的输入格式为"Instruct:task\_definition Queer:q",取embedding的时候会掩蔽掉相关的指令文本,而document端则不插入多余的指令前缀。
3 模型结果
研究人员在Mistral-7B基础上,利用LoRA的高效参数更新技巧,finetune得到了NV-Embed。
a) 在MTEB benchmark上,NV-Embed取得最佳效果。跟e5-mistral-7b-instruct, google-gecko这种单阶段训练模型相比,NV-Embed这种两阶段训练策略,让模型现针对检索任务进行训练,然后再针对instruction- tuning继续训练的方式,在最终性能取得明显提升。跟其他decoder-only模型相比,NV-Embed所提出模型结构上的优化带来了明显提升。
b) 通过进一步实验,可以发现两阶段训练策略,注意力机制优化以及embedding输出策略不同设置对于最终效果的影响。
4 讨论
又是一个Decoder-only LLM改embedding模型的尝试,其中有两点变动需要关注下,其一是利用Latent attention模块来输出最终的文本embedding,这是之前其他模型所不涉及的,而且看起来这个设计是可以被其他embedding模型所采纳的。其二是两阶段的训练策略,以往的分阶段训练,都是先在通用语料上训练学习通用能力,然后再针对性的提升类似于检索相关的能力,这跟NV-Embed的做法恰好相反,文中虽然也正是这种分阶段训练的提升,但是将这两个阶段换下顺序会有多大的变化呢?
参考文献
1 NV-Embed: Improved Techniques for Training LLMs as Generalist Embedding Models