人工智能学习

现代BERT:更先进的文本嵌入模型

本文主要是介绍现代BERT:更先进的文本嵌入模型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最后,BERT也发展起来了

照片由 Bradyn Trollip 在 Unsplash 拍摄。

在整个GenAI浪潮中,有一件事一直让我感到好奇,那就是为什么没有人想到优化BERT,这个曾经在某个时期几乎所有人都用过的最流行的文本编码模型。

点击 Gumroad 订阅 datasciencepocket,旨在让每个人都能学习 AI!datasciencepocket.gumroad.com](https://datasciencepocket.gumroad.com/?source=post_page-----538239202527--------------------------------)

最后,备受期待的BERT的升级版ModernBERT问世了,依然强大。

ModernBERT 是一种先进的纯编码器模型家族,在各个方面都远远超过了早期的编码器。

它支持扩展的序列长度为8192(相比之下,普通的编码器通常仅有512),在下游任务性能方面更强,并且运行速度快很多。

该模型旨在无缝替换任何BERT类似的架构,无需额外调整

它有两种配置:一个基础模型,参数规模为1.39亿,以及一个大型模型,参数规模为3.95亿。

如果你想再看看 BERT

性能和指标

ModernBERT因其在各种任务和基准测试中的出色表现,在BERT家族中表现最为出色,成为最佳模型,如下面的表格所示:

  1. 信息检索(IR)性能

BEIR(DPR):ModernBERT 在基础版(41.6)和大型版(44.0)两类中均取得了最高分,超越了其他基于 BERT 的模型,如 GTE-en-MLM 和 RoBERTa。

MLDR_OOD 和 MLDR_ID:ModernBERT 在处理出域(OOD)和在域(ID)的信息检索数据集方面表现出持续的领先地位。其大型模型在 MLDR_OOD 中得分 48.6,在 MLDR_ID 中得分 52.4,显示出强大的稳健性和适应性。

2. 自然语言理解(NLU)

在GLUE基准测试上,ModernBERT(一种先进的语言模型)取得了顶尖的成绩:88.5(基础版)和90.4(大型版)。这些分数超过了竞争对手,如RoBERTa和GTE-en-MLM,展示了它在理解复杂语言含义方面的强大能力。

3. 代码分析任务

ModernBERT 在诸如 CSN 和 SQA 这样的编程相关基准测试中表现优异。其 Base 模型在 CSN 和 SQA 中分别获得 56.4 和 73.6,而 Large 模型分别获得 59.5 和 83.9。这表明它在处理代码相关任务时非常适用。

4. 始终表现优异者:

在所有测试领域——信息检索(IR)、自然语言理解(NLU)和代码领域——ModernBERT 始终名列前茅或紧随其后。这表明它具有广泛的适用性和领先的技术进步。

总结指标,

ModernBERT为仅编码器模型设立了新的标杆,结合了速度、效率和多功能性。它在GLUE基准测试中超越了DeBERTaV3,同时使用了较少的内存,并且在处理混合长度输入时速度提高了多达4倍。凭借无与伦比的8,192令牌的上下文长度,ModernBERT在长上下文任务中表现卓越,例如检索和RAG(检索增强生成)管道,超过了专门为此类任务设计的模型,如GTE-en-MLM(GTE-en-MLM:全局文本嵌入-英语掩码语言模型)。它还革新了代码检索,在软件质量保证数据集(SQA数据集)上得分超过80,并支持AI助力的IDE和企业级代码搜索等应用。ModernBERT在检索、自然语言理解和代码任务上的卓越表现使其成为各种自然语言处理应用的游戏规则改变者。

为什么ModernBERT被称为现代BERT?

注:此处的“Modern”翻译为“现代”,除非“ModernBERT”是专有名词。根据上下文,“Modern”可能强调其现代性。

ModernBERT 通过打破编码器模型长期停滞的局面而赢得了其“现代”的称号。自 2018 年 BERT 发布以来,编码器模型仅经历了零星的改进——在某些领域的性能提升往往是以牺牲效率或通用性为代价的。与前辈不同,ModernBERT 实现了全面且均衡的进步(“帕累托改进”),并未作出任何妥协。通过借鉴解码器模型和大型语言模型的工程经验,ModernBERT 将这种持续且均衡的进步带到了编码器领域,使其成为了该领域的真正飞跃。

现代BERT与BERT有何不同?

虽然有很多改动,我尽量简要总结一下,否则这篇博客会变得很长。

  • Transformer架构的更新:ModernBERT通过引入旋转位置嵌入和GeGLU层等改进,优化了Transformer架构,从而提高了效率、可扩展性和训练稳定性。
  • 通过采用Flash Attention技术实现更快的处理:通过利用Flash Attention 2和交替注意力机制、去填充技术等高效手段,ModernBERT确保了更快的处理速度,同时保持其实用性以适应实际应用。

  • 全局和局部注意力:现代BERT在局部和全局注意力之间交替,平衡了计算效率和对上下文的理解,从而能更快地处理长序列。

了解更多信息,请访问:https://huggingface.co/blog/modernbert

  • 去填充和序列打包:ModernBERT 通过去填充和序列打包消除了计算浪费,从而实现了显著的速度提升。在去填充过程中,我们不再保留这些填充标记,而是将它们全部移除,并将它们拼接成一个批量大小为一的迷你批次,从而避免了所有不必要的计算。
  • 关注硬件:ModernBERT 通过精心调整层的尺寸和深度,优化了常见的 GPU,平衡了性能和设备间的兼容性。
  • 训练:ModernBERT 使用多样化的数据(文本、代码和科学文章)进行了训练,并采用了三阶段的训练方法,确保了在各种任务中具备广泛的能力,包括长上下文处理。
  • 过程:通过简化目标函数、提高掩码率并提供中间检查点,ModernBERT 提高了训练效率,支持进一步的研究。
  • 一些其他技巧:ModernBERT 使用批量大小预热和创新的权重初始化来加速训练,增强了早期学习能力和可扩展性。
怎么用ModernBERT?

非常简单,只需照着代码片段做

    !pip install flash-attn git+https://github.com/huggingface/transformers.git  

    from transformers import AutoTokenizer, AutoModelForMaskedLM  

    model_id = "answerdotai/ModernBERT-base"  
    tokenizer = AutoTokenizer.from_pretrained(model_id)  
    model = AutoModelForMaskedLM.from_pretrained(model_id)  

    text = "法国的首都是[MASK]。"  
    inputs = tokenizer(text, return_tensors="pt")  
    outputs = model(**inputs)  

    # 预测[MASK]位置的词:  
    masked_index = inputs["input_ids"][0].tolist().index(tokenizer.mask_token_id)  
    predicted_token_id = outputs.logits[0, masked_index].argmax(axis=-1)  
    predicted_token = tokenizer.decode(predicted_token_id)  
    print("预测词:", predicted_token)

简单来说,ModernBERT 是对原版 BERT 的一次更快、更智能且更高效的升级。它能够处理更长的文本,在各种任务中表现更佳,并且更适用于现代硬件。无论是文本分析、信息检索还是代码处理,ModernBERT 都是为了应对这一切而设计的,为 AI 文本模型树立了新的标杆。

这篇关于现代BERT:更先进的文本嵌入模型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!