System 1 non-autoregressive Apache 2.0

答えじゃなくて
確率を返す

laya はテキストを生成しない意思決定モデルです。メール・チケット・JSON といった 「状態」に型付きの質問を与えると、choice / score / noul の回答と、較正済みの確率・信頼度スコアを単一のフォワードパスで返します。パースエラーも幻覚もありません。

ModernBERT-large 421M params 32.8 ms / question 100+ languages
python
from laya import Router

router = Router()

state = "We were billed twice for March. Refund today or we cancel."
questions = {
  "department": {"type": "choice",
    "criteria": {"billing": "refunds", "other": "rest"}},
  "urgency": {"type": "score", "criteria": ["low", "high"]},
  "churn": {"type": "noul", "instructions": "Will they leave?"},
}

res = router.predict(state, questions)
# → 32.8 ms, one forward pass

res["answers"]["department"]["choice"]
# 'billing' (confidence 0.94)
res["answers"]["churn"]["noul"]
# 0.892 (89.2% probability)
01 / 何が違うか

生成ではなく、較正された確率を返す

通常の生成 AI は「それらしい文章」を返します。laya は回答空間をリクエスト時に定義し、各選択肢の [MASK] マーカー位置でスコアリングして softmax します。学習は RLCD (Reinforcement Learning for Calibrated Decisions、報酬に厳密妥当なスコアリング規則を使う)なので、確率を正直に報告することが報酬を最大化する唯一の手段です。

較正されている

温度スケーリング後の ECE は 0.081(TypeSafe Jev 0.246)。0.90 と出したら約 9 割正しい、という意味が実際に成り立ちます。confidence でゲーティングできます。

速い

T4 上で 1 問 32.8 ms、10 問バッチで 72.3 ms(7.2 ms/問)。生成経路がないため、サンプリングや length penalty の調整が要りません。

多言語

Router が Unicode スクリプトを判定し、英語は ModernBERT-large、それ以外は mmBERT-base に振り分けます。51 言語中 45 言語が有用(ランダム比 3 倍超)水準に到達します。

型付き・自己完結

質問は実行時に定義するので、新しいスキーマでも再学習は不要。Apache 2.0 で自己完結しており、外部 API の課金はゼロ。オフラインやオンプレミスで動かせます。

02 / 仕様

チェックポイントと性能

Hub には 3 つのチェックポイントがまとまっていて、必要なサブフォルダだけダウンロードされます。

Checkpoint Encoder Params Context 得意領域
convaiinnovations/laya ModernBERT-large 421M 512 英語テキスト、ガードレール、メール振り分け
laya-multilingual mmBERT-base 322M 1024(最大 8192) 100+ 言語、約 2.2 倍高速
laya-typed-decisions ModernBERT-large 421M 1024 typed-decisions 4 ワークフロー(acc 0.766)

入力バジェット

英語 512 トークン(head 192)、多言語 1024(head 256)。質問+選択肢+状態で分割されるため、選択肢が多いと 1 ラベルあたりのトークンが減ります。

アーキテクチャ

双方向 ModernBERT-large(395M、完全ファインチューニング)+ ゼロから学習した decision head(2 層 transformer、オプションマーカー scorer、act/escalate head)。

正直な限界

ゼロショットの typed-decisions は 0.362(ランダム 0.318)。banking77 の 77 選択肢では Jev に負け、score が最も弱い primitive です。用途に合わせて fine-tune してください。

03 / Primitives

質問は 3 つの型だけ

回答空間はリクエスト時に決まります。UI 側は利用者に型を覚えさせず、テンプレート(メール振り分け・フィッシング検知・AI ガードレールなど)から選ばせるのが現実的です。

choice

選択肢から 1 つ。全選択肢の確率分布を返します。振り分け・カテゴリ分類・有害性判定に。

{
  "type": "choice",
  "criteria": {
    "billing": "refunds, charges",
    "technical": "bugs, outages"
  }
}

score

順序付きの段階。どの段階とみなしたかの確率を返します。緊急度・深刻度・複雑さ判定に。

{
  "type": "score",
  "criteria": ["low", "medium", "high", "blocking"]
}

noul

真偽の確率 P(true) を返します。注意: 英語チェックポイントでは false: / true: というラベルに影響されやすく、中立キーと中立な 説明を持つ 2 選択肢の choice に言い換える方が安全です。

{
  "type": "noul",
  "instructions": "Does the user threaten to cancel?"
}
04 / Flow

このページの導線

試すだけなら Sandbox を開くだけです。3 カラムで入力・質問設計・結果を 1 画面で追えます。下のコンソールには wterm を埋め込んでいて、現在の入力に対して run / curl / json などを実行できます。

状態を貼り付ける

Raw / Email / JSON / Ticket のタブで形式を切り替え。ファイルドロップ可。512 トークンへの接近度をバーで表示します。

テンプレートを選ぶ

8 種のプリセット(メール振り分け、フィッシング検知、サポート優先度、AI ガードレール、請求処理、感情、多言語、カスタム)。 編集も個別にできます。

Analyze を実行

既定はオフラインの決定論モック。laya API に切り替えるとローカルの laya-serve に直接 POST します。

確率と信頼度を確認してエクスポート

choice は分布バー、score はスケール、noul は P(true) ゲージ。信頼度 85% 未満は保留警告として明示します。JSON / CSV で出力できます。

ローカルで本物の推論を試す

pip install "laya[serve]"
LAYA_DEVICE=cuda LAYA_PRELOAD=1 laya-serve

# Sandbox の「laya API」を選ぶと localhost:8000 に接続します
curl -s localhost:8000/v1/systemone \
  -H 'Content-Type: application/json' \
  -d '{"state": {"document": "I was charged twice."},
       "questions": {"billing": {"type": "noul",
                                 "instructions": "Is this about billing?"}}}'

確率つき意思決定を触ってみる

ブラウザだけで完結します。バックエンドも API キーも不要です。 実モデルを繋ぐのも同じ画面です。

Sandbox を開く →