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-BERTv2
はCodeMorph-BERT
とほぼ同等の精度を維持しており、リコールとNDCGにおいてわずかに改善が見られます。Recall@10
やRecall@50
は v2 のほうがわずかに高く、全体的に検索精度が向上しています。
google/code_x_glue_tc_nl_code_search_adv におけるパフォーマンス
CodeMorph-BERTv2
はCodeMorph-BERT
より MRR、Recall@1、Recall@5、Recall@10 の値が向上しており、検索精度の改善が見られます。Precision@1
も向上しており、上位検索結果の精度が向上していることが分かります。
総合的な考察
CodeMorph-BERTv2
はCodeMorph-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
Model tree for Shuu12121/CodeMorph-BERTv2
Base model
Shuu12121/CodeMorph-BERT