論述基礎與限制

本卡的觀察來自一次全站用詞清理。#234 的物理化錯配有一組 grep 清單(撐 / 掛 / 扛 / 垮 / 頂 / 咬 / 啃),寫作規範把它操作化時標成三種錯配裡「唯一有穩定關鍵詞可掃的」一種。照清單掃完並修完 68 處之後,另一個人在同一批內容裡指出兩處清單完全沒碰到的錯配:把失敗說成「滑進去」「另一條滑坡」,以及用「拿到的是」承接讀書得到的理解。兩處照 #234 的判準都成立——滑需要斜坡、拿需要手,而失敗與理解兩樣都沒有。

限制:本卡不談用詞錯配的判準(那是 #234,而這次的兩個實例證明那個判準是對的),只談偵測。兩個實例都是中文,但「一個詞該用哪一種入口」這條判準跟語言無關——它問的是一個詞的違規義項佔它全部用法多少,任何語言都算得出來;下面兩個探針則各自綁在中文的句構與詞義上,換語言要重新設計。

入選判準跟下面兩個探針的可信度不在同一級。前者由「噪音蓋掉訊號、蓋掉之後維護者會把整條拿掉」這個機制支持;後者只有一個量測過(滑)、另一個沒有(拿),而且都沒有換一批內容驗過。修法段裡標著「候選訊號」的那一條,標的就是這個差別。


核心原則

入口由兩件事決定:違規義項佔它全部用法多少,以及那個違規形態寫不寫得成 pattern。 佔比只決定「原樣進清單」這一個選項可不可行,其餘的入口由形態決定;兩者都不決定這個詞要不要被涵蓋。清單是判準的一次抽樣,不是判準本身——抽到的是那些「幾乎只在違規時才出現」的詞;違規義項只佔少數的詞違規可以同樣嚴重,差別在原樣加進清單會用噪音蓋掉訊號。

入口有四種,前三種成本遞增:原樣進清單(違規義項佔多數)、收窄 pattern 或加豁免子句(違規義項少、而違規形態穩定到寫得出來)、改用探針(違規形態不穩定,沒有可寫成 regex 的外形)。還有兩種不在這條成本線上:排一輪限定 scope 的 review(例如「這批新寫的、從外語文獻讀來的概念詞」),它是探針缺的那個偵測入口;以及承認沒有可行的入口——形態不穩定、佔比又低到連探針都設計不出來時,寫下「這一類目前只能靠讀的人自己注意」,比擺一個抓不到的 pattern 誠實,姊妹卡 #266 對「補不出錨的維度」做的是同一個處理。這份清單本身也是抽樣。本站三種都在用:物理化清單收了「撐 / 咬 / 頂」這些違規義項佔比極低的詞,靠一句豁免處理(主詞是實體或系統負載時不觸發);「滑坡」收窄成 另一條滑坡|滑進 就抓得到;而「拿」的違規形態描述得出來(「⋯⋯的是」後面接一個完整斷言)卻寫不成 pattern,因為「完整斷言」不是 regex 判得出來的東西——這種只剩探針。

因此漏抓一個詞之後,先算比例、再看形態、然後選入口——既不是直接加進 regex,也不是一律改探針。兩個實例各自示範原樣加進去為什麼行不通:

  • 本義合法:「滑坡」在中文的本義是山崩,另有漢語固有的衰退引申義(經濟滑坡、成績滑坡),而「下滑」「滑落」「滑向某個狀態」都是正常用法(毛利下滑、成績逐級滑落、語氣滑向抱怨)。違規的只有從英文 slippery slope 借來的那個義項——把一個失敗當成可以滑進去的地方、當成可數的路徑。全站掃「滑」得到兩百多處,絕大多數是滑鼠、下滑、滑動、滑向、滑落這些正常用法(精確數字這裡不寫:量測範圍含這一頁,而寫下數字的動作會改變它——這正是本卡姊妹卡在講的量測對象問題)。違規集中在 滑坡|滑進 這一小群,本批修掉五處:兩處把失敗說成滑進去、兩處把倒閉說成滑進去、一個段標把風險命名成滑坡。
  • 詞頻過高:「拿」在技術寫作裡到處都是(拿到的需求、拿去用、拿它對照自己的處境),這些全部合規。違規的只有拿一個物理取得動詞去承接認知關係那一種。這一個的佔比沒有量測過——本卡修法 2 要求算,而寫卡當下沒有算。

原樣加進清單之後,噪音會蓋掉訊號,而下一步多半是有人把它們整條拿掉。那個動作實際會走成:加進去的當下沒有人反對,理由是涵蓋要完整;幾輪之後每次掃描回來幾百行而真違規只有個位數,於是有人刪掉那幾個詞,commit 訊息寫的是移除誤報率過高的規則。沒有被發現的是同一個動作也移除了規則對那一類的涵蓋——刪的人看的是命中率,而涵蓋範圍寫在規則正文、不在清單旁邊。收窄 pattern 與豁免子句存在的理由就是避開這個結局。


反模式

這一類問題出現在規則由少數人維護、而執行入口是一條 grep 的體系:規則正文寫的是判準,pre-commit 或 CI 跑的是清單,兩者的涵蓋範圍不同而沒有人比對過——判準寫得越好,落差越大。執行入口若是人工或 agent review,判準可以直接被執行,「清單 vs 探針」這個分工就不是問題。

把清單的涵蓋當成規則的涵蓋。 「物理化是唯一有穩定關鍵詞可掃的一種」這句標註在被讀的時候會變成「掃完清單就掃完這一類」。實測是掃完清單、修完 68 處(該次全站 716 個關鍵詞命中行,修正後降到 651)、跑完全站驗證都乾淨之後,同一批內容裡仍有兩類完整的違規在。零命中是「清單沒抓到」,不是「沒有違規」。

用清單的命中數判斷這一類清乾淨了。 68 這個數字讀起來像一次徹底的清理,而它量的是清單的產能,不是這一類違規的總量。這跟 #266 的失效同源,只是那裡的關鍵詞當分子、這裡當偵測入口。

依賴外部指正當唯一的補漏機制。 這兩處都是使用者在旁邊看到的,不是任何 review frame 抓到的——語言的容錯讓作者自己讀不出來(「滑進去的失敗」「拿到的是理解」通順、意思也到得了)。外部眼睛有效,但它排不進行程表,把它當唯一機制等於把偵測交給運氣。反向的實例也有一個:既有義項探針寫進規則之後,第三處違規(一張方法論卡的段標「模板化滑坡」)是那條探針自己抓到的,不必再等人指出。


修法

  1. 判準與清單分開寫,並標明清單是抽樣。 規則的正文寫可執行的判準(「問這個動詞照字面成立需要什麼物理條件」),清單另起一段標成「目前抽到的高密度詞」。兩者混在一起時,讀規則的人會停在清單。
  2. 新詞進清單前先算違規比例、再看形態,然後選入口。 全站掃一次那個詞,數違規佔多少。比例高就原樣進清單;比例低而違規形態寫得成 pattern,收窄 pattern 或加一句豁免(清單裡的「撐 / 咬 / 頂」就是這樣留住的);形態描述得出來卻寫不成 pattern,才輪到探針;連形態都不穩定的,剩下的是排一輪限定 scope 的 review 或明說沒有入口。第三個實例是「承載 / 載體」——它照 #234 的判準成立(承載要有重量與支承面,而「即時反應」「功能」都沒有),佔比低而形態穩定,屬於收窄 pattern 那一格;它出現在寫下本卡的同一批稿子裡,而清單抓不到。跳過計數直接選入口是這一步最常被省掉的部分。
  3. 補語型態探針(抓泛用動詞頂替具體關係、中文):「⋯⋯的是」後面接一個完整斷言時,前面那個動詞值得回頭看——精準的認知動詞(學到 / 看出 / 意識到)容得下子句,而物理取得動詞(拿到 / 抓到)接上去會讀不順。實測那句「拿到的是自己的哪些反應正在製造沉默」同時犯用詞與語法兩項,而語法那一項是接不下去、因此看得見的。這一條目前是候選訊號而不是已驗證的探針:只有一個實例,沒有掃過全站的真陽性率,也沒有跨批驗證——照上一條的要求,它自己還沒過那一關。
  4. 既有義項探針(抓外語隱喻直譯、中文):把那個詞在本語言的全部既有義項列出來(本義與固有的引申義都算),再問句子用的是哪一個。滑坡的本義是山崩這個地質事件、固有引申義是衰退(經濟滑坡、成績滑坡),兩者都不容許「另一條滑坡」這種把它當成可數路徑的用法——那個用法只在英文 slippery slope 裡成立。只列本義會誤判:漏掉衰退這個引申義的話,「成績滑坡」會被判成違規。詞典查得到不等於這個用法成立,這個探針要抓的正是那個落差。它沒有偵測入口——這是判定程序,要先有人懷疑某個詞才跑得起來。懷疑有兩個現成的來源,都排得進行程:讀的時候卡了一下卻指不出哪裡怪,以及某個概念本來從英文文獻讀來、這是第一次用中文寫它。這兩個時刻各跑一次既有義項清單,比等一張已知外語隱喻詞的清單被建出來早得多。
  5. 換詞時同義詞要分散。 一個泛用動詞換掉之後,替代詞要按語境各自選(拿到 → 學到 / 讀出來 / 掌握 / 得到的教訓),不要一律換成同一個——一律替換會用新模具換掉舊模具,理由見 #122

跟其他原則的關係

原則關係
#234 描述抽象概念要用貼合屬性的謂語直接的上游,本卡只動它的偵測層。這次兩個實例照 #234 的判準都成立,證明判準沒問題;被推翻的是操作化時加上的那句「物理化是唯一有穩定關鍵詞可掃的」——可掃的是清單裡那幾個詞,不是這一類
#203 避免濫用泛用詞姊妹但軸不同——#203 的訊號是密度(同一個泛用詞反覆出現,把不同情境壓成同一個標籤;它的清單同時含名詞與動詞),本卡的訊號是單次出現時謂語與賓語的關係對不上。「拿到的是理解」只出現一次也是錯的
#266 可核對的錨要選會下降的量同源的另一半——#266 講關鍵詞不能當覆蓋率的分子(漏數判定),本卡講關鍵詞不能當違規涵蓋的全部入口(漏抓違規)。兩者的共同根因是關鍵詞量的是措辭
#149 keyword bank 命中是候選不是判決對稱的另一邊——#149 處理偽陽性(命中要再判定),本卡處理偽陰性(沒命中不表示沒有)。兩張合起來說明關鍵詞只適合當入口的一部分,兩端都要有別的機制接
#165 register 違規:偵測可機械化、判定要靠文體異源的眼睛同型的作者盲區——#165 的作者讀不出自己的語域,本卡的作者讀不出自己的謂語,共同機制是語言容得下、通順度不下降。差別在 #165 靠異源的眼睛,本卡想把那雙眼睛的一部分換成可排程的探針,目前只做到一半:兩個探針裡只有補語型態那個有偵測入口,而它自己還沒量測過真陽性率
#278 機械約束買到被量測的那個數字同一個機制在程式碼度量上——可機械偵測的形態是違規集合的一個投影,而達成投影上的合規比達成實質合規便宜

判讀徵兆

訊號該做的事
某條用詞規則的漏抓實例持續從外部指正進來不要先擴充清單;先算那些詞的違規比例,低的改做探針
一個詞有既有義項、而句子用的是外語搭配裡的那個既有義項探針命中;本義與固有引申義都列出來,再問句子用的是哪一個
「⋯⋯的是」後面接的是完整斷言而不是名詞組前面那個動詞多半選錯;換成容得下子句的認知動詞
掃完清單、全站零命中,而規則涵蓋的範圍描述得比清單廣零命中只證明清單沒抓到;規則正文與清單要分開寫,並標明清單是抽樣
想把一個高頻常用詞加進 grep 清單先掃一次數違規佔比;佔比低就會用噪音蓋掉訊號,且下一個維護者會把它整個拿掉
換掉一個泛用動詞時所有位置都換成同一個替代詞那是用新模具換舊模具;替代詞按語境各自選