Series 2 · 第 6 篇 — 音韻規則超過 200 條。上一篇:為什麼 Quizzman Fanqie Engine 不直接硬編碼五萬多個漢字
從兩百多條音韻規則到 Quizzman Fanqie Engine:電腦如何學習歷史語言?
許多人看到 Quizzman Fanqie Engine 時,往往認為它只是把聲母和韻母拼接起來,再產生一個漢越音。事實遠比這複雜。每一個結果背後,都建立在數百條源自中古漢語、漢越音以及東亞語言歷史研究的音韻規則之上。更重要的是,這些規則並非憑直覺寫出,而是經過資料研究、統計分析、抽象化與反覆驗證,才成為引擎的一部分。
音韻規則不是憑直覺寫出來的
假設我們觀察以下幾個漢字:
| 漢字 | 漢越音 | |------|--------| | 國 | quốc | | 谷 | cốc | | 木 | mộc | | 德 | đức | | 學 | học |
它們有什麼共同點?
全部都以:
-c
結尾。
如果只看少數例子,很容易認為只是巧合。
但當研究數百甚至數千個屬於同一韻部的漢字時,一條規律便逐漸浮現:
通攝
+
入聲
↓
-c
此時,引擎保存的已經不再是五個漢字,而是一條音韻規則。
一條規則如何形成?
在 Quizzman Fanqie Engine 中,一條新的規則通常會經歷以下流程:
資料蒐集
↓
統計分析
↓
尋找 Pattern
↓
學術驗證
↓
撰寫 Rule
↓
Regression Test
這也是引擎大多數模組共同遵循的開發流程。
第一步:資料蒐集
所有規則,都始於資料。
資料來源可能包括:
- 《廣韻》
- 《集韻》
- 《康熙字典》
- Thiều Chửu 漢越字典
- 漢越語料庫
- Audit 報告
例如,要研究江攝時,團隊不會只看幾個例字,而是收集江攝的全部字例,希望掌握完整的分布情況,而不是零碎現象。
第二步:統計分析
完成資料蒐集後,下一步並不是寫程式,而是先做統計。
例如,調查 500 個字後,可能得到:
| 韻尾 | 比例 | |------|------| | -c | 82% | | -ch | 17% | | 例外 | 1% |
此時真正需要回答的問題是:
為什麼會形成這兩大類?
第三步:尋找 Pattern
僅有比例仍不足以形成規則。
下一步,是找出:
那 17% 有什麼共同特徵?
例如可能發現:
前元音
↓
-ch
而:
後元音
↓
-c
至此,一條新的規則才真正形成。
這就是抽象化(Abstraction)。
從大量個案中萃取出可普遍適用的原則。
第四步:與音韻學研究比對
這是整個流程最重要的一步。
並非所有 Pattern 都能直接成為規則。
有些 Pattern 可能只是:
- 偶然現象
- 資料錯誤
- 現代讀音造成的干擾
因此,每個假設都必須與以下研究比對:
- 《廣韻》
- Nguyễn Tài Cẩn
- 王力
- Baxter
- Middle Chinese 相關研究
若缺乏足夠的學術依據,就不會加入 Engine。
第五步:轉化為演算法
只有確認規則成立後,才會開始寫程式。
例如,不需要逐字寫:
谷 → cốc
國 → quốc
木 → mộc
引擎只需:
if she == 通 and tone == 入:
coda = "c"
短短一條規則,就能處理數千個漢字。
這正是模型化(Modeling)的力量。
第六步:Regression Test
一條規則完成後,並不代表工作結束。
它還必須通過:
- Golden Fixture
- Corpus Audit
- Batch Test
- Regression Test
如果新規則破壞了舊有結果,就必須重新修正或移除。
如此才能確保整個 Engine 始終保持一致性。
規則之間彼此影響
Quizzman Fanqie Engine 有一個重要特點:
規則不是彼此獨立的。
例如:
聲母變化
↓
影響
↓
聲調
又或者:
攝的改變
↓
影響
↓
韻尾
因此,引擎並非由數百條互不相關的規則組成,而是一個彼此連結、互相影響的規則網路。
當規則發生衝突
實際情況中,常會遇到:
兩條規則看起來都合理。
例如:
一條預測:
-c
另一條則預測:
-ch
這時,引擎還需要考慮:
- 等
- 開口/合口
- 元音
- 聲母
- 借詞層次(Reading Layer)
因此,許多模組並不是一條 Rule 就能完成,而是多層條件共同判斷。
規則也有例外
Quizzman 一直承認:
沒有任何一條規則能百分之百描述自然語言。
原因很簡單。
語言不是數學。
一千多年來,漢越音受到:
- 多次借詞
- 不同讀音層
- 方言差異
- 越南語自身演變
等因素影響。
因此,一條規則即使能涵蓋:
95%
甚至:
99%
仍然可能存在例外。
Quizzman 並不會修改核心規則去迎合所有例外,而是將例外交由 Lexical Normalization 層處理。
這也是整個 Engine 一貫遵循的設計理念。
從數千個例子,到數百條規則
有趣的是,雖然 Quizzman Fanqie Engine 能處理數萬個漢字,但真正的核心規則其實只有數百條。
這反映了語言本身的特性。
語言不是由數萬個例外構成,而是建立在有限數量的規律,加上少量歷史例外之上。
Quizzman 的目標,不是記住每一個漢字,而是找出這些規律,並將它們轉化為可以運算的演算法。
電腦並不像人類那樣「學習」
在 AI 時代,許多人認為電腦可以完全從資料中自行學會所有規律。
Quizzman Fanqie Engine 採取不同的方法。
Engine 不會自行發明音韻規則。
所有規則都建立於:
- 學術研究
- 統計分析
- 驗證測試
- 歷史語言學經驗
電腦負責的是:
在大規模資料上,精確且一致地執行這些規則。
這也是純統計模型與 Historical Phonology Rule Engine(歷史音韻規則引擎) 之間的重要差異。
兩百多條規則並不是終點
對 Quizzman Fanqie Engine 而言,兩百多條規則並非最終目標。
隨著新的研究成果與資料出現,既有規則仍可能:
- 修正
- 合併
- 重構
- 被更完善的模型取代
真正重要的,不是規則的數量,而是能否把歷史音韻學的知識轉化為一套可計算、可驗證、可持續發展的系統。
這也是 Quizzman Fanqie Engine 的核心精神:與其記住數萬個漢字的個別讀音,不如理解那些塑造它們的音韻規律。