模型概述
模型特點
模型能力
使用案例
🚀 CodeMorph-ModernBERT
CodeMorph-ModernBERT 是一個專門為代碼搜索和代碼理解任務從頭開始訓練的預訓練模型。該模型利用 code-search-net/code_search_net
數據集進行訓練,以增強對代碼的語義理解。它支持 最大 2048 個標記的序列長度(相比之下,傳統的 Microsoft 模型僅支持 512 個標記),尤其在 Python 代碼搜索中表現出色。
🚀 快速開始
你可以使用 Hugging Face Transformers 庫輕鬆加載本模型。(※ Transformers 的版本需為 4.48.0
及以上)
模型加載
from transformers import AutoModelForMaskedLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("Shuu12121/CodeMorph-ModernBERT")
model = AutoModelForMaskedLM.from_pretrained("Shuu12121/CodeMorph-ModernBERT")
掩碼填充 (fill-mask)
from transformers import pipeline
fill_mask = pipeline("fill-mask", model=model, tokenizer=tokenizer)
print(fill_mask("def add_numbers(a, b): return a + [MASK]"))
獲取代碼嵌入
import torch
def get_embedding(text, model, tokenizer, device="cuda"):
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=256)
if "token_type_ids" in inputs:
inputs.pop("token_type_ids")
inputs = {k: v.to(device) for k, v in inputs.items()}
outputs = model.model(**inputs)
embedding = outputs.last_hidden_state[:, 0, :]
return embedding
embedding = get_embedding("def my_function(): pass", model, tokenizer)
print(embedding.shape)
✨ 主要特性
-
支持長序列
能夠處理最長 2048 個標記的序列,適用於長代碼和複雜函數。 -
高代碼搜索性能
採用基於六種編程語言訓練的 Sentencepiece 分詞器,實現了比以往模型顯著更高的搜索精度。 -
專門訓練的模型
使用 CodeSearchNet 數據集從頭開始訓練,能夠深入理解編程語法和註釋。
📦 安裝指南
文檔未提及安裝相關內容,可參考快速開始部分使用模型。
💻 使用示例
基礎用法
from transformers import AutoModelForMaskedLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("Shuu12121/CodeMorph-ModernBERT")
model = AutoModelForMaskedLM.from_pretrained("Shuu12121/CodeMorph-ModernBERT")
高級用法
from transformers import pipeline
fill_mask = pipeline("fill-mask", model=model, tokenizer=tokenizer)
print(fill_mask("def add_numbers(a, b): return a + [MASK]"))
import torch
def get_embedding(text, model, tokenizer, device="cuda"):
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=256)
if "token_type_ids" in inputs:
inputs.pop("token_type_ids")
inputs = {k: v.to(device) for k, v in inputs.items()}
outputs = model.model(**inputs)
embedding = outputs.last_hidden_state[:, 0, :]
return embedding
embedding = get_embedding("def my_function(): pass", model, tokenizer)
print(embedding.shape)
📚 詳細文檔
模型參數
模型設計使用了以下參數:
屬性 | 詳情 |
---|---|
模型類型 | ModernBERT 架構 |
訓練數據 | CodeSearchNet(所有語言) |
最大序列長度 | 2048 個標記 |
詞彙表大小 (vocab_size ) |
50000 |
隱藏層大小 (hidden_size ) |
768 |
隱藏層數 (num_hidden_layers ) |
12 |
注意力頭數 (num_attention_heads ) |
12 |
中間層大小 (intermediate_size ) |
3072 |
最大位置嵌入 (max_position_embeddings ) |
2048 |
類型詞彙表大小 (type_vocab_size ) |
2 |
隱藏層丟棄概率 (hidden_dropout_prob ) |
0.1 |
注意力概率丟棄概率 (attention_probs_dropout_prob ) |
0.1 |
局部注意力窗口 (local_attention_window ) |
128 |
rope_theta |
160000 |
局部注意力 rope_theta (local_attention_rope_theta ) |
10000 |
數據集
本模型使用 code-search-net/code_search_net
數據集進行訓練。該數據集包含多種編程語言(如 Python、Java、JavaScript 等)的代碼片段,非常適合代碼搜索任務。
評估結果
本模型使用 code_x_glue_ct_code_to_text
數據集的 Python 部分進行評估。以下是主要的評估指標:
指標 | 得分 |
---|---|
MRR (平均倒數排名) | 0.8172 |
MAP (平均精度均值) | 0.8172 |
R-Precision | 0.7501 |
Recall@10 | 0.9389 |
Precision@10 | 0.8143 |
NDCG@10 | 0.8445 |
F1@10 | 0.8423 |
與其他模型的比較
以下是 CodeMorph-ModernBERT 與其他主要代碼搜索模型的比較結果:
模型 | MRR | MAP | R-Precision |
---|---|---|---|
CodeMorph-ModernBERT | 0.8172 | 0.8172 | 0.7501 |
microsoft/graphcodebert-base | 0.5482 | 0.5482 | 0.4458 |
microsoft/codebert-base-mlm | 0.5243 | 0.5243 | 0.4378 |
Salesforce/codet5p-220m-py | 0.7512 | 0.7512 | 0.6617 |
Salesforce/codet5-large-ntp-py | 0.7846 | 0.7846 | 0.7067 |
Shuu12121/CodeMorph-BERT | 0.6851 | 0.6851 | 0.5934 |
Shuu12121/CodeMorph-BERTv2 | 0.6535 | 0.6535 | 0.5543 |
Code Search 模型評估結果 (google/code_x_glue_tc_nl_code_search_adv 數據集測試)
以下是使用 google/code_x_glue_tc_nl_code_search_adv
數據集(測試集)對各種 Code Search 模型的評估結果總結。所有評估的候選池大小均為 100。
點擊此處查看額外實驗代碼
模型 | MRR | MAP | R-Precision |
---|---|---|---|
Shuu12121/CodeMorph-ModernBERT | 0.6107 | 0.6107 | 0.5038 |
Salesforce/codet5p-220m-py | 0.5037 | 0.5037 | 0.3805 |
Salesforce/codet5-large-ntp-py | 0.4872 | 0.4872 | 0.3658 |
microsoft/graphcodebert-base | 0.3844 | 0.3844 | 0.2764 |
microsoft/codebert-base-mlm | 0.3766 | 0.3766 | 0.2683 |
Shuu12121/CodeMorph-BERTv2 | 0.3142 | 0.3142 | 0.2166 |
Shuu12121/CodeMorph-BERT | 0.2978 | 0.2978 | 0.1992 |
與其他 CodeBERT 和 CodeT5 模型相比,CodeMorph-ModernBERT 實現了更高的搜索精度。
多語言評估結果
CodeMorph-ModernBERT 在多種編程語言中均表現出較高的代碼搜索性能。以下是每種語言的主要評估指標(MRR、MAP、R-Precision)概要: 點擊此處查看實驗筆記本
語言 | MRR | MAP | R-Precision |
---|---|---|---|
Python | 0.8098 | 0.8098 | 0.7520 |
Java | 0.6437 | 0.6437 | 0.5480 |
JavaScript | 0.5928 | 0.5928 | 0.4880 |
PHP | 0.7512 | 0.7512 | 0.6710 |
Ruby | 0.7188 | 0.7188 | 0.6310 |
Go | 0.5358 | 0.5358 | 0.4320 |
此外,Salesforce/codet5p-220m-bimodal 在整體上的搜索精度高於 CodeMorph-ModernBERT:
語言 | MRR | MAP | R-Precision |
---|---|---|---|
Python | 0.8322 | 0.8322 | 0.7660 |
Java | 0.8886 | 0.8886 | 0.8390 |
JavaScript | 0.7611 | 0.7611 | 0.6710 |
PHP | 0.8985 | 0.8985 | 0.8530 |
Ruby | 0.7635 | 0.7635 | 0.6740 |
Go | 0.8127 | 0.8127 | 0.7260 |
然而,在另一個數據集 google/code_x_glue_tc_nl_code_search_adv
(測試集)上,CodeMorph-ModernBERT 的得分更高:
模型 | MRR | MAP | R-Precision |
---|---|---|---|
Shuu12121/CodeMorph-ModernBERT | 0.6107 | 0.6107 | 0.5038 |
Salesforce/codet5p-220m-bimodal | 0.5326 | 0.5326 | 0.4208 |
這表明 CodeMorph-ModernBERT 在 更具挑戰性的任務和 Python 泛化方面 可能更具優勢。
🔧 技術細節
文檔未提供詳細技術實現細節。
📄 許可證
本模型在 Apache-2.0
許可證下發布。
💡 使用建議
- 確保使用的 Transformers 庫版本為
4.48.0
及以上,以保證模型正常加載和使用。 - 在進行代碼嵌入獲取時,可根據實際情況調整
max_length
參數,以平衡性能和準確性。
📞 聯繫方式
如果您對本模型有任何疑問,請發送郵件至 shun0212114@outlook.jp。



