-
アーキテクチャ: ModernBERT (base-sized)
-
学習状態: スクラッチ学習(Trained from scratch)
-
学習済み言語: Python, Java, JavaScript, TypeScript, Ruby, Rust, Go, PHP
-
パラメータ数: 約 149M
-
最大入力長:
- 推論時: 最大 8,192 トークン
- 事前学習時: 最大 2,048 トークン
-
主な特徴:
- コードデータに特化した BPE トークナイザを新規構築
- 通常の MLM に加え、コード構造を意識した 行単位マスキング を導入
同じ条件で学習(CodeSearchNetから各言語3万件を取り出しMultiple Negatives Ranking Lossを用いてファインチュー二ング)した際,
ベンチマーク(CodeSearchNetRetrieval)において、低い学習率を用いると、既存のモデル以上の
CodeBERT、GraphCodeBERT、既存の ModernBERT-base を上回る性能を示していました。
また各学習率の最良のモデルは以下のようになりました。各学習率全てのパターンにおいても低い学習率で学習したOwl-ph2-base群が最も性能が高いことが確認されました。
比較的高い学習率(例: 5e-5)では、他のモデルと比較して性能が伸びにくい、学習率を下げた時の伸び幅が大きい
といった傾向が確認されており、
低学習率での安定した最適化が有効であることが分かっています。
(原因は行単位による継続事前学習により他のモデルと比較してコードに対して理解できているので、過適合に陥りやすいと考えています。)
1from transformers import AutoTokenizer, AutoModelForMaskedLM
2#MLMモデルとして読み込む場合
3tokenizer = AutoTokenizer.from_pretrained("Shuu12121/Owl-ph2-base-len2048")
4model = AutoModelForMaskedLM.from_pretrained("Shuu12121/Owl-ph2-base-len2048")
1from sentence_transformers import SentenceTransformer,models
2
3word_embedding_model = models.Transformer("Shuu12121/Owl-ph2-base-len2048")
4word_embedding_model.max_seq_length = 2048
5#CLSトークンを用いる場合pooling_mode_cls_tokenのみTrue
6#平均プーリングを用いる場合 pooling_mode_mean_tokensのみTrue
7pooling_model = models.Pooling(
8 word_embedding_model.get_word_embedding_dimension(),
9 pooling_mode_cls_token=True,
10 pooling_mode_mean_tokens=False,
11 pooling_mode_max_tokens=False,
12 pooling_mode_weightedmean_tokens=False,
13 pooling_mode_lasttoken=False,
14)
15model = SentenceTransformer(modules=[word_embedding_model, pooling_model])