# 保存因子から系列支持を求めた手順

## 対象と固定条件

固定40話者120録音。元の公開manifestはSHA-256 `1f392fc60fbca4003c236f03ffd9edba82b048737f23cf250295c1b4c6c85193`。新しい音声取得やpYIN推定は行わず、2026-10-22の保存因子を再利用した。

元測定commitは `1a1181bac001fae325a5381cd9a11f6b07076b75`。元の120録音は3担当42/39/39録音で保存されていた。今回の計算は固定manifestの話者初出順で8話者ずつ、5担当各24録音に分けた。

実行環境はPython 3.12.14、NumPy 2.3.5、SciPy 1.17.0、Numba 0.68.0、librosa 0.11.0。各担当の保存source-lockと実行コードを親が照合した。7種類のthread環境変数を1へ固定し、1録音600秒、1担当10800秒を上限とした。元の4パッケージとlibrosaの2ソースは照合したが、全依存wheelの元測定時とのbit一致を保証したわけではない。

## 経路の重みと三つの和

状態数S=976。488状態は有声の音高ビン、残り488状態は無声側。要求F0への写像gは、有声を60×2^(bin/120) Hz、無声を0へ写す。元観測の格子は24 kHz、hop120、frame2048、center=trueである。

εはfloat64のtiny、16進表記 `0x1.0000000000000p-1022`。初期因子π、遷移因子A、観測因子Oにそれぞれεを足す。

W(z)=(π[z₀]+ε)×∏ₜ(O[zₜ,t]+ε)×∏ₜ₌₁ᵀ⁻¹(A[zₜ₋₁,zₜ]+ε)。

全経路の和Z、保存された選択経路z*の重みW(z*)、同じ要求系列g(z*)へ写る経路の和Zgを計算する。報告する値はlog W(z*)−log Z、log Zg−log Z、log Zg−log W(z*)。遷移の行正規化や候補の切り捨ては行わない。

全経路の前向き対数和は、α₀=log(π+ε)+log(O[:,0]+ε)、αₜ(j)=log(O[j,t]+ε)+logsumexpᵢ(αₜ₋₁(i)+log(A[i,j]+ε))。

系列の制約付き前向き和では、選択経路が有声なら同じ音高ビン1状態、無声なら全488無声状態を許す。各時点の観測対数重みを足した後、許されない状態を−∞へ置く。Oを0へ置き換えてからεを加える処理ではない。元の名目0遷移もεにより正の支持を持つ。

選択経路の累積対数重みは初期・観測・遷移を同じ規約で足す。元の選択経路が数値的にも最大であるかは独立に証明していない。同じF0系列の総支持を最大にする系列であるとも仮定しない。

## 保存と独立照合

原因子の完全アーカイブは16,114,203 bytes、SHA-256 `5e6d9510603f1b09d0a63b2119ed1af37eea335f8a0cfb5bba477604974047a2`。親は全867 member、内部台帳866件、元担当の台帳855件、公開provenance・元7ソース・担当metadataを照合した。原配列を間引いた代替物ではない。

今回の固定ソース束は58,781 bytes、SHA-256 `a959115c291b622480279d8831cadfdf9da011e1bb3606d8c094731c55310968`。source-lockはSHA-256 `3771e193d3c0e1b4acca8216b0afa3c9c9d5a7864d6edf6274ac77ff18076bc7`。私有の演算・監視コードは採用済みbaseの実装ではなく、Gitへは追加していない。

全120録音で、全経路・制約付きの前向き正規化量、選択経路の累積対数重み、許可状態数を保存した。親は各配列の終端と報告scalar、元statesと許可状態数、対数値の引算、完全な結果台帳とsourceのhashを照合した。対数恒等式の保存値残差は全件0で、不一致・計算核のwarningは0件だった。

これは保存演算記録の独立照合であり、原因子から全forward和を別実装で再計算したものではない。full forward状態表は保存しておらず、各行のhashは再計算時の照合材料にすぎない。再計算に必要な元因子は完全アーカイブとして保持している。

## 初回失敗を成功例で上書きしない

最初のowner2は、--factors-rootへ1階層浅い場所を渡したため24件ともcontract.json読取で失敗した。親が全tracebackと科学呼出し予約0件・結果配列0件を確認した。元の失敗アーカイブを保持し、正しい展開先を指定した新規Cloud・新規出力で未実行24件を計算した。ソース、因子、数式、版、録音集合は変えていない。

最終の成功120件とは別に、科学処理前の失敗24件がある。これを24件の科学再計測とは数えない。原結果と履歴はaudit.jsonへ残した。

## 解釈と次の判断

無声側の潜在状態をまとめることと、候補数を増やして音を改善することは異なる。全系列の一点支持は録音長や局所的な揺らぎでも小さくなる。今回の三つの値を音質順位やエントロピー率と呼ばず、F0候補の重みをどの単位へ付けるかの判断に使う。

次は完全な音響枝の保存・復号境界と抽出器の数値誤差を詰める。候補数掃引やベースの切替には直結させない。自然S比較の条件も変更しない。

出典:
- [元因子の公開provenance](https://github.com/Hiroshiba/check-nonml-saikyo-vocoder/blob/e9d4446a2dd9813fb6f773aade9473c17d2f274a/research/apron-f0-marginals-2026-10-22/provenance.json)
- [元の前向き演算](https://github.com/Hiroshiba/check-nonml-saikyo-vocoder/blob/1a1181bac001fae325a5381cd9a11f6b07076b75/scripts/apron_f0_marginals/operator.py)
