← Documentation

generate_axis5_tier3_full_db.py

既にフィッティング済みのAxis5 モデルをターゲットのデータベースに適用し、その結果を analysis_deltaのTier3状態とJOINして axis5_fullを作ります——組織概要ページの きっかけとなった疑問で触れている、規模の大きな解析システムの うちの1ピースで、DOI 1.7のSection 4の結果が実際に問い合わせて いたのは、まさにこのピースです。

収録場所DOI 1.7のZenodoアーカイブ(Merutan_DOI1.7.zip)に収録
役割推論専用パイプライン:sorted_phase_v13_full.pyが既にaxis5_historyに保存した重みと閾値を読み込み、ターゲットのデータベースに適用し、結果をaxis5_fullとして書き出します。comp_*は平均中心化なしの生の形(xb,i × wi)で計算されます。
使用範囲DOI 1.6・DOI 1.7——その出力axis5_fullが、それらの報告書のTier3/Axis5 SQL結果とDOI 1.7で公開された4本の画面録画動画の問い合わせ対象になっています(動画自体は、さらに組み立てられたmeltan_integrated_viewer_*.duckdbという名前のデータベースに対して実行されたもの。このスクリプトの出力は、その動画・SQLがSection 4で問い合わせている全ての値を再現します——両者の関係は下の「生成物」を参照)。
状態DOI 1.7に文書化されている通り現行——訂正・置き換えの対象になったJOINベースの検証用パイプライン(置き換え済みファイル参照)とは全く別系統の関心事です。このスクリプトに対する訂正やバグの公表は一切ありません。

やっていること

  1. ファイル選択ダイアログで元データベースを選び、そのファイル名に _axis5_results_v2.duckdbを付けた新しい出力 データベースを作成します。
  2. 元データベースを読み取り専用でアタッチし、その axis5_historyテーブルから最新の保存済みモデル 設定(特徴量リスト、平均、逆共分散行列、特徴量重み—— sorted_phase_v13_full.py がフィッティングして保存した値そのもの)を読み込み、その 固定モデルを元データベースのanalysis_full テーブルの全ブロックに適用します。
  3. その保存済みモデルから各ブロックのマハラノビス距離 Dを計算し、その分布からP50/P75とTukey fences のT1/T2閾値を導出し、axis5重症度値 (−2〜1)とprimary_cause列(各ブロックの 距離に最も寄与したcomp_*特徴量はどれか)を新しい axis5_results_v2テーブルに書き込みます。
  4. axis5_results_v2を、元データベースの analysis_deltaテーブルと(image_id・ row・colで)JOINし、各ブロックの noTTA/TTAのTier3値・ ローカルSSIM・Δssimを取り込み、統合した tier3_stateラベル(Stable/Persistent/Escape/ BlindSpot——用語集 参照)を導出します——その結果がaxis5_full として書き込まれ、DOI 1.7のSection 4のSQLクエリが直接 参照するテーブルになります。
  5. axis5_historyを無改変で出力データベースに コピーし、この実行で実際に使われたP50/P75/T1/T2の閾値を、 記録として保存済みの設定に追記します。
  6. 実行のメタデータ(作成者、ライセンス、生成日時、元 ファイル名、使用した閾値)を、出力データベースの merutan_metadataテーブルに記録します。 SHA-256ハッシュ付きのParquet書き出し経路もコード内には 存在しますが、現在は無効化されています。

生成物

4つのテーブルを持つDuckDBデータベース (…_axis5_results_v2.duckdb)です: axis5_results_v2(Tier3とのJOIN前のAxis5推論 結果)、axis5_full(JOIN済みのテーブル—— Axis5とTier3状態が揃った、DOI 1.7の報告書が直接クエリする 対象)、axis5_history(コピーされたモデル設定 と閾値)、merutan_metadata(実行の来歴)です。 モデルごとに1回実行します。このスクリプト自身の出力データベース は、DOI 1.7の動画・SQLで参照されている meltan_integrated_viewer_*.duckdbファイルそのもの ではありません——別途未公開の工程(generate_integrated_viewer_db.py)が、 このスクリプトのaxis5_fullを、同じパイプラインの Axis1・Axis6の各データベース(組織概要ページで 触れている、より大きなシステム)と統合して、最終的な そのデータベースを作ります。そのデータベースのスキーマ自体は DOI 1.0 自身の付録(Section A.2)以来公開されており、生データベース ファイルが配布されていないのは単にサイズの問題です(DOI 1.0 自身がSection A.3.3でそう明記しています)——これはこの シリーズの後続の検証用データベースが配布されていないのと 同じ、容量上の理由です。ここで公開されている範囲は、完全な 組み立てパイプラインより狭いですが、DOI 1.7が実際に必要と していたものは再現できます:このスクリプト(とその前段の sorted_phase_v13_full.py) を実行すれば、DOI 1.7のSection 4が meltan_integrated_viewer_*.duckdbに問い合わせて いた値を全て再現できます。

実行方法

対話式で、コマンドライン引数はありません:スクリプトを実行すると ファイル選択ダイアログが開き、元データベースを選びます。出力 データベースは、同じフォルダ内に書き込まれます。