🚀 🦉CodeModernBERT-Owl-3.0
CodeModernBERT-Owl-3.0 是 CodeModernBERT 系列中多语言长上下文编码器模型的最终预训练版本。它针对代码搜索、代码摘要、错误修复和表示学习等下游代码相关任务进行了优化。
该模型基于预训练检查点 CodeModernBERT-Owl-3.0-Pre 构建,并进一步进行了预训练,以更好地捕捉多种编程语言源代码中的结构模式和语义。
🚀 快速开始
模型亮点
- ✅ 2048 个标记的上下文窗口,用于理解长代码
- ✅ 在 8 种编程语言的 1120 万个函数上进行训练
- ✅ 针对下游可用性进行微调
- ✅ 适用于代码搜索、语义嵌入、摘要和完形填空式错误修复
- ✅ 支持多语言:Python、JavaScript、Java、TypeScript、PHP、Go、Ruby、Rust 等
架构
- 基础:ModernBERT 风格的编码器
- 隐藏层大小:768
- 层数:12
- 注意力头:12
- 参数:约 1.5 亿
- 预训练:掩码语言模型(MLM)
- 微调:特定领域的代码任务
模型信息
属性 |
详情 |
模型类型 |
modernbert |
训练数据 |
从 CodeSearchNet、自定义 GitHub 仓库和过滤后的多语言语料库中提取的 11,257,713 个函数级代码片段,使用 Tree-sitter 提取,涉及的编程语言包括 Python、JavaScript、Java、TypeScript、PHP、Go、Ruby、Rust |
最大序列长度 |
2048 |
预训练参数数量 |
约 1.5 亿 |
训练语料库大小 |
11,257,713 |
💻 使用示例
基础用法
from transformers import AutoTokenizer, AutoModel
import torch
tokenizer = AutoTokenizer.from_pretrained("Shuu12121/CodeModernBERT-Owl-3.0")
model = AutoModel.from_pretrained("Shuu12121/CodeModernBERT-Owl-3.0")
code = "def factorial(n):\n if n <= 1:\n return 1\n return n * factorial(n - 1)"
inputs = tokenizer(code, return_tensors="pt", padding=True, truncation=True)
outputs = model(**inputs)
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output.last_hidden_state
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
embeddings = mean_pooling(outputs, inputs['attention_mask'])
高级用法
from transformers import pipeline
fill_mask = pipeline("fill-mask", model="Shuu12121/CodeModernBERT-Owl-3.0", tokenizer="Shuu12121/CodeModernBERT-Owl-3.0")
fill_mask("def square(x): return x * <mask>")
📊 不同语言的 MRR 对比(平均池化)
- 实验使用 CodeSearchNet 测试集进行。
- 所有评估的候选池大小固定为 100。
- 评估方法:模型嵌入的 平均池化。
语言 |
CodeModernBERT-Owl-3.0 |
CodeT5+ |
GraphCodeBERT |
CodeBERTa-small |
CodeBERT |
Python |
0.8814 |
0.8048 |
0.3496 |
0.6123 |
0.0927 |
Java |
0.8673 |
0.7853 |
0.3299 |
0.4738 |
0.0816 |
JavaScript |
0.8805 |
0.7111 |
0.2581 |
0.3593 |
0.0692 |
PHP |
0.8788 |
0.7893 |
0.2507 |
0.4533 |
0.0623 |
Ruby |
0.8805 |
0.7201 |
0.3186 |
0.4418 |
0.0762 |
Go |
0.8782 |
0.7577 |
0.4453 |
0.5338 |
0.0856 |
✅ CodeModernBERT-Owl-3.0(平均池化) 不仅在 CodeSearchNet 测试集的所有语言中实现了最高的 MRR,而且还展示了 出色的跨语言一致性。这种平衡的性能使其特别适用于对编程语言质量一致性要求较高的多语言代码搜索和理解任务。
📚 训练数据
- 规模:11,257,713 个函数级代码片段
- 提取工具:Tree-sitter
- 数据来源:CodeSearchNet、自定义 GitHub 仓库和过滤后的多语言语料库
- 支持语言:Python、JavaScript、Java、TypeScript、PHP、Go、Ruby、Rust
📄 许可证
本模型采用 Apache License 2.0 许可证。
🧑💻 作者
由 Shuu12121 开发。
🔗 相关模型
📎 注意事项
⚠️ 重要提示
使用 平均池化 来获得固定长度的嵌入。
💡 使用建议
你可以使用 Hugging Face 的 Trainer
或 accelerate
在自己的特定领域任务上进一步微调此模型。