Nomic Embed:能够复现的SOTA开源嵌入模型

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: Nomic-embed-text是2月份刚发布的,并且是一个完全开源的英文文本嵌入模型,上下文长度为8192。它在处理短文和长文本任务方面都超越了现有的模型,如OpenAI的Ada-002和text-embedding-3-small。该模型有137M个参数在现在可以算是非常小的模型了。

模型、训练代码以及一个包含2.35亿文本对的大型数据集都已经发布,我们可以复现、审计和重新构建这个先进的嵌入模型。

模型架构

以下是该模型对BERT base应用的架构变化和优化:

  • 使用Rotary位置嵌入替代绝对位置编码。
  • 使用SwiGLU激活代替GeLU。
  • 使用Flash Attention。
  • 删除Dropout。
  • 词汇大小为64的倍数。

这样就得到了nomic-bert-2048,该模型在所有阶段的最大序列长度为2048。在推断时使用动态NTK插值将模型扩展到8192的序列长度。

BooksCorpus和2023年的Wikipedia转储被用作预训练语料库。每个文档使用bert-base-uncased分词器进行分词,并打包成2048个标记的块。使用30%的掩码率而不是bert的15%。预训练不考虑下一句子预测任务,只进行掩码填充。

无监督对比预训练

无监督对比预训练旨在教会模型区分最相似的文档和其他无关的文档。

论文的数据集使用大量公开可用的数据形成文本对。这些数据集涵盖各种目标和领域,从网页检索到科学文章,总共精选了涵盖29个数据集的470M个文本对。

为了去除噪声样本,使用gte-base模型进行了一致性过滤。

对于数据集的100万个子样本,每个对都被嵌入为查询和文档。如果文档不在前k个(在这种情况下是2)中,使用余弦相似度,那么该示例将被丢弃。过滤后得到约235M个文本对。

此外,还使用完整的维基百科文章与它们的标题配对,以及来自S2ORC的单篇论文的摘要和全文主体,这样就得到了一个长上下文数据集。

在训练过程中,一次从一个数据源中抽样一对,并且整个批次都用来自单一数据源的样本填充,这样可以防止模型学习特定于源的问题(不让模型走捷径,减少过拟合)。

使用InfoNCE对比损失。对于给定的批次B = (q0, d0), (q1, d1), …, (qn, dn),最小化如下所示:

其中,s(q, d)是(q, d)的余弦相似度。

为了打破双编码器的对称性,使用以下特定任务前缀:

  • 搜索查询(通常用于问题)
  • 搜索文档(通常用于响应)
  • 分类(用于与STS相关的任务,如改写)
  • 聚类(用于将语义相似的文本组合在一起的任务)

监督对比微调

训练的这个阶段旨在通过利用人工标记的数据集来提高性能。

监督微调在MSMarco、NQ、NLI、HotpotQA、FEVER、MEDI的部分数据、WikiAnswers和Reddit上进行。

配对的对比损失被调整为包含每个批次中的难区分的负样本。作者发现将负样本数量增加到7以上并不能明显提高性能。此外多次训练也会对性能造成了损害。

评估

对BEIR进行了少量样本的评估,获得了在特定数据集上的训练对整体MTEB分数的影响。在FEVER、HotpotQA和MEDI数据集上的训练提高了整体MTEB分数,这表明在训练中选择数据集对于提升性能至关重要。

nomic-bert-2048在GLUE基准测试上进行了评估。对于某些任务,它是从MNLI检查点初始化的。nomic-bert-2048在GLUE基准测试上与大小和训练方式相似的模型竞争力相当,与MosaicBERT和JinaBERT在各个任务上的得分也很相似,除了Cola(这个任务中由于模型的序列长度更长)因为在预训练过程中看到更多的标记,所以表现有所不同。

MTEB基准测试

Jina 长上下文语境测试

LoCo基准测试

nomic-embed-text-v1与其他模型如text-embedding-ada-002和jina-embeddings-v2-base-en的比较。nomic-embed-text-v1在MTEB上的表现超过了text-embedding-ada-002和jina-embeddings-v2-base-en。它在长上下文基准测试(LoCo和Jina长上下文基准测试)上一致优于jina-embeddings-v2-base-en,展现出对长序列更优越的性能。

Nomic Embed 1.5

Nomic Embed v1.5是Nomic Embed模型的增强版本,它融合了Matryoshka Representation Learning,允许在单个模型中调整嵌入维度。训练过程从对弱相关文本对进行无监督对比训练开始,逐渐转向在更高质量的标记数据集上进行微调。

nomic-embed-text-unsupervised 在 nomic-embed-text微调数据集上使用MRL进行微调。

Nomic Embed v1.5支持嵌入维度从64到768,在512和768维度上表现优于其他模型。与以前的版本相比,它实现了显著的内存减少,同时保持了与其他高级模型(如MiniLM-L6-v2)相当的性能水平。

这里简单介绍一下Matryoshka Representation Learning:

Matryoshka Representation Learning是一种使我们的模型具有可变嵌入维度的技术。类似于俄罗斯套娃,我们明确地训练模型来学习在不同嵌入维度下的嵌套表示。这使我们能够从完整大小截断嵌入以减少它们的内存占用,同时保持性能。

总结

很高兴能够看到有关文本嵌入的最新论文,这篇论文也说明了在模型很小的情况下还是可以得到更好的测试结果,这对我们应用来说非常重要,另外就是现在嵌入的研究方向变为了动态维度表示,但是我个人认为目前这方面还可以有更大的发展。

论文:

https://avoid.overfit.cn/post/2ed4f1b0173a444f836ccfaee424db0d

作者:Ritvik Rastogi

目录
相关文章
|
7月前
|
人工智能 自然语言处理 测试技术
权重、代码、数据集全开源,性能超越Mistral-7B,苹果小模型来了
【8月更文挑战第12天】DCLM是由多家机构联合推出的全新测试平台,旨在通过优化数据集增强语言模型性能。其核心贡献包括一个含240万亿token的标准化语料库及有效的预训练方案。DCLM-BASELINE数据集成功训练出7B参数模型,在MMLU上5-shot准确率达64%,超越Mistral-7B,且计算成本降低40%。尽管存在局限,但该项目已全开源,为社区提供宝贵资源,推动语言模型发展。[论文链接](https://arxiv.org/pdf/2406.11794)
201 60
|
5月前
|
机器学习/深度学习 自然语言处理 算法
[大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器
[大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器
58 0
|
10月前
|
测试技术
首个基于Mamba的MLLM来了!模型权重、训练代码等已全部开源
【5月更文挑战第6天】Cobra,首个基于Mamba的多模态大语言模型,开源了其权重和训练代码。Cobra结合Mamba的高效语言模型与视觉模态,以线性计算复杂度提升MLLM效率,适用于更多实际场景。通过优化模态融合,Cobra在速度、性能和参数效率上超越现有方法,如在封闭集挑战预测中表现优秀,并能在参数量减少的情况下保持强效性能。[链接](https://arxiv.org/pdf/2403.14520v2.pdf)
158 1
|
10月前
|
机器学习/深度学习 人工智能 搜索推荐
【LLM】深入浅出学习模型中Embedding(嵌入)
【5月更文挑战第2天】人工智能嵌入深入浅出介绍
348 0
|
10月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch搭建RNN联合嵌入模型(LSTM GRU)实现视觉问答(VQA)实战(超详细 附数据集和源码)
PyTorch搭建RNN联合嵌入模型(LSTM GRU)实现视觉问答(VQA)实战(超详细 附数据集和源码)
341 1
|
机器学习/深度学习 人工智能 自然语言处理
深度解析BERT:从理论到Pytorch实战
深度解析BERT:从理论到Pytorch实战
978 0
|
机器学习/深度学习 数据采集 PyTorch
我用 PyTorch 复现了 LeNet-5 神经网络(自定义数据集篇)!
详细介绍了卷积神经网络 LeNet-5 的理论部分和使用 PyTorch 复现 LeNet-5 网络来解决 MNIST 数据集和 CIFAR10 数据集。然而大多数实际应用中,我们需要自己构建数据集,进行识别。因此,本文将讲解一下如何使用 LeNet-5 训练自己的数据。
314 0
|
机器学习/深度学习 人工智能 数据挖掘
【Deep Learning B图像分类实战】2023 Pytorch搭建AlexNet、VGG16、GoogleNet等共5个模型实现COIL20数据集图像20分类完整项目(项目已开源)
亮点:代码开源+结构清晰规范+准确率高+保姆级解析+易适配自己数据集+附原始论文+适合新手
445 0
|
机器学习/深度学习 PyTorch 算法框架/工具
什么是LSTM模型,什么是BILSTM模型,给出 pytorch案例
LSTM模型是一种循环神经网络模型,它在处理序列数据时能够有效地解决梯度消失和梯度爆炸的问题。LSTM模型引入了门机制(如遗忘门、输入门和输出门),以便在序列中选择性地保存或遗忘信息。这些门可以根据输入数据自适应地学习。 BILSTM模型是一种双向LSTM模型,它包含两个LSTM模型,一个正向模型和一个反向模型。正向模型按照时间顺序读取输入序列,而反向模型按照相反的顺序读取输入序列。这使得BILSTM模型能够同时考虑过去和未来的上下文信息,因此通常比单向LSTM模型表现更好。
1075 0
|
机器学习/深度学习 编解码 自然语言处理
最强Vision Trabsformer | 87.7%准确率!CvT:将卷积引入视觉Transformer(文末附论文下载)(一)
最强Vision Trabsformer | 87.7%准确率!CvT:将卷积引入视觉Transformer(文末附论文下载)(一)
280 0