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
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for umiyosh/modernbert-ja-130m-coreml

Quantized
(7)
this model