description: | このモデルは Shuu12121/CodeMorph-BERT をベースに、google/code_x_glue_tc_nl_code_search_adv データセットを用いて追加トレーニングを行いました。
これにより、コード検索精度の向上を実現しました。
実験コードはこちらです 📄 CodeMorphV2 Notebook (GitHub)

🔬 実験結果

CodeSearchNet (候補プールサイズ: 100) における評価

Metric CodeMorph-BERT CodeMorph-BERTv2 Microsoft CodeBERT
MRR 0.6678 0.6607 0.5598
MAP 0.6678 0.6607 0.5598
R-Precision 0.5650 0.5510 0.4650
Recall@1 0.5650 0.5510 0.4650
Recall@5 0.7970 0.7970 0.6490
Recall@10 0.8600 0.8630 0.7410
Recall@50 0.9770 0.9790 0.9640
Recall@100 1.0000 1.0000 1.0000
Precision@1 0.5650 0.5510 0.4650
NDCG@10 0.7091 0.7050 0.5936

google/code_x_glue_tc_nl_code_search_adv データセットでの評価

Metric CodeMorph-BERT CodeMorph-BERTv2 Microsoft CodeBERT
MRR 0.3023 0.3154 0.3562
Recall@1 0.2035 0.2185 0.2527
Recall@5 0.3909 0.4021 0.4490
Recall@10 0.4936 0.5046 0.5622
Recall@50 0.8134 0.8231 0.8995
Recall@100 1.0000 1.0000 1.0000
Precision@1 0.2035 0.2185 0.2527
NDCG@10 0.3344 0.3469 0.3912

📝 CodeMorph-BERT vs CodeMorph-BERTv2 の比較

  • CodeSearchNet におけるパフォーマンス

    • CodeMorph-BERTv2CodeMorph-BERT とほぼ同等の精度を維持しており、リコールとNDCGにおいてわずかに改善が見られます。
    • Recall@10Recall@50 は v2 のほうがわずかに高く、全体的に検索精度が向上しています。
  • google/code_x_glue_tc_nl_code_search_adv におけるパフォーマンス

    • CodeMorph-BERTv2CodeMorph-BERT より MRR、Recall@1、Recall@5、Recall@10 の値が向上しており、検索精度の改善が見られます。
    • Precision@1 も向上しており、上位検索結果の精度が向上していることが分かります。
  • 総合的な考察

    • CodeMorph-BERTv2CodeMorph-BERT と比べて コード検索の再現率 (Recall) を向上 させており、より優れた検索結果を返すことが可能になりました。
    • ただし、Microsoft CodeBERT と比較すると、google/code_x_glue_tc_nl_code_search_adv のデータセットではまだ改善の余地があり、さらなるチューニングの余地が残っています。

💡 使用方法

from transformers import AutoModelForMaskedLM, AutoTokenizer
import torch

# モデルとトークナイザーのロード
model_name = "Shuu12121/CodeMorph-BERTv2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForMaskedLM.from_pretrained(model_name)

# 入力コード([MASK] を含む)
text = "def add(a, b): return a [MASK] b"

# トークナイズ
inputs = tokenizer(text, return_tensors="pt")

# 推論実行
with torch.no_grad():
    outputs = model(**inputs)
    logits = outputs.logits

# マスク位置のトークンを予測
mask_token_index = torch.where(inputs.input_ids == tokenizer.mask_token_id)[1]
predicted_token_id = logits[0, mask_token_index, :].argmax(axis=-1)
predicted_token = tokenizer.decode(predicted_token_id)

print("予測されたトークン:", predicted_token)
Downloads last month
22
Safetensors
Model size
63.4M 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.

Model tree for Shuu12121/CodeMorph-BERTv2

Finetuned
(1)
this model

Dataset used to train Shuu12121/CodeMorph-BERTv2