NightOwl-35M🦉

NightOwl-35M は、NightOwl ファミリーと同一の2フェーズ手法で一から事前学習した、軽量な ModernBERT 系コードエンコーダです。

NightOwl-base(≈150M)では重すぎる用途 — CPU 推論、オンデバイス検索、大規模コーパスの一括埋め込み — を想定した省メモリ・低レイテンシ版です。 トークナイザはファミリー共通のため、上位モデルとインデックスの互換性を保ったまま差し替えられます。

チェックポイント

他モデルと同様に2フェーズで学習し、最終版を公開します。

Repo Size Phase 説明
Shuu12121/NightOwl-35M-Pre 35M Phase 1 混合データでの MLM 事前学習(code + NL + docs)
Shuu12121/NightOwl-35M 35M Phase 2 コード限定の行単位 MLM 継続学習 — 推奨

モデルサイズ

ModernBERT エンコーダ(local/global 交互アテンション、RoPE 位置埋め込み)。トークナイザはファミリー共通の 50,368 語彙 BPE です。

NightOwl-35M NightOwl NightOwl-large
Architecture ModernBERT ModernBERT ModernBERT
パラメータ数(概算) ≈34M ≈150M ≈300M
hidden_size 384 768 1024
num_hidden_layers 10 19 28
num_attention_heads 6 12 16
intermediate_size 768 1536 1536
vocab_size 50,368 50,368 50,368
学習時 max length 1024 (Phase 1) / 2048 (Phase 2) 1024 / 2048 1024 / 2048

パラメータ内訳

構成要素 計算 パラメータ数
トークン埋め込み 50,368 × 384 ≈19.3M(**全体の約56%**)
Transformer 10層 1層あたり ≈1.48M ≈14.8M
MLM ヘッド(decoder は埋め込みと重み共有、bias のみ) 384×384 + 50,368 ≈0.2M
合計 ≈34.3M

語彙を上位モデルと共有しているため、この規模では埋め込み行列が全体の過半を占めます。非埋め込みパラメータは ≈15M です。

アーキテクチャ詳細

項目
global_attn_every_n_layers 3(全10層中、layer 0/3/6/9 の4層が global、残り6層が local)
local_attention_window 128
global_rope_theta 160,000
local_rope_theta 10,000
max_position_embeddings 8,192
hidden_activation GeLU(GeGLU 型 MLP)
classifier_pooling CLS
attention_bias / mlp_bias / norm_bias すべて false
dtype float32(学習は fp16 混合精度)

max_position_embeddings は 8,192 ですが、**実際に学習した系列長はどちらも1024トークンです。それを超える長さは外挿になるため、長文コードでの品質は保証されません。

学習データ

ファミリー共通。Phase 1 は全ソースを使用し、Phase 2 はコード関連サブセットのみで継続学習します。

1. bigcode/starcoder2data-extras(12サブセット)

max_samples はサブセットごとのサンプリング上限、max_chars は長文ドキュメントの打ち切り長です。

Subset max_samples 優先度 備考 Phase 2
kaggle 2,000,000 high ノートブック形式のコード
stackoverflow 2,000,000 high Q&A のコードスレッド
issues 1,000,000 medium GitHub issue テキスト
owm 1,000,000 medium Open web math
lhq 3,000,000 high 高品質テキスト
wikipedia 1,000,000 medium 百科事典的自然言語
arxiv 600,000 low 長い LaTeX 文書(max_chars=10,000
documentation 2,000,000 high 技術ドキュメント
ir_cpp 100,000 low C++ IR(max_chars=5,000
ir_low_resource 100,000 low 低リソース言語 IR(max_chars=5,000
ir_python 100,000 low Python IR(max_chars=5,000
ir_rust 100,000 low Rust IR(max_chars=5,000

2. Shuu12121/github-file-programs-dataset(8言語)

ファイル単位のソースコード。言語ごとに1リポジトリ(テキストフィールド: content)。両フェーズで使用します。

python, javascript, typescript, java, go, rust, ruby, php

サンプリング上限: Phase 1 — 1言語あたり最大 1,000,000 ファイル / Phase 2 — 最大 2,000,000 ファイル。

学習手順

両フェーズとも mlm_probability = 0.3 のマスク言語モデリングです。

  1. Phase 1 — 混合事前学習. 全データソース(code + NL + docs)に対する通常のランダムトークン MLM(mlm collator)。NightOwl-35M-Pre を生成。
  2. Phase 2 — コード限定の継続学習. コード関連サブセットのみに対する行単位 MLM(line_no_space collator)。ランダムトークンではなくソースコードの行全体をマスクし、コード検索の下流タスクに目的関数を近づけます。NightOwl-35M を生成。

長い事例はチャンク分割(split_long_examples: true)し、打ち切らずに全トークンを使用します。

Hyperparameter NightOwl-35M NightOwl (base) NightOwl-large
mlm_probability 0.3 0.3 0.3
スケジューラ cosine, warmup ratio 0.05 cosine, warmup ratio 0.05 cosine, warmup ratio 0.05
Learning rate TBD 5e-5 5e-5
Weight decay 0.01 0.01 0.01
Precision fp16 fp16 fp16
Epochs 1 1 1
per_device_train_batch_size 16 8 4
gradient_accumulation_steps 16 32 64
実効バッチサイズ 256 256 256
Phase 1 max_length 1024 1024 1024
Phase 2 max_length 1024 2048 2048

実効バッチサイズはファミリー全体で 256 に揃えており、デバイス単位の分割のみが異なります。

使い方

NightOwl-35M はエンコーダのバックボーンです。マスク言語モデリング / 特徴抽出にそのまま読み込むか、コード検索用に SentenceTransformer としてラップして使います。

Masked language modeling

from transformers import AutoTokenizer, AutoModelForMaskedLM

tokenizer = AutoTokenizer.from_pretrained("Shuu12121/NightOwl-35M")
model = AutoModelForMaskedLM.from_pretrained("Shuu12121/NightOwl-35M")

特徴抽出

from transformers import AutoTokenizer, AutoModel
import torch

tokenizer = AutoTokenizer.from_pretrained("Shuu12121/NightOwl-35M")
model = AutoModel.from_pretrained("Shuu12121/NightOwl-35M")

code = "def add(a, b):\n    return a + b"
inputs = tokenizer(code, return_tensors="pt", truncation=True, max_length=2048)
with torch.no_grad():
    embeddings = model(**inputs).last_hidden_state  # [1, seq_len, 384]

出力次元は 384 です(base の 768、large の 1024 と異なる点に注意)。

制限事項

  • NightOwl-35M は理解・検索用のエンコーダであり、生成モデルではありません — コードは生成できません。
  • コード検索性能は SentenceTransformer でのファインチューニング後に発揮されます。素のバックボーンはそのままでは検索器として使えません。
  • 容量が小さいぶん、上位モデルより下流性能は低くなります。速度・メモリと精度のトレードオフを前提としたモデルです。
  • 学習データは8つのプログラミング言語に偏っており、それ以外の言語では性能が落ちる可能性があります。
  • 事前学習データは公開ソースからサンプリングしており、バグ・安全でないパターン・偏った内容を含む可能性があります。
  • max_position_embeddings は 8,192 ですが実学習長は最大 2,048 です。長い入力では品質が劣化する可能性があります。

引用

@misc{owl_code_pretraining,
  author       = {Shun0212},
  title        = {Owl Code Pretraining: A minimal toolkit for building code-specialized pretrained encoders},
  year         = {2026},
  publisher    = {GitHub},
  howpublished = {\url{https://github.com/Shun0212/codeowl-training-core}}
}

Downloads last month
4
Safetensors
Model size
34.3M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Shuu12121/NightOwl-35M

Finetunes
1 model