🚀 ModernBERT
ModernBERT是一个现代化的双向仅编码器Transformer模型(BERT风格),在2万亿个英语和代码数据的标记上进行了预训练,原生上下文长度可达8192个标记。它能有效处理长文档相关任务,适用于多种下游任务。
🚀 快速开始
你可以直接使用transformers
库来使用这些模型。在下一个transformers
版本发布之前,这样做需要从主分支安装transformers:
pip install git+https://github.com/huggingface/transformers.git
由于ModernBERT是一个掩码语言模型(MLM),你可以使用fill-mask
管道或通过AutoModelForMaskedLM
加载它。要将ModernBERT用于分类、检索或问答等下游任务,请按照标准的BERT微调方法对其进行微调。
✨ 主要特性
- 长上下文支持:采用旋转位置嵌入(Rotary Positional Embeddings,RoPE)技术,能够有效处理长上下文内容。
- 高效处理长输入:使用局部 - 全局交替注意力(Local - Global Alternating Attention)机制,提高长输入处理效率。
- 高效推理:借助去填充和Flash Attention技术,实现高效推理。
- 多规模可选:提供不同规模的模型,包括ModernBERT-base(22层,1.49亿参数)和ModernBERT-large(28层,3.95亿参数)。
- 广泛适用性:在大量文本和代码语料上进行训练,适用于代码检索和混合(文本 + 代码)语义搜索等多种下游任务。
📦 安装指南
安装transformers库
pip install git+https://github.com/huggingface/transformers.git
安装Flash Attention(可选)
⚠️ 重要提示
如果你的GPU支持,建议使用Flash Attention 2以达到最高效率。安装Flash Attention如下,然后正常使用模型:
pip install flash-attn
💻 使用示例
基础用法
使用AutoModelForMaskedLM
:
from transformers import AutoTokenizer, AutoModelForMaskedLM
model_id = "DeepMount00/ModernBERT-base-ita"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForMaskedLM.from_pretrained(model_id)
text = "La capitale dell'Italia è [MASK]."
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
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:", predicted_token)
高级用法
使用管道:
import torch
from transformers import pipeline
from pprint import pprint
pipe = pipeline(
"fill-mask",
model="answerdotai/ModernBERT-base",
torch_dtype=torch.bfloat16,
)
input_text = "He walked to the [MASK]."
results = pipe(input_text)
pprint(results)
📚 详细文档
评估
在一系列任务中对ModernBERT进行了评估,包括自然语言理解(GLUE)、通用检索(BEIR)、长上下文检索(MLDR)和代码检索(CodeSearchNet和StackQA)。
- 在GLUE上,ModernBERT-base超越了其他类似规模的编码器模型,而ModernBERT-large仅次于Deberta-v3-large。
- 对于通用检索任务,ModernBERT在BEIR的单向量(DPR风格)和多向量(ColBERT风格)设置中均表现出色。
- 由于在训练数据中包含了代码数据,作为骨干模型的ModernBERT在CodeSearchNet和StackQA上也取得了新的最先进的代码检索结果。
局限性
- 语言适用性:ModernBERT的训练数据主要是英语和代码,因此对于其他语言的性能可能较低。
- 推理速度:虽然它能有效处理长序列,但使用完整的8192个标记窗口可能比短上下文推理慢。
- 数据偏差:与任何大语言模型一样,ModernBERT可能会产生反映其训练数据中存在的偏差的表示。在依赖关键或敏感输出之前,请先进行验证。
📄 许可证
我们根据Apache 2.0许可证发布ModernBERT模型架构、模型权重和训练代码库。
🔖 引用
@misc{modernbert,
title={Smarter, Better, Faster, Longer: A Modern Bidirectional Encoder for Fast, Memory Efficient, and Long Context Finetuning and Inference},
author={Benjamin Warner and Antoine Chaffin and Benjamin Clavié and Orion Weller and Oskar Hallström and Said Taghadouini and Alexis Gallagher and Raja Biswas and Faisal Ladhak and Tom Aarsen and Nathan Cooper and Griffin Adams and Jeremy Howard and Iacopo Poli},
year={2024},
eprint={2412.13663},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2412.13663},
}
ModernBERT是Answer.AI、LightOn和其他伙伴的合作项目。
如需了解更多关于ModernBERT的信息,我们推荐阅读发布博客文章以获取高层次概述,阅读arXiv预印本以获取深入信息。