從兩百多條音韻規則到 Quizzman Fanqie Engine:電腦如何學習歷史語言?

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 的核心精神:與其記住數萬個漢字的個別讀音,不如理解那些塑造它們的音韻規律。