modernbert-ja-130m-coreml
sbintuitions/modernbert-ja-130m(SB Intuitions、MIT)を Core ML に変換した、穴埋めの採点用モデルです。Apple Silicon の Neural Engine で動きます。重みは元のモデルのままで、学習はしていません。英語の要約は末尾にあります。
モデルの詳細
- 開発: umiyosh(変換のみ。元のモデルは SB Intuitions)
- 種類: マスク言語モデル(ModernBERT、約 1.3 億パラメーター)の Core ML 版。1 行ごとに、伏せた位置の 1 トークンの log P だけを返す
- 言語: 日本語
- ライセンス: MIT
- 元のモデル: sbintuitions/modernbert-ja-130m(MIT)
- 変換と検証のコード: umiyosh/modernbert-ja-ondevice(
scripts/convert.py、scripts/verify.py)
使い道
そのまま使う
語の候補を文の中で比べます(「以外と使いやすい」と「意外と使いやすい」のどちらが自然か)。それには伏せた位置の 1 トークンの確率で足りるので、102,400 語の分布を返すより速く、メモリも少なくて済みます。
向かない使い方
- 文の生成や、分布全体が要る用途(1 行 1 つの数しか返さない)
- 32 トークンを超える入力(長さは 32 に固定)
- 音声入力の聞き違いの採点。この用途には、聞き違いで学ばせた umiyosh/modernbert-ja-130m-homophone-scorer の方が、同音の取り違えの再現率が高くなります(下の「評価」)
偏り・リスク・限界
- 偏りは元のモデルのものをそのまま引き継ぎます。元のモデルのカードを確かめてください。
- float16 で動くので、PyTorch(float32)と少し値が違います(下の「評価」)。
- バッチ 32 × 長さ 32 に固定です。足りない行や位置は埋めてください。
始め方
coreml/modernbert-ja-130m-scoring-b32-l32.mlpackage(float16、バッチ 32 × 長さ 32 の固定)
| 名前 | 形 | 内容 |
|---|---|---|
input_ids |
32 × 32、int32 | トークン列。足りない分は <pad> で埋め、伏せる位置には自分で <mask> を置く |
attention_mask |
32 × 32、int32 | トークンのある位置が 1 |
position |
32、int32 | 各行の伏せた位置 |
target |
32、int32 | 各行で確率を知りたいトークン |
logp(出力) |
32、float | 各行の log P(target | 文脈) |
トークナイザーは元のモデルと同じもの(tokenizer.json)を同梱しています。Python(coremltools 9.0)から呼ぶときは PYTHONMALLOC=malloc を付けてください。付けないと、Core ML の裏のスレッドがメモリを解放するときに落ちることがあります。
評価
変換の精度と速さ
Apple Silicon の Mac で測りました。PyTorch(float32)との log P の差は、実際の文で平均 0.021、最大 0.08 です。Neural Engine で 32 行 28.8 ms です(GPU 43.8 ms)。
誤変換の採点に使ったとき
- 入力した文の誤変換: 誤変換の検出器 umiyosh/modernbert-ja-130m-typo-detector の最初の版(
2bf8db3)で怪しい語を絞り、このモデルで同音語などの候補を採点する組み合わせで、再現率は held-out 72%・fresh 67%(正しい文への印は 1,000 字に 1 個以下)、3,000 字 0.9 秒でした。 - 音声入力の聞き違い: 同じ組み合わせで、Common Voice 27.0 日本語の test(6,563 件、同音の取り違え 523 件)の同音の取り違えの再現率は 22.0% でした。聞き違いで学ばせた採点役と検出器の今の版の組み合わせは 66.3% です(報告)。
技術仕様
- 変換: transformers の注意のマスクを作る処理は Core ML に変換できないので、埋め込み・エンコーダー層・最後の正規化を、足し算の padding のマスクで直接動かします。長さ 64 以下では、スライディングウィンドウの層も全体の注意と同じになり、transformers の出力と一致します。
torch.jit.traceではなくtorch.exportで書き出し、出力はgatherで取ります(float16 で行 × 語彙の位置を数えると、隣の語を拾うため) - ソフトウェア: coremltools 9.0
- ハードウェア: Apple MacBook Pro(Apple M4 Pro)で変換・計測。学習はしていないので、学習の時間と排出量はありません
ライセンス
MIT。元のモデル(Copyright (c) 2025 SB Intuitions)と同じです。
モデルカードの作者・連絡先
umiyosh。質問や不具合は GitHub の Issue へ。
English
sbintuitions/modernbert-ja-130m (MIT) converted to Core ML for the Apple Neural Engine, unchanged weights. It returns log P(target) at one masked position per row (batch 32 × length 32, float16): enough to compare a written word with its alternatives in context. Mean / max difference from PyTorch float32: 0.021 / 0.08; 28.8 ms per 32 rows on the Neural Engine. Conversion code: umiyosh/modernbert-ja-ondevice.
With the first version of umiyosh/modernbert-ja-130m-typo-detector it found 72% (held-out) / 67% (fresh) of typed misconversions at one false mark per 1,000 characters, but only 22.0% of voice-input homophone errors on Common Voice test; for those, use umiyosh/modernbert-ja-130m-homophone-scorer (66.3% with the current detector).
- Downloads last month
- 15
Model tree for umiyosh/modernbert-ja-130m-coreml
Base model
sbintuitions/modernbert-ja-130m