E5:一种基于弱监督预训练+对比学习的Embedding模型

技术

提纲

1 简介

2 数据‍‍‍

3 方法

4 实验结论

5 总结

参考文献

1 简介‍‍‍‍‍‍‍‍‍

前几周写过的一篇文章提到了一个关于句向量评测的榜单MTEB,除了之前提到了sentence-T5, GTR跟INSTRUCTOR外,不少朋友还对  **目前排名第一的模型E5(EmebEddings from bidirEctional Encoder rEpresentations)** 感兴趣,于是在这里也梳理下E5的具体方案。

E5是由微软在22年提出的一系列具有强大泛化能力的句向量模型,无论是在zero-shot场景下,还是经过进一步微调,都能展现出强大的性能,在MTEB评测集上足以媲美那些参数量是E5数十倍的模型。

2 数据

  **数据的质量跟多样性对于训练一个通用性的句向量模型而言至关重要** 。于是微软的研究人员自建一个庞大且高质量的来自互联网的文本匹配数据集CCPairs,该数据集提供了各种各样的训练信息,能够让模型迁移到各种下游任务。


研究人员从网上搜集到多种多样的半结构化数据,每个数据(q,p)代表一个文本对,q表示query,p表示与之相关的passage,这里的p可以是任意长度,既可以是短文本,也可以是文章的一个段落,或者一个长文档。这里的数据包括来自Reddit的(帖子,评论),来自Stackexchange的(问题,答案),来自英文Wikipedia的(实体+章节名,段落),来自Scientific的(文章标题,摘要),来自Commom Crawl的(标题,段落)以及多种多样的新闻语料。通过简单的规则例如过滤掉psaage长度超过4096个字符或者困惑度太高的数据等自动挖掘的方式后,总共获得了13亿的文本对数据。

Consistency-based filter

  **为了进一步提升数据质量,从而让训练更佳可控,研究人员提出了一种一致性过滤(Consistency-based filter)的方法。** 先让模型在13亿的噪声数据上进行训练,然后利用训练好的模型给每个数据对(q,p)排序,候选池里包括一百万个passage,如果p能落在top\_k个候选结果中,就保留该数据对,否则则移除该数据对。  **换言之,就是希望模型的预测能跟训练数据保持一致。在文中作者将k设置为2,通过这种方式最终获得包括2.7亿文本对数据的数据集CCPairs。** 

3 方法‍‍‍‍‍‍‍‍

跟sentence-T5和GTR类似,  **E5也采用了两阶段的训练方式。第一阶段在没有人工标注的CCPairs数据上通过对比学习训练,** 在训练时在双塔模型的两侧qp会分别加上前缀“query:”跟“passage:”(有点像INSTRUCTOR中instruction的弱化版)。  **在第二阶段时,会在一个相对量级较小的高质量人工标注数据集(M S-MARCO, NQ, NLI)上作进一步训练,从而提高生成的句向量质量。训练方法依旧包括对比学习,但是这里的负样本不再是同个batch其他样本的数据,而都是hard negative。另外,训练损失除了对比学习损失外,还有一项蒸馏学习损失,训练时引入了cross encoder作为teacher模型,为bi-encoder的优化提供更多信号。** 

picture.image

图1: E5的数据构建流程以及模型结构

E5有三种不同模型尺寸,small,base跟large,相应的模型初始化分别来自于MiniLM,bert-base-uncased跟bert-large-uncased-whole-word-masking。在第一阶段训练中,采用的batch\_size是32768,而在第二阶段的训练过程中,采用的batch\_size是256

4 实验结论‍‍‍‍‍‍‍‍‍

a) 

在MTEB评测集上,随着模型规模的增加,模型性能也逐步提升,并且足以媲美其他同量级模型。3亿模型参数的E5-large效果超过了餐数量达48亿的GTR-xxl跟Sentence-T5-xxl。

b)

BERT-FT-base跟E5-base的差别在于后者多了一个在CCPairs数据集预训练的阶段, 两者性能之间的显著差异也论证了在CCPairs数据进行对比学习预训练的价值。

picture.image

图2: MTEB评测结果

c)  **高质量的预训练数据对于整体性能体现明显,对网上搜集到的数据做进一步过滤是E5非常关键的一步。** 虽然神经网络对于数据噪声有一定的鲁棒性,但是数据过滤依旧能提升训练效率跟模型质量。

picture.image

图3: 数据过滤的消融实验结果

5 总结‍‍‍‍‍‍‍‍‍

对于E5为什么能有如此惊艳的效果,相比于其他学习方法,它有几点不同。 ‍ ‍ ‍ ‍ ‍

a) 高质量的训练数据,在第一阶段预训练时通过包括Consistency-based filter等多种方式进一步提升数据质量,同时,为了弥补缺乏hard negative的问题使用了超大的batch size,并且在第二阶段finetune时使用的都是高质量的hard negative。‍‍‍‍‍‍‍‍‍‍‍‍‍‍** ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍**

b) 训练目标的优化,在第二阶段finetune,引入了蒸馏学习的损失,充分利用了cross encoder的信息来进一步指导模型优化方向。‍‍‍‍‍‍‍‍‍‍‍‍‍

c) 强大的基底模型,可以看到v2版本的E5模型性能有明显提升,占据MTEB榜首的也是v2版的模型,而v1跟v2之间的差异在于v2模型在更庞大的文本对数据上做了预训练。

联想到之前提及的INSTRUCTORInstructor: 能遵循instruction的句向量模型,这两者也许能进一步结合,将instruction的设计引入E5的流程,是不是可以进一步提升模型的迁移能力。另外也从一定程度说明了语言模型来自于Bert或者T5的encoder可能并不关键,只要有足够的能力即可,更重要的在预训练阶段为通用的词嵌入建立一个坚实的基底。
‍‍‍‍‍‍

回想simcse刚出来时给人一种错觉,无监督的对比学习方案很快就要取代掉高成本的监督学习方法,但是渐渐的发现高质量的标注数据对于模型性能也是不可缺少的,对比学习固然重要,但是在标注数据上做进一步训练来为模型注入更多知识也是不可缺少的,整个演化进程有种螺旋上升的感觉,值得深思。

参考文献

1 Text Embeddings by Weakly-Supervised Contrastive Pre-training

https://arxiv.org/pdf/2212.03533.pdf

github地址https://github.com/microsoft/unilm/tree/master/e5

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
CloudWeGo白皮书:字节跳动云原生微服务架构原理与开源实践
本书总结了字节跳动自2018年以来的微服务架构演进之路
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论