Instructions to use Shuu12121/NightOwl-35M with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Shuu12121/NightOwl-35M with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("fill-mask", model="Shuu12121/NightOwl-35M")# Load model directly from transformers import AutoTokenizer, AutoModelForMaskedLM tokenizer = AutoTokenizer.from_pretrained("Shuu12121/NightOwl-35M") model = AutoModelForMaskedLM.from_pretrained("Shuu12121/NightOwl-35M", device_map="auto") - Notebooks
- Google Colab
- Kaggle
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 のマスク言語モデリングです。
- Phase 1 — 混合事前学習. 全データソース(code + NL + docs)に対する通常のランダムトークン MLM(
mlmcollator)。NightOwl-35M-Preを生成。 - Phase 2 — コード限定の継続学習. コード関連サブセットのみに対する行単位 MLM(
line_no_spacecollator)。ランダムトークンではなくソースコードの行全体をマスクし、コード検索の下流タスクに目的関数を近づけます。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
- 12