Shuu12121 commited on
Commit
65edab8
·
verified ·
1 Parent(s): 4428ee8

Create README.md

Browse files
Files changed (1) hide show
  1. README.md +141 -0
README.md ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - en
5
+ pipeline_tag: fill-mask
6
+ tags:
7
+ - code
8
+ ---
9
+ # Shuu12121/CodeDiff-Owl-ModernBERT-base
10
+
11
+ ## モデル概要
12
+
13
+ **CodeDiff-Owl-ModernBERT-base** は、GitHub の **コード差分(diff)とコミットメッセージ** を対象にマスク化言語モデル (MLM) で学習した、**diff・コミット履歴特化の ModernBERT 系モデル** です。
14
+
15
+ * ベースモデル: `ModernBERT`
16
+ * 事前学習タスク: マスク化言語モデル (Masked Language Modeling; MLM)
17
+ * 入力フォーマット:
18
+ `"[CLS]" + commit_message + "[SEP]" + diff`
19
+ * 対象言語:
20
+ diff 内のコードとして **Python / Java / JavaScript / Rust** を含むリポジトリ
21
+
22
+ コミットメッセージと diff を同時にエンコードすることで、**「どのような変更(diff)に対して、どのような説明(コミットメッセージ)が付くか」** という対応関係を捉えることを目的としています。
23
+ 今後、学習を継続した「完全版」を公開予定です(本モデルは 1.8 epoch 時点の途中版です)。
24
+
25
+ ---
26
+
27
+ ## 想定される用途
28
+
29
+ ### 主なユースケース
30
+
31
+ * コード変更差分に対する意味的検索
32
+
33
+ * 例: 「バグ修正」「ログ出力の追加」などの自然言語・疑似クエリと diff の類似度計算
34
+ * コミットメッセージと diff の表現獲得
35
+
36
+ * 例: コミットメッセージ・diff の埋め込みベクトルを用いたクラスタリングや可視化
37
+ * diff+コミットメッセージを入力とする下流タスクの初期化
38
+
39
+ * コミットメッセージ生成・補完
40
+ * コードレビューメモの生成 など
41
+
42
+ ### 非推奨 / 注意が必要な用途
43
+
44
+ * 汎用自然言語モデルとしての利用(一般文書に対する性能は未検証)
45
+ * セキュリティやライセンス上の判断の自動化(著作権・ライセンス判定など)
46
+ * 高リスク領域での自動意思決定(法的判断、安全性が重要な場面など)
47
+
48
+ ---
49
+
50
+ ## 学習データ
51
+
52
+ ### データソース
53
+
54
+ * GitHub 上の公開リポジトリ
55
+ * GitHub の「言語判定」により **Python / Java / JavaScript / Rust** 含有と判断されたリポジトリを対象
56
+ * 各リポジトリから、コミットごとの **diff とコミットメッセージ** を収集
57
+ * 各リポジトリあたり最大 **1万件** のコミットを上限としてサンプリング
58
+ * 収集した diff 全体で、おおよそ **70〜100GB 程度**(テキストベース)の規模
59
+
60
+ ### 前処理・フィルタリング
61
+
62
+ * diff が **32KB を超える場合は途中で打ち切り**
63
+
64
+ * テキストとして読み取り可能な diff のみを利用
65
+
66
+ ---
67
+
68
+ ## 学習設定
69
+
70
+ * 初期化: ModernBERTアーキテクチャをもとにランダムな初期値から学習
71
+ * タスク: マスク化言語モデル (MLM)
72
+ * 入力フォーマット:
73
+ `"[CLS]" + commit_message + "[SEP]" + diff`
74
+ ※実装で特別な変更は加えていません
75
+ * バッチサイズ: **64**
76
+ * 学習率 (learning rate): **1e-6**
77
+ * エポック数: **1.8 epoch**(時間制約により途中で打ち切り)
78
+ * 学習時間: 約 **4日間**
79
+ * その他:
80
+
81
+ * モデル構造自体には特別な改変なし
82
+ * 純粋に MLM のみで学習(コントラスト学習などは未実施)
83
+
84
+ 今後、同様の設定でもう少し長く学習した「完全版」を公開予定です。
85
+
86
+ ---
87
+
88
+ ## 入力形式と使い方
89
+
90
+ ### 入力形式
91
+
92
+ * **Segment A (sentence A)**: コミットメッセージ(自然言語)
93
+ * **Segment B (sentence B)**: 対応する diff テキスト
94
+
95
+ トークナイザには、以下のように「2つの入力」として与えてください。
96
+
97
+ ```python
98
+ from transformers import AutoTokenizer, AutoModel
99
+
100
+ model_name = "Shuu12121/CodeDiff-Owl-ModernBERT-base"
101
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
102
+ model = AutoModel.from_pretrained(model_name)
103
+
104
+ commit_message = "Fix bug in user login flow"
105
+ diff_text = """
106
+ diff --git a/app/auth.py b/app/auth.py
107
+ index 1234567..89abcde 100644
108
+ --- a/app/auth.py
109
+ +++ b/app/auth.py
110
+ @@ -10,7 +10,9 @@ def login(user, password):
111
+ - if user.password == password:
112
+ - return True
113
+ - return False
114
+ + if not user:
115
+ + return False
116
+ + return user.check_password(password)
117
+ """
118
+
119
+ inputs = tokenizer(
120
+ commit_message,
121
+ diff_text,
122
+ return_tensors="pt",
123
+ truncation=True,
124
+ )
125
+
126
+ outputs = model(**inputs)
127
+ last_hidden_state = outputs.last_hidden_state # [batch, seq_len, hidden]
128
+ cls_embedding = last_hidden_state[:, 0] # [CLS] トークンの埋め込み
129
+ ```
130
+
131
+ * `cls_embedding` を **コミット+diff の表現ベクトル** として検索・クラスタリング等に利用することを想定しています。
132
+ * diff が非常に長い場合はモデル側でトークン長に応じて自動的に切り詰められるため、必要に応じて自前で要約・抽出を行ってください。
133
+
134
+ ---
135
+
136
+ ## 評価
137
+
138
+ * 本モデルは現時点では **事前学習段階のスナップショット (1.8 epoch)** です。
139
+ * 具体的な使用用途については今後検討予定です。
140
+
141
+ ---