CodeHawks‑ModernBERT
概要
CodeHawks‑ModernBERT
は、コード検索およびコード理解のタスク向けに1からトレーニングしたCodeMorph-ModernBERT-BPE-1.3に追加学習を行った事前学習済みモデルです.
従来のCodeMorph-ModernBERTシリーズとは異なる,より構造を意識した継続学習を行い,これまでのCodeMorphシリーズとは
一線を画す性能
を実現しました.
最大シーケンス長2048トークン
(従来のMicrosoftモデルは512トークン)
アーキテクチャ
: ModernBERT ベース
目的
: コード検索 / コード理解 /コードクローン発見
トレーニングデータ
: CodeSearchNet (全言語) code_x_glue_tc_text_to_code
ライセンス
: Apache 2.0
主な特徴
長いシーケンス対応
最大2048トークンのシーケンス処理が可能。長いコードや複雑な関数にも対応します。
高いコード検索,コード理解,コードクローン発見性能
Pythonをはじめとする6言語対応のBPEレベルのトークナイザとコード全体を把握させるための事前学習によりこれまで苦手だったJava,JavaScript,RubyやGoでの性能が改善し,すべての言語でこれまでのシリーズの中で最高性能を達成しました.
専用にトレーニングされたモデル
CodeSearchNet,CodeXGLUEのデータセットを用いて1から事前学習したCodeMorph-ModernBERT-BPE-1.3に対して,同じデータセットで異なる継続学習を行い,より洗練されたコード理解を実現しました.
パラメータについて
以下のパラメータで設計しています。
パラメータ名
設定値
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
local_attention_rope_theta
10000
モデルの使用方法
Hugging Face Transformers ライブラリを利用して、本モデルを簡単にロードできます。(※ Transformers のバージョンは
4.48.0
以上のみ動作します)
モデルのロード
from transformers import AutoModelForMaskedLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("Shuu12121/CodeHawks-ModernBERT" )
model = AutoModelForMaskedLM.from_pretrained("Shuu12121/CodeHawks-ModernBERT" )
コード埋め込みの取得
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)
評価結果
code_x_glue_ct_code_to_text
データセットのTestを用いて評価を行いました.(プールサイズ100)
実験結果は
こちらのリンクからご確認
できます
Python
言語
モデル
MRR
MAP
R‑Precision
Python
Shuu12121/CodeMorph-ModernBERT
0.8098
0.8098
0.7520
Python
Shuu12121/CodeMorph-ModernBERT‑BPE‑1.0
0.4110
0.4110
0.2950
Python
microsoft/graphcodebert‑base
0.5493
0.5493
0.4480
Python
microsoft/codebert‑base‑mlm
0.5243
0.5243
0.4480
Python
Salesforce/codet5p‑220m‑bimodal
0.8266
0.8266
0.7610
Python
Shuu12121/CodeHawks‑ModernBERT
0.8551
0.8551
0.8000
Java
言語
モデル
MRR
MAP
R‑Precision
Java
Shuu12121/CodeMorph-ModernBERT
0.6386
0.6386
0.5380
Java
Shuu12121/CodeMorph-ModernBERT‑BPE‑1.0
0.3627
0.3627
0.2460
Java
microsoft/graphcodebert‑base
0.5879
0.5879
0.4900
Java
microsoft/codebert‑base‑mlm
0.3134
0.3134
0.2160
Java
Salesforce/codet5p‑220m‑bimodal
0.8867
0.8867
0.8330
Java
Shuu12121/CodeHawks‑ModernBERT
0.7971
0.7971
0.7370
JavaScript
言語
モデル
MRR
MAP
R‑Precision
JavaScript
Shuu12121/CodeMorph-ModernBERT
0.5996
0.5996
0.5020
JavaScript
Shuu12121/CodeMorph-ModernBERT‑BPE‑1.0
0.2184
0.2184
0.1110
JavaScript
microsoft/graphcodebert‑base
0.5051
0.5051
0.4000
JavaScript
microsoft/codebert‑base‑mlm
0.2694
0.2694
0.1760
JavaScript
Salesforce/codet5p‑220m‑bimodal
0.7628
0.7628
0.6730
JavaScript
Shuu12121/CodeHawks‑ModernBERT
0.7634
0.7634
0.6940
PHP
言語
モデル
MRR
MAP
R‑Precision
PHP
Shuu12121/CodeMorph-ModernBERT
0.7513
0.7513
0.6660
PHP
Shuu12121/CodeMorph-ModernBERT‑BPE‑1.0
0.3998
0.3998
0.2830
PHP
microsoft/graphcodebert‑base
0.6225
0.6225
0.5100
PHP
microsoft/codebert‑base‑mlm
0.2642
0.2642
0.1620
PHP
Salesforce/codet5p‑220m‑bimodal
0.9027
0.9027
0.8600
PHP
Shuu12121/CodeHawks‑ModernBERT
0.8578
0.8578
0.8060
Ruby
言語
モデル
MRR
MAP
R‑Precision
Ruby
Shuu12121/CodeMorph-ModernBERT
0.7126
0.7126
0.6190
Ruby
Shuu12121/CodeMorph-ModernBERT‑BPE‑1.0
0.2436
0.2436
0.1360
Ruby
microsoft/graphcodebert‑base
0.5876
0.5876
0.4830
Ruby
microsoft/codebert‑base‑mlm
0.3318
0.3318
0.2270
Ruby
Salesforce/codet5p‑220m‑bimodal
0.7568
0.7568
0.6650
Ruby
Shuu12121/CodeHawks‑ModernBERT
0.7469
0.7469
0.6630
Go
言語
モデル
MRR
MAP
R‑Precision
Go
Shuu12121/CodeMorph-ModernBERT
0.5423
0.5423
0.4420
Go
Shuu12121/CodeMorph-ModernBERT‑BPE‑1.0
0.2495
0.2495
0.1250
Go
microsoft/graphcodebert‑base
0.4243
0.4243
0.3270
Go
microsoft/codebert‑base‑mlm
0.3262
0.3262
0.2440
Go
Salesforce/codet5p‑220m‑bimodal
0.8117
0.8117
0.7280
Go
Shuu12121/CodeHawks‑ModernBERT
0.9043
0.9043
0.8620
code_x_glue_tc_nl_code_search_adv (Test) で評価した結果はこちらです
モデル
MRR
MAP
R‑Precision
Shuu12121/CodeHawks‑ModernBERT
0.6679
0.6679
0.5748
Salesforce/codet5p‑220m‑bimodal
0.5359
0.5359
0.4258
結果の考察と工夫点
初期のCodeMorph-ModernBERTではSentencePieceを使って作成したトークナイザを利用しモデルを作成していましたが,pythonやphpでは高い性能を出せたものの,ほかの言語ではあまり実用的なレベルではありませんでした.
そこでよりプログラムの構造をつかんだトークナイザが必要だと感じ,BPEで作成したトークナイザを作成し,それを用いて事前学習を行いました(CodeMorp-ModernBERT-BPE-1.0)が、初期のモデルと比べてもいい性能が出せなかったので,より全体像を意識した学習方法を試してみた結果これまでのモデルよりも高い性能かつ.これまで苦手だったJavaやGoでの性能を上げることができました.
また実験結果から考察できることは,Python,GOにおいては実験したすべてのモデルの中でCodeHawks‑ModernBERTモデルが一番優れており,ほかの言語でもcodet5p‑220m‑bimodalと競合できるレベルまで性能を上げることができています.
さらに同じアーキテクチャ、同じデータセットで事前学習しているCodeMorph-ModernBERT‑BPE‑1.0 よりも圧倒的に高い性能を出していることから、
この継続学習がコード検索において有効
であったことが推測できます.
ライセンス
本モデルは
Apache-2.0
ライセンスのもとで提供されます。
連絡先
このモデルで何か質問等がございましたらこちらのメールアドレスまでお願いします
[email protected]