--- license: mit datasets: - code-search-net/code_search_net metrics: - code_eval pipeline_tag: fill-mask tags: - code --- # **CodeMorph-BERT** CodeMorph-BERT は、CodeSearchNet の Python コードデータを用いて **ゼロから** 訓練した CodeBERT モデルです。 コード補完、関数名予測、マスクされたトークンの予測に最適化されています。 --- ## 🔗 Colab で試す [![Use on Colab](https://img.shields.io/badge/Run%20on-Colab-brightgreen?logo=googlecolab)](https://github.com/Shun0212/CodeBERTPretrained/blob/main/UseMyCodeBERT.ipynb) 📌 **詳細な使い方は、こちらの Jupyter Notebook をご確認ください。** --- ## モデルの詳細 - **ベースモデル**: なし(ゼロから CodeBERT を学習) - **データセット**: CodeSearchNet (Python サブセット) - **トレーニング目的**: Masked Language Modeling (MLM) - **トークナイザー**: Python コード向けに訓練された WordPiece トークナイザー --- ## 実験結果 ### CodeSearchNet (候補プールサイズ: 100) における評価 | **Metric** | **CodeMorph-BERT** | **Microsoft CodeBERT** | |-------------------|--------------------|------------------------| | **MRR** | **0.6678** | 0.5598 | | **MAP** | **0.6678** | 0.5598 | | **R-Precision** | **0.5650** | 0.4650 | | **Recall@1** | **0.5650** | 0.4650 | | **Recall@5** | **0.7970** | 0.6490 | | **Recall@10** | **0.8600** | 0.7410 | | **Recall@50** | **0.9770** | 0.9640 | | **Recall@100** | **1.0000** | 1.0000 | | **Precision@1** | **0.5650** | 0.4650 | | **Precision@5** | **0.6526** | 0.5351 | | **Precision@10** | **0.6610** | 0.5476 | | **Precision@50** | **0.6675** | 0.5592 | | **Precision@100** | **0.6678** | 0.5598 | | **NDCG@1** | **0.5650** | 0.4650 | | **NDCG@5** | **0.6887** | 0.5636 | | **NDCG@10** | **0.7091** | 0.5936 | | **NDCG@50** | **0.7363** | 0.6444 | | **NDCG@100** | **0.7401** | 0.6503 | | **F1@1** | **0.5650** | 0.4650 | | **F1@5** | **0.6899** | 0.5646 | | **F1@10** | **0.7046** | 0.5866 | | **F1@50** | **0.7169** | 0.6084 | | **F1@100** | **0.7175** | 0.6095 | 詳細な実験内容やコードは、[こちらの評価ノートブック](https://github.com/Shun0212/CodeBERTPretrained/blob/main/EvalCodeMor.ipynb) でご確認いただけます。(ミスに気が付いたため現在修正中,追加で実験しています.更新までお待ちください、計算の指標自体は変わりませんがpythonのdocstringコメントを消して追実験しています) --- ## 💡 使用方法 以下は、Hugging Face Transformers を用いた CodeMorph-BERT の簡単な推論例です。 ```python from transformers import AutoModelForMaskedLM, AutoTokenizer import torch # モデルとトークナイザーのロード model_name = "Shuu12121/CodeMorph-BERT" 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)