01-语言模型+维特比
1. 什么是语言模型?
语言模型的目标是计算一个句子(或一串词序列)出现的概率。比如,判断“我爱你”和“爱我你”哪个更像人话。
核心思想:利用链式法则,一句话的概率等于每个词在给定前面所有词时出现概率的乘积。
P(我, 爱, 你) = P(我) × P(爱|我) × P(你|我, 爱)实际简化(N-gram模型):计算“条件概率”时,不可能回溯无限长的历史。通常假设一个词只与它前面的N-1个词相关。
- Uni-gram (1-gram):词与词完全独立。
P(我,爱,你) ≈ P(我)P(爱)P(你)(不考虑上下文,效果差) - Bi-gram (2-gram):只与前一个词相关。
P(我,爱,你) ≈ P(我)P(爱|我)P(你|爱) - Tri-gram (3-gram):与前两个词相关。这是最常用的折中选择。
- Uni-gram (1-gram):词与词完全独立。
应用:
- 机器翻译:译成“苹果很好吃”还是“苹果很吃好”?
2. 维特比算法——经典案例:词性标注
我们有一个隐马尔可夫模型(HMM),它由两部分构成:
- 转移概率:一个词性后面跟另一个词性的可能性。这部分由语言模型(通常是Bi-gram)提供。
- 发射概率:某个词性“产生”出当前单词的可能性。
任务:给句子“我 爱 编程”标注词性(我/代词,爱/动词,编程/名词)。
- 定义状态:词性集合 {代词, 动词, 名词, 形容词…}
- 定义观测:单词 {我, 爱, 编程…}
- 定义概率:
- 转移概率 (语言模型):
P(动词|代词)= 0.4,P(名词|动词)= 0.3… - 发射概率:
P(我|代词)= 0.8,P(爱|动词)= 0.9,P(编程|名词)= 0.7…
- 转移概率 (语言模型):
- 维特比算法执行过程:
- 初始化 (第1个词“我”):计算“我”是各种词性的概率。
V(代词) = P(代词) × P(我|代词)。假设“代词”得分最高。 - 迭代 (第2个词“爱”):对每个可能的当前词性(如“动词”),计算:
上一最佳路径概率 × P(当前词性|上一词性) × P(爱|当前词性)
关键:假设上一词性是“代词”时分数最高,那么到达“动词”的最佳路径就是...代词→动词。其他如...名词→动词的路径就被丢弃。 - 终止:处理完最后一个词后,回溯,得到整条最优路径:代词 → 动词 → 名词。
- 初始化 (第1个词“我”):计算“我”是各种词性的概率。
如果没有维特比:枚举代词/动词/名词,代词/名词/动词… 共27种,手工可行,但真实情况有上百种词性,句子有20个词时,组合数远超宇宙原子数。
有了维特比:每次只保留N条候选路径(N=词性个数),计算量线性增长,秒出结果。
总结与核心要点
| 概念 | 角色定位 | 解决的问题 | 输出 |
|---|---|---|---|
| 语言模型 | 定义“什么是合理的序列” (提供打分标准) | 计算某条路径(词序列、词性序列)的合理程度。即P(序列) | 一个概率分数 |
| 维特比算法 | 寻找“得分最高的序列” (提供搜索方法) | 在指数级爆炸的可能性中,高效找到全局最优路径。 | 最优的隐藏状态序列 |
