照片由 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家族中表现最为出色,成为最佳模型,如下面的表格所示:
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在检索、自然语言理解和代码任务上的卓越表现使其成为各种自然语言处理应用的游戏规则改变者。
注:此处的“Modern”翻译为“现代”,除非“ModernBERT”是专有名词。根据上下文,“Modern”可能强调其现代性。
ModernBERT 通过打破编码器模型长期停滞的局面而赢得了其“现代”的称号。自 2018 年 BERT 发布以来,编码器模型仅经历了零星的改进——在某些领域的性能提升往往是以牺牲效率或通用性为代价的。与前辈不同,ModernBERT 实现了全面且均衡的进步(“帕累托改进”),并未作出任何妥协。通过借鉴解码器模型和大型语言模型的工程经验,ModernBERT 将这种持续且均衡的进步带到了编码器领域,使其成为了该领域的真正飞跃。
虽然有很多改动,我尽量简要总结一下,否则这篇博客会变得很长。
通过采用Flash Attention技术实现更快的处理:通过利用Flash Attention 2和交替注意力机制、去填充技术等高效手段,ModernBERT确保了更快的处理速度,同时保持其实用性以适应实际应用。
了解更多信息,请访问:https://huggingface.co/blog/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 文本模型树立了新的标杆。