从两百多条音韵规则到 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 的核心精神:与其记住数万个汉字的个别读音,不如理解那些塑造它们的音韵规律。