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