pub fn evaluate_score_with_buf(
logits: &[f64],
criteria: &Criteria,
temperature: f64,
probs_buf: &mut [f64],
) -> Result<Answer>Expand description
作業用バッファを活用し、Score プリミティブの生ロジットから加重平均スコア実数値、確率分布、および分散確信度を算出する。
§概要
- 呼び出し側から作業用バッファスライス (
probs_buf) を受け取ることでヒープ確保を最小化する。 - 順序尺度評価配列 (
Criteria::List) とロジット列を結合し、$M \in [2, 10]$ 段階の評価を行う。 - 加重平均期待値 $\hat{s} = \sum_{k=0}^{M-1} k \cdot p_k$ を連続値スコアとして算出する。
- 確信度には順序尺度のバイモーダル(両極端割れ)と低分散(隣接割れ)を適切に分離する 正規化分散確信度 $C_{\text{var}} = 1.0 - \frac{4 \cdot \text{Var}[S]}{(M-1)^2}$ を採用する。
- 確率マップのキーには、評価段階ラベルに重複がない場合はそのラベル名を用い、
重複または空文字が存在する場合はインデックス文字列 (
"0","1", …) を用いる。 $M \le 10$ であるため、重複検査はヒープ確保を行わずにスタック上の二重走査で実施する。
§引数
logits: 未正規化の生ロジットスライス(f64)。criteria: 順序付けられた評価段階基準の配列。temperature: 適用する較正温度パラメータ $\tau$。probs_buf: 確率分布書き込み用の作業バッファスライス(logitsと同長が必要)。
§戻り値
- 成功時は Score 判定が格納された
Answer、入力不正時はCoreError。