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]

Downloads last month
67
Safetensors
Model size
152M params
Tensor type
F32
·
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no library tag.

Datasets used to train Shuu12121/CodeHawks-ModernBERT