重言 Re-Sinitic:換一把尺之後,答案更乾脆了 - 研究日誌(三)
這篇是日誌,記的是當時的推論過程,其中部分結論後來已被修正。想看目前最新的整體結論,見現況總覽。
第二集的結尾是聲符原則:語音資訊會湧現出一套可泛化到新字的編碼,但它取代語意,不與語意分工。這集本來要接著查「模組化是不是習得性問題」,結果先撞上兩件更急的事——一個是先前的結論裡有一半是錯的,另一個是量了兩年的指標可能從頭到尾沒量到重點。兩件事查完,探索階段就結束了。
形符與聲符不是互斥,是取捨
第二集報過一個副作用:同音率極低的那組資料(v3)裡,加上語音路會把原本能被拆解出語意的字形壓回 chance 等級——看起來像「一個字形要嘛表意要嘛表音,兩者互斥」。
那個說法在檢定之前只是個印象。用 72 個零樣本 run 直接測,情況不是那樣。
先修一個門檻的錯誤:68 個未見詞、chance ≈ 1.5%,先前用「2× chance」分類,等於只有 2 個詞落在門檻之上,完全在雜訊裡。改用 chance + 3 個標準誤 ≈ 5.8%:
| 兩者皆可拆解 | 僅語意 | 僅語音 | 皆無 | |
|---|---|---|---|---|
| 主力(語音路開啟) | 15 | 1 | 19 | 1 |
| 基線(語音路關閉) | 6 | 26 | 1 | 3 |
36 個主力 run 裡有 15 個(42%)的字形,同時具備語意和語音兩種零樣本泛化能力。那是形聲的必要條件,而且經常被滿足。主力臂內部:
語音泛化 vs 同音率 r = +0.748
語意泛化 vs 同音率 r = −0.273
語意泛化 vs 語音泛化 r = −0.341
加上語音路會把字形從「語意可泛化」推向「語音可泛化」,同音壓力決定推多遠。兩者之間是取捨,不是互斥——第二集那個「語意方向隨劑量下降」的說法沒有錯,但它只是取捨曲線的一段,不是「兩者互斥」的證據。v3 之所以看起來像退化,是因為它的同音率只有 0.018,落在曲線最左端,語音路在那裡幾乎只有干擾、沒有收益。
到這裡,第一集就報過的「形符原則」(純表意基線的字形語意可拆解)第一次有了明確的量化位置:基線臂 36 個裡有 32 個具備語意零樣本泛化。這件事一直存在,只是先前沒有用同一套方法跟聲符放在一起看。
但雙重分離這把尺,可能從頭到尾量錯地方
正向結果變多了,但雙重分離——這個從第一集就撐著「形聲沒有湧現」這個主結論的指標——一直是負的,一次都沒轉正過。查到這裡開始覺得不對勁:如果聲符和形符都會湧現,為什麼分工的訊號完全量不到?
答案是這把尺本身量錯了東西。dd_interaction 消融的是 Writer 的輸入路徑——把語意向量或語音向量歸零,看 Writer 產出的字形變化多少。那測的是「Writer 有沒有用到那條輸入」,不是「字形本身有沒有分成兩個部分」。一個把語音資訊均勻塗滿整條字形的系統,在輸入消融上也會顯示同時依賴兩條路——它和一個真正左形右聲的系統,在這個指標上分不出來。
整個專案一直在用一個測不到形聲的指標測形聲。
換一把尺:直接遮字形的空間
形聲的定義性特徵是空間上可分解——左形右聲。改成 5×5 網格,遮左半(10 格)或右半(10 格),中央欄不計,測兩類九選一題目:同場題(同語意場、語音遠,只靠形符答得出來)、同音題(語音近、跨語意場,只靠聲符答得出來)。
過程中修掉兩個會讓評估看起來正常、其實在說謊的缺陷:
- 天花板。 第一版用三選一,兩類題目都跑到 100%——消融測不出任何東西,而依變數飽和的效果量不該被解讀。改成九選一(全部 8 個同類硬干擾詞一起放進候選集)。這個坑挖得有點諷刺:對抗式干擾詞是為了讓題目有鑑別力才精心設計的,結果評估時只放了一個進去,設計對了、用法錯了。
- 讀者未收斂。 先前的設定下,評估當下的讀者訓練不到 3000 步,全詞表準確率掉到 chance——那不是字形不好,是讀者還沒學會讀。改成一律用全新訓練到收斂的讀者評估。意外的副產品:全新讀者的表現比先前共訓的讀者好上不少(63.3% vs 38.1%)——先前那對「有默契」的網路其實卡在次佳解上,一路低估了字形本身的品質。
結果:一個漂亮的 2×2,被自己的複製推翻
種子 0 的第一組結果看起來像個完整的故事:讀者換代會把 spatial_dd 往正推,而且只有同音率夠高那格才越過事先定的顯著性門檻(SESOI)——聲符需要原料,分解需要划算,兩個條件缺一不可。
三個新種子重跑同一組設定,判準寫在腳本裡、寫在看到資料之前:
種子 無換代 有換代 差
0 -0.0177 +0.0531 +0.0708
1 +0.0708 +0.0310 -0.0398
2 +0.0133 -0.0265 -0.0398
3 -0.0044 -0.0442 -0.0398
平均 +0.0155 +0.0033 -0.0122 配對 t = -0.44
有換代那組 4 個裡只有 2 個是正的,平均反而比沒換代的對照組更低。那個很好的故事是錯的,撤回。
但空間版本身測到了一件結實的事
拿掉那個沒撐住的 2×2 敘事之後,遮字形一半這個做法本身給出一個非常乾脆的結果:
遮左 同場 −0.584 同音 −0.602
遮右 同場 −0.341 同音 −0.376
遮掉一半造成最多 71 個百分點的傷害——傷害很巨大,但對兩類題目的傷害幾乎完全相同(差只有 0.013–0.018)。字形的每一半都同時攜帶語意和語音兩種資訊,比例相同。左半承載的資訊多於右半,所以字形不是均質的、確實有空間結構——但那個結構不是形符和聲符。
這不再是靠代理指標推論出來的「沒有分工」,是直接遮掉空間位置測出來的「沒有分工」,而且比先前用輸入路徑消融得到的同一句話硬得多。
順帶量到:逼出兩條通道會推高部件複用,但推的不是分工
對抗式候選集逼著兩個通道都變得必要之後,部件複用率來到專案目前最高的 0.792–0.805(先前是 0.748)。逼字形不能偷懶,確實會讓系統長出更多共用部件——但那是「共用更多零件」,不是「把零件分成兩組各司其職」。
探索階段到此結束
三個階段(S1 語音層、S2 劑量曲線與零樣本、S3 方言壓力)、零樣本探針、空間雙重分離全部跑完並寫進 FINDINGS.md。heldout 那 102 個詞,從專案開始到現在,一次都沒有被載入過。
現在唯一剩下的重大決策是要不要動用它——這是一次性資源,動用之後探索階段就正式結束,任何後續調整都要記為「看過確認資料之後的變更」。卡住的地方是算力:pre-registration 原訂的確認階段規模(5 個 λ 點 × 5 種子 × 6 劑量)在「訓練候選數等於評估候選數」這個修訂後的規則下,單一個 S2 run 要 14 小時,全部跑完是三個月。三個縮減方案擺在桌上:
| 規模 | 時間 | 代價 | |
|---|---|---|---|
| A 只驗主結果 | 12 run | 約 7 天 | 放棄 λ 掃描與劑量曲線 |
| B 降到 64 選 1 | 原規模 | 約 10 天 | 準確率 65% 而非 80%,違反修訂 1 |
| C 零樣本為主 | 用既有模型直接產生 | 數小時 | 只驗零樣本這條線,不驗劑量 |
C 特別值得考慮:零樣本探針不需要重新訓練 Writer,只需要凍結既有的 Writer、重訓 Reader——heldout 的字形可以直接由現有模型產生。而「新學習者讀不讀得懂沒學過的字」正是這個專案目前最強的正向結果。
這些結論現在有多硬
| 狀態 | |
|---|---|
| 探索 / 確認 | 探索階段已完成。heldout 102 詞仍從未載入 |
| 正向結果 | 聲符原則 + 形符原則皆可湧現,42% 的 run 兩者兼具;兩者是取捨(r = −0.34)不是互斥 |
| 主結論 | 字形有空間結構,但那個結構不是形符和聲符——遮任一半對兩類題目的傷害幾乎相同 |
| 已撤回 | 「形符與聲符互斥」(v3 的特例);「讀者換代 × 同音率的 2×2 交互作用」(單種子的假象,4 種子沒複製) |
| 判準已更換 | 不再用 dd_interaction(測 Writer 輸入路徑);改用 spatial_dd(直接遮字形空間) |
下一步
唯一的決策點是 heldout 怎麼用,三個方案裡 C(零樣本為主)代價最低、也最貼近目前最硬的結果,但那要使用者決定,不是可以自己動的事。不需要等這個決策也能做的事:論文草稿譯成英文、給 v3 這組低同音率設定補種子(目前只有 1 個)。等 heldout 的決定下來、或是英文稿完成,會有第四集。