Shuu12121's picture
Create README.md
6ef5ff6 verified
metadata
license: apache-2.0
datasets:
  - Shuu12121/github-file-programs-dataset-go
  - Shuu12121/github-file-programs-dataset-java
  - Shuu12121/github-file-programs-dataset-javascript
  - Shuu12121/github-file-programs-dataset-ruby
  - Shuu12121/github-file-programs-dataset-rust
  - Shuu12121/github-file-programs-dataset-php
  - Shuu12121/github-file-programs-dataset-python
  - Shuu12121/github-file-programs-dataset-typescript
language:
  - en
pipeline_tag: fill-mask
tags:
  - code
  - python
  - java
  - javascript
  - ruby
  - rust
  - go
  - php
  - typescript
  - modernbert
library_name: transformers

Shuu12121/CodeModernBERT-Crow-v3-len1024 🐦‍⬛

このモデルは、ModernBERT アーキテクチャに基づくコード特化型言語モデルです。

既存の事前学習済みモデル(ModernBERT-base など)の重みは使用せず、 githubより抽出したファイルレベルのデータで事前学習したモデルです.


モデルの詳細

  • アーキテクチャ: ModernBERT (base-sized)

  • 学習状態: スクラッチ学習(Trained from scratch)

  • 学習済み言語: Python, Java, JavaScript, TypeScript, Ruby, Rust, Go, PHP

  • パラメータ数: 約 150M

  • 最大入力長:

    • 推論時: 最大 8,192 トークン
    • 事前学習時: 最大 1,024 トークン
  • 主な特徴:

    • コードデータに特化した BPE トークナイザを新規構築
    • 通常の MLM に加え、コード構造を意識した 行単位マスキング を導入

学習手法:2 段階の事前学習

段階 1(ph1): ランダムマスキング(MLM)

  • トークン単位で 30% をランダムにマスク
  • ランダム初期化状態から、コードの基本的な語彙分布や構文的特徴を学習

段階 2(ph2): 行ごとのマスキング(Line-based MLM)

  • 行単位で 30% をランダムに選択
  • 選択された行に含まれる 全トークンをマスク
  • 空白のみからなるトークンはマスク対象から除外

効果: 関数内における制御構造や変数の依存関係など、 コードの構造的な意味表現をより強く獲得できることを確認しています。


使用方法

このモデルは fill-mask タスクとして直接利用できるほか、 ファインチューニングを行うことで意味的コード検索やコード理解タスクの ベースモデルとして利用できます。

from transformers import AutoTokenizer, AutoModelForMaskedLM
#MLMモデルとして読み込む場合
tokenizer = AutoTokenizer.from_pretrained("Shuu12121/CodeModernBERT-Crow-v3-len1024")
model = AutoModelForMaskedLM.from_pretrained("Shuu12121/CodeModernBERT-Crow-v3-len1024")

Sentence-Transformersを用いてファインチューニングを行う場合の読み込み方

from sentence_transformers import SentenceTransformer,models

word_embedding_model = models.Transformer("Shuu12121/CodeModernBERT-Crow-v3-len1024")
word_embedding_model.max_seq_length = 1024
#CLSトークンを用いる場合pooling_mode_cls_tokenのみTrue
#平均プーリングを用いる場合 pooling_mode_mean_tokensのみTrue
pooling_model = models.Pooling(
    word_embedding_model.get_word_embedding_dimension(),
    pooling_mode_cls_token=True,
    pooling_mode_mean_tokens=False,
    pooling_mode_max_tokens=False,
    pooling_mode_weightedmean_tokens=False,
    pooling_mode_lasttoken=False,
)
model = SentenceTransformer(modules=[word_embedding_model, pooling_model])

そのほかのモデル