Prjs109 / Fast · 評測報告
以 HOMSTRAD 人工比對為標準答案,量測本專案的 clean-room 實作與原作者發布之 FAST 執行檔。修正 Step 4 的計算範圍後,與原版的差距縮小 76.7%;全量 2663 對驗收確認缺口為 −0.0238 且幾乎全部來自 recall;同時發現論文自身的目標函數 S_X 與比對正確性系統性背離。
Step 4 的 R 矩陣原本只對 Step 1 存活的候選集計算,使規則 (a) 淘汰的殘基對永無翻身機會——這與論文 Eq. 5 不符。改為對全部殘基對計算後,recall 由 0.702 升至 0.814,F1 由 0.806 升至 0.881,precision 幾乎無損且仍高於原版 FAST。
以上為修正前後對照,n = 455 組結構對(602 對中兩支程式皆能執行者)。修正前後必須在同一集合上比較,故沿用此集。配對差值為逐對計算 F1(本實作) − F1(原版) 後取平均,標準誤 0.0035。
全量 2663 對 / 959 家族 / 3038 個相異鏈,耗時 6.0 小時。
| 集合 | n | Precision | Recall | F1 |
|---|---|---|---|---|
| 主集合(對 HOMSTRAD) | 2663 | 0.9635 | 0.8208 | 0.8818 |
| 兩者皆可跑 · 本實作 | 1515 | 0.9600 | 0.7994 | 0.8665 |
| 兩者皆可跑 · 原版 FAST | 1515 | 0.9342 | 0.8542 | 0.8903 |
配對差值 −0.0238(sd 0.1076、標準誤 0.0028、平均差/標準誤 = −8.61)。本實作較佳 213 對、平手 26 對、原版較佳 1276 對。
此缺口在 n = 361、752、1515 三個樣本量下皆為 −0.023,是穩定的系統性性質,不是取樣雜訊。
HOMSTRAD 2026 Sep 1,1032 個蛋白質家族、3458 個結構,附專家策展的人工結構比對。同一家族中兩個成員在比對的同一欄位皆非 gap 時,該欄位即構成一組等價殘基對,這就是標準答案。
比對欄位到 PDB 殘基索引的對照一律以 Needleman-Wunsch 序列比對建立,不用位置推算——1032 個家族中有 85 個、3458 個成員中有 330 個(9.5%)兩者長度不符,差值由 −90 到 +57,逐位置對應會靜默產生錯位的標準答案。改用序列指派後可用成員由 92.7% 提升至 99.5%,一致度中位數 1.0000。
評測集為每家族取 1 對、鏈長 60–250 殘基,共 602 對;其中 455 對(75.6%)的 NA×NB 未超過原版 FAST 的執行上限而能取得對照。
把標準答案當成一份有正確解答的考卷,程式交出的比對就是答案卷。
修正前的 hr 案例:標準答案 75 對,我們配 16 對且全部正確。Precision = 1.0000 看似完美,Recall 卻只有 0.2133——漏掉了 78%。單看任一項都會得出錯誤結論。
兩支程式跑的是同一批結構對,屬配對資料,故以逐對差值的平均與標準差為判斷依據。分別報平均值再目測比較會被結構對之間的難度差異淹沒:兩者各自的 F1 標準差為 0.1216 與 0.1226,而差值的標準差僅 0.0737。
| 版本 | Precision | Recall | F1 | 平均比對長度 | 佔標準答案 | 平均 RMSD |
|---|---|---|---|---|---|---|
| 本實作 · 修正前 | 0.9769 | 0.7017 | 0.8057 | 78.0 | 72.7% | 1.366 Å |
| 本實作 · 修正後 | 0.9736 | 0.8135 | 0.8813 | 90.2 | 84.0% | 1.541 Å |
| 原版 FAST | 0.9492 | 0.8670 | 0.9044 | 98.2 | 91.5% | 1.899 Å |
標準答案的平均等價殘基對數為 107.3。RMSD 上升是配上更多殘基的必然結果——原版配得更多,RMSD 也更高(1.899 Å)。
| 本實作較佳 | 平手 | 原版較佳 | |
|---|---|---|---|
| 修正前 | 7 | 2 | 446 |
| 修正後 | 61 | 6 | 388 |
論文 Step 4 的 Eq. 5 為:
R_ij = Σ e_ij,mn 其中 (m,n) ∈ X⁰, (m,n) ≠ (i,j)
加總範圍限定在 X⁰,但被評分的 (i,j) 論文未加任何限制。且 Step 4 開頭明言「some biologically relevant pairs may be dropped during pruning」,而 Step 1 的規則 (a)(b) 在論文中正是以 prune 描述:「We then prune G(V,E)… (a) Pairs with negative L scores are eliminated.」
原實作將 R 的計算限制在 Step 1 的候選集,其註解明確寫著「Step 1 已被刪除的殘基對…不屬於 Step 4 的救回範圍」。該判斷與論文不符,是比對長度系統性偏短的主因。新增 Params.RefineScope,預設改為 RefineAllPairs。
在 hr(1hra vs 1hcp,標準答案 75 對)上,修正後得 recall 0.6400、48 對;而先前以違反論文規則 (a) 的方式(LocalCutoff 由 0 放寬至 −0.5)取得的結果完全相同——同樣是 recall 0.6400、48 對。
亦即:以論文自身的機制取得了同樣的復原,不需要違反論文明訂的規則。這是診斷正確的強證據。
幾何表的角度欄位在殘基缺少前或後方向向量時留白(值為 0),但 edgeWorst 從未檢查,直接把 0 當成真實角度讀取。此 bug 先前處於休眠狀態——Eq. 1 需要 i−2…i+2,首尾各兩個殘基本就不在候選集內,故從未被觸及。改為全域計算後才暴露:自我比對一度得到 N 對(2EZM 為 101 對),即鏈端殘基以垃圾角度被配上。
論文 p.620 稱首尾各兩個殘基「left out of the calculation」——該句描述的是 Eq. 1(需 ±2 的鄰居),限制的是 Step 1 的候選集,不是最終比對。Eq. 2 的六個角度只需 ±1,故索引 1 與 N−2 可以合法進入最終比對;只有真正的鏈端(0 與 N−1)永遠不可能。
| 自我比對 | N | 修正前 | 修正後 | RMSD |
|---|---|---|---|---|
| 2EZM:A | 101 | 101 | 99 | 0.000 Å |
| 1MSB:A | 115 | 115 | 113 | 0.000 Å |
| 2P99:A | 261 | 261 | 259 | 0.000 Å |
全部剛好為 N−2。相關單元測試同步更新,且新增了更嚴格的斷言:索引 0 與 N−1 不得出現在比對中。全部測試通過。
在確認根因之前,先對全部可調參數做了 one-at-a-time 掃描。評測集為凍結的 200 對清單,各設定跑完全相同的結構對,故差異只來自參數。
| 參數 | 類別 | 預設 | 掃描範圍 | F1 範圍 | 結論 |
|---|---|---|---|---|---|
| MinSupport | CLEAN-ROOM | 4 | 1 – 8 | 0.8355 – 0.8388 | 無影響 |
| MaxPruneRounds | CLEAN-ROOM | 20 | 3 – 50 | 0.8383 – 0.8386 | 無影響 |
| D0 | CLEAN-ROOM | 20 Å | 12 – 40 | 0.8378 – 0.8392 | 無影響 |
| UnanimityEps | CLEAN-ROOM | 1e−4 | 1e−6 – 1e−2 | 0.8383 – 0.8385 | 無影響 |
| MaxRefineRounds | PAPER | 5 | 10 / 20 / 50 | 0.8386(三者相同) | 第 5 輪前已收斂 |
| MinStretch | PAPER | 4 | 2 – 6 | 0.8200 – 0.8390 | 4 已接近最佳 |
| MinFinalStretch | PAPER | 4 | 1 – 6 | 0.8176 – 0.8418 | 唯一有效,+0.0033 |
全部 20 個設定的 F1 跨度僅 0.0140,最佳設定的改善僅 +0.0009;而同一集合上與原版 FAST 的缺口為 0.0894。
亦即:整個參數空間能移動的範圍只有缺口的 16%,實際可得的改善不到 1%。缺口不在可調常數。相較之下,Step 4 的單一修正補上了 77%。
D0 一直被列為「主要嫌疑」——它是唯一完全無文獻依據的參數。本輪證實在 12–40 的範圍內其對比對正確率的影響小於 0.0015,該嫌疑應予降級。
另註:LocalCutoff 取負值未納入掃描——放寬 Step 1 規則 (a) 使候選幾乎不被淘汰,|V| 暴增而規則 (b) 的 O(V²) 失控,實測 LocalCutoff=−2.0 在 200 對上跑逾 44 分鐘未完(正常設定約 5 分鐘)。此現象本身即為效能限制 L3 的實證。
論文 Eq. 3 定義比對 X 的總相似度為一個雙重加總——把 X 裡每兩個殘基對之間的相容度 e 全部加起來:
S_X = Σ Σ e_ij,mn
(i,j)∈X (m,n)∈X, ≠(i,j)
而 e(Eq. 2)取距離項與六個主鏈角度項中最差的一項作為基礎分,再乘一個隨距離衰減的指數包絡。S_X 越大越好——論文明言「the optimal alignment X* should achieve the maximal similarity score」。
直接比較兩支程式各自回報的 S_X 並不對等——它們的參數選擇可能不同。故新增 fast.ScoreAlignment(),以本實作的公式與參數評分雙方的比對,使唯一的變因是比對本身。本節數字取自全量 2663 對評測中兩者皆可跑且評分有效者。
| 以同一公式評分(全量 n = 1509) | 對數 | 佔比 |
|---|---|---|
| 本實作的 S_X 較高 | 1133 | 75.1% |
| 本實作的 F1 較高 | 213 | 14.1% |
| 本實作的比對較短 | 1487 | 98.5% |
| S_X 贏但 F1 輸 | 941 | 62.4% |
| S_X 輸但 F1 贏 | 25 | 1.7% |
六成以上的案例,本實作在論文自己的目標函數上勝出,卻在與標準答案的一致度上落敗。反向的情形僅 1.7%。這不是雜訊。
換句話說:本實作的搜尋沒有問題,甚至比原版 FAST 更會找到 S_X 高的解——問題是那個分數與「正確」不夠相關。
S_X 在公式上確實偏好長比對(下方問題一)。但在這批真實資料裡,那個偏好被另一個效應壓過去了:
| 在原版比對較長的結構對中 | 組數 |
|---|---|
| 它的 S_X 也較高 | 143 |
| 它的 S_X 反而較低 | 1135 |
本實作的比對幾乎總是更短(98.5%),卻幾乎總是 S_X 更高(75.1%)。亦即在這批資料上,「長」與「S_X 高」是反相關的。
壓過長度偏好的是下方的問題二——S_X 測的是內部一致性,不是涵蓋率。本實作只收緊密相容的核心(S_X 高、比對短、recall 低);原版延伸進結構發散區域(配對更完整,但用本實作的公式評分會變差)。
| 用本實作的公式評分,結果為負的比對 | 組數 | 佔比 | 最低分 |
|---|---|---|---|
| 原版 FAST 的比對 | 206 | 13.6% | −3.87×1012 |
| 本實作的比對 | 0 | 0.0% | 17.3(最低仍為正) |
原版有 13.6% 的比對在 Eq. 2 下是負分,最極端達負 3.87 兆——它納入了本實作的評分函數判定為嚴重不相容的殘基對,而那些殘基正是 HOMSTRAD 認定等價的。本實作自己的比對從無負分,因為 DP 就是在最大化這個分數。
補充:HOMSTRAD 並非「不視過長的配對為同源」。方向相反——我們漏掉的殘基是 HOMSTRAD 認定等價而我們沒配上的(平均每組 17.9 個)。專家看的是演化與結構的對應;S_X 看的是局部幾何的自我一致性。這兩件事在結構發散區域會分開。
一、二次成長而無正規化。比對有 n 對殘基就有 n(n−1) 個 e 項,長度加倍則分數變四倍。S_N = S_X / √(M·N) 只除以結構長度,未除以比對長度,此二次成長完全未被修正。
二、它測的是內部一致性,不是涵蓋率。S_X 問的是「X 的成員彼此合不合」,沒有任何一項在問「你配了多少」。一小群彼此完美相容的殘基對,可以贏過一大群還不錯但沒那麼緊密的。這是 clique 品質的量測,不是比對品質的量測。
三、max{} 是瓶頸式評分,脆而不平滑。單一個角度差就能讓整條邊歸零:k_α = 4/π,角度差 45° 即令 k_α·t_α = 1,e = 0;超過 45° 則為負。
四、內部一致的錯誤答案照樣得高分。整體平移一格的比對,因所有成員被一致地移動,彼此的相對幾何幾乎不變,S_X 看不出來。這正好對應實測中約 1% 的 register shift 案例——而它們集中在 linker_histone、hr、pp-binding 等螺旋蛋白,螺旋的週期性使平移最不易被察覺。
S_X 並非設計錯誤——它是為了在 pair graph 上尋找最大 clique 而設計的,那件事它做得很好。問題出在拿它當「比對正確性」的代理指標。論文自身也知道這個張力,故才有 Step 4 的精修去補救。
全量驗收的配對差值為 −0.0238(n = 1515)。差距的性質已與修正前不同——不再是少數災難案例,而是普遍的小幅落差。
而且缺口幾乎全部來自 recall。逐對比較兩個指標的勝負:
| 指標 | 本實作較佳 | 平手 | 原版較佳 |
|---|---|---|---|
| Precision | 770 | 605 | 140 |
| Recall | 46 | 58 | 1411 |
1411 / 1515 = 93% 的配對,本實作 recall 較低。不是少數離群案例,是普遍傾向:本實作系統性偏保守——選中的配對更可靠,但漏掉明顯更多。
| F1 差距(本實作 − 原版) | 對數 | 佔比 | 平均差 |
|---|---|---|---|
| 本實作明顯較佳(> +0.05) | 43 | 2.8% | +0.3566 |
| 相當(±0.01) | 503 | 33.2% | +0.0008 |
| 略遜(−0.01 至 −0.10) | 859 | 56.7% | −0.0342 |
| 明顯遜(−0.10 至 −0.30) | 94 | 6.2% | −0.1503 |
| 嚴重落後(< −0.30) | 16 | 1.1% | −0.5152 |
另有 117 對(7.7%)的 precision 低於 0.90。
先前提出的 v1 完成標準為「配對差值 ≥ −0.02」,目前 −0.0238,差 0.0038 未達。
參數已無空間。MinSupport、MaxPruneRounds、PruneFraction、PruneRounding 七個設定給出逐位元相同的結果——Step 4 的不動點與起點 X⁰ 無關,Step 1 規則 (a) 與 Step 3 的剪枝對最終輸出已完全無關緊要。D0 的最佳值因案例而異且無一致方向(縮小至 8 使 ANATO 的 recall 由 0.554 升至 0.692,但 ACT 變差、hr 完全崩潰)。
根因在 Eq. 2 的 max{} 瓶頸式評分:漏失配對中八成以上其 R 值為負(四個逐案診斷為 85.7%、82.6%、86.2%、88.9%),DP 完全無誘因納入。這屬 v2 的範圍,不是 v1 能調的。
fast_n_term);此處理使原版的 S_X 略降,解讀時須一併參看。7kD_DNA_binding 的比對長度由 61 變 63、A2M_A 由 117 變 116、ACPS 由 77 變 76)。側鏈原子確實影響其結果,故本評測一律提供完整 ATOM 內容。rhv、ltn、ins、prc 等,其 .ali 將多條鏈串為一條序列)。本實作僅支援單鏈對單鏈,這些案例本就無法評測。# 驗證 HOMSTRAD 家族的序列與鏈對應(先跑這個) GO111MODULE=off ./dev/bin/bench -db ~/data/Prjs109/homstrad/with_PDB -check # 產生凍結的評測集清單 GO111MODULE=off ./dev/bin/bench -db ~/data/Prjs109/homstrad/with_PDB \ -pairs exp/results/2026-09-02_iterset.list -perfam 1 -minlen 60 -maxlen 250 # 評測 GO111MODULE=off ./dev/bin/bench -db ~/data/Prjs109/homstrad/with_PDB \ -run -fast ./prg/FAST-2007/fast-linux-64 \ -pairlist exp/results/2026-09-02_iterset.list -j 3 \ -o exp/results/2026-09-02_iterset-with-sx.tsv # A/B 對照修正前後 ... -P RefineScope=verts # 修正前的行為 ... -P RefineScope=all # 修正後(預設) # 單一案例的逐段檢視 GO111MODULE=off ./dev/bin/bench -db ~/data/Prjs109/homstrad/with_PDB \ -fast ./prg/FAST-2007/fast-linux-64 -inspect hr:1hra:1hcp # 全量正式驗收(2663 對, 約 6 小時;-tmp 需指向空間充足的檔案系統) GO111MODULE=off ./dev/bin/bench -db ~/data/Prjs109/homstrad/with_PDB \ -run -fast ./prg/FAST-2007/fast-linux-64 \ -cap 8 -maxlen 500 -j 3 -tmp ~/data/Prjs109/tmp/bench \ -o exp/results/2026-09-02_full-benchmark.tsv
逐對原始資料:修正前後對照為 exp/results/2026-09-02_iterset-with-sx.tsv,全量驗收為 exp/results/2026-09-02_full-benchmark.tsv(皆 32 欄)。資料來源與重建方式見 dat/materials/homstrad-provenance.md 與 prg/FAST-2007/README.md。假說與限制的權威登記表為 doc/Status.md;推導與證據見 dev/logs/Developmental_Steps.txt。