🚀 🦉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
在自己的特定領域任務上進一步微調此模型。