File size: 4,661 Bytes
0d5a48d 6ae040d a83a7d7 6ae040d 0262e89 6ae040d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
---
license: mit
datasets:
- google/code_x_glue_tc_nl_code_search_adv
base_model:
- Shuu12121/CodeMorph-BERT
pipeline_tag: fill-mask
tags:
- code
---
description: |
このモデルは `Shuu12121/CodeMorph-BERT` をベースに、`google/code_x_glue_tc_nl_code_search_adv` データセットを用いて追加トレーニングを行いました。
これにより、コード検索精度の向上を実現しました。
実験コードはこちらです
📄 [CodeMorphV2 Notebook (GitHub)](https://github.com/Shun0212/CodeBERTPretrained/blob/5c296a620cdbaadb7753b82ff419be0a142e1176/codemorphv2.ipynb)
### 🔬 **実験結果**
#### **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` のデータセットではまだ改善の余地があり、さらなるチューニングの余地が残っています。
---
## 💡 **使用方法**
```python
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)
|