Create README.md
Browse files
README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
datasets:
|
| 4 |
+
- code-search-net/code_search_net
|
| 5 |
+
language:
|
| 6 |
+
- en
|
| 7 |
+
pipeline_tag: sentence-similarity
|
| 8 |
+
tags:
|
| 9 |
+
- code
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
# CodeModernBERT-Snake🐍
|
| 13 |
+
コード検索と理解を強化する軽量・長シーケンス対応モデル
|
| 14 |
+
|
| 15 |
+
## 概要
|
| 16 |
+
|
| 17 |
+
CodeModernBERT-Snake🐍は、コード検索やコードクローン検出を手軽に行えるよう設計された軽量モデルです。
|
| 18 |
+
モデルサイズが従来の約半分(76Mパラメータ)に削減されているため、学習コストが大幅に低減しました。
|
| 19 |
+
また、最大シーケンス長を8192トークンに拡張し、長大なコードや複雑な関数にも対応できるようになっています。
|
| 20 |
+
|
| 21 |
+
**主な用途:**
|
| 22 |
+
- コード検索
|
| 23 |
+
- コード理解
|
| 24 |
+
- コードクローン検出
|
| 25 |
+
|
| 26 |
+
**データセット:** CodeSearchNet (全言語)
|
| 27 |
+
**ライセンス:** Apache 2.0
|
| 28 |
+
|
| 29 |
+
---
|
| 30 |
+
|
| 31 |
+
## 主な特徴
|
| 32 |
+
|
| 33 |
+
- **最大シーケンス長8192トークン対応**
|
| 34 |
+
長大なコードや複雑な関数にも対応可能です。(従来モデルは512トークン対応)
|
| 35 |
+
|
| 36 |
+
- **モデルサイズを約半分に削減**
|
| 37 |
+
CodeModernBERT-Owl(152Mパラメータ)に比べて約半分(76Mパラメータ)まで軽量化。
|
| 38 |
+
メモリ効率が向上し、推論速度も改善されました。
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
---
|
| 42 |
+
|
| 43 |
+
## モデルパラメータ
|
| 44 |
+
|
| 45 |
+
| パラメータ名 | 設定値 |
|
| 46 |
+
|-----------------------------------|-------|
|
| 47 |
+
| **vocab_size** | 50004 |
|
| 48 |
+
| **hidden_size** | 512 |
|
| 49 |
+
| **num_hidden_layers** | 12 |
|
| 50 |
+
| **num_attention_heads** | 8 |
|
| 51 |
+
| **intermediate_size** | 2048 |
|
| 52 |
+
| **max_position_embeddings** | 8192 |
|
| 53 |
+
| **type_vocab_size** | 2 |
|
| 54 |
+
| **hidden_dropout_prob** | 0.1 |
|
| 55 |
+
| **attention_probs_dropout_prob** | 0.1 |
|
| 56 |
+
| **local_attention_window** | 128 |
|
| 57 |
+
| **rope_theta** | 160000|
|
| 58 |
+
| **local_attention_rope_theta** | 10000 |
|
| 59 |
+
|
| 60 |
+
---
|
| 61 |
+
|
| 62 |
+
## 実験結果
|
| 63 |
+
|
| 64 |
+
### 学習方法
|
| 65 |
+
単純なMLM(マスク付き言語モデル)学習後、継続学習を実施し、以下の評価結果を得ました。
|
| 66 |
+
学習用データセット: CodeSearchNet (Train)
|
| 67 |
+
比較用データセット: `code_x_glue_ct_code_to_text` (Test)
|
| 68 |
+
評価指標: MRR, R-Precision(プールサイズ100)
|
| 69 |
+
|
| 70 |
+
#### MLM学習後
|
| 71 |
+
|
| 72 |
+
| 言語 | MRR | R-Precision |
|
| 73 |
+
|------------|-------|-------------|
|
| 74 |
+
| Python | 0.4216| 0.2960 |
|
| 75 |
+
| Java | 0.4211| 0.3000 |
|
| 76 |
+
| JavaScript | 0.2753| 0.1710 |
|
| 77 |
+
| PHP | 0.4642| 0.3330 |
|
| 78 |
+
| Ruby | 0.2637| 0.1530 |
|
| 79 |
+
| Go | 0.4410| 0.2800 |
|
| 80 |
+
|
| 81 |
+
#### 継続学習後
|
| 82 |
+
|
| 83 |
+
| 言語 | MRR | R-Precision |
|
| 84 |
+
|------------|--------|-------------|
|
| 85 |
+
| Python | 0.7553 | 0.6730 |
|
| 86 |
+
| Java | 0.7660 | 0.6890 |
|
| 87 |
+
| JavaScript | 0.5934 | 0.4870 |
|
| 88 |
+
| PHP | 0.7766 | 0.7030 |
|
| 89 |
+
| Ruby | 0.6056 | 0.5020 |
|
| 90 |
+
| Go | 0.8323 | 0.7550 |
|
| 91 |
+
|
| 92 |
+
### 考察
|
| 93 |
+
継続学習後のモデルでは、すべての言語で0.2以上のMRRおよびR-Precisionの向上が確認できました。
|
| 94 |
+
特にPython、Java、PHP、Goにおける精度向上が顕著であり、従来のモデルに追随するレベルに達しています。
|
| 95 |
+
|
| 96 |
+
---
|
| 97 |
+
|
| 98 |
+
## 注意点
|
| 99 |
+
最大シーケンス長8192トークンに対応していますが、8192トークンまでの学習を特別に行ったわけではないため、
|
| 100 |
+
2048トークンを超えた入力では精度が低下する可能性があります。モデルサイズを削減する過程で対応範囲を拡張しましたが、
|
| 101 |
+
あくまでオプションとしての対応と捉えてください。ご了承ください。
|
| 102 |
+
|
| 103 |
+
---
|
| 104 |
+
|
| 105 |
+
### 最後に
|
| 106 |
+
CodeModernBERT-Snake🐍は、コード検索や理解のコストを削減しながら高い精度を実現することを目指して設計されました。
|
| 107 |
+
軽量で長大なコードも処理できるため、多くのユースケースで役立つモデルです。
|
| 108 |
+
ぜひ活用してみてください!
|