[自然语言处理-入门] 语言模型LM
个人导航
知乎:https://www.zhihu.com/people/byzh_rc
CSDN:https://blog.csdn.net/qq_54636039
注:本文仅对所述内容做了框架性引导,具体细节可查询其余相关资料or源码
参考文章:各方资料
文章目录
- [[自然语言处理-入门] 语言模型LM](#[自然语言处理-入门] 语言模型LM)
- 个人导航
- [语言模型 LM](#语言模型 LM)
- [连续型语言模型 continuous LM](#连续型语言模型 continuous LM)
-
-
-
- [1. N-gram 模型](#1. N-gram 模型)
- [2. 连续表示 LM(借鉴推荐系统)](#2. 连续表示 LM(借鉴推荐系统))
-
-
- [RNN-based LM](#RNN-based LM)
- [语言模型融合 Fusion](#语言模型融合 Fusion)
语言模型 LM
语言模型LM = 给一串 词/Token 算概率的模型
- 定义 :估算token 序列的概率 P ( y 1 , y 2 , . . . , y n ) P(y_1,y_2,...,y_n) P(y1,y2,...,yn)
- 作用 :给文本输出做概率约束,提升生成 / 识别合理性
X X X:输入 ,比如一段语音、一段英文
Y Y Y:输出句子 ,比如识别出来的中文
Y ∗ Y^* Y∗:最终我们要选的、最正确的句子
arg max Y \arg\max_Y argmaxY:从所有可能的句子里,挑概率最大的那一句
原本模型 只看这一项 P ( Y ∣ X ) P(Y|X) P(Y∣X)
- P ( Y ∣ X ) P(Y|X) P(Y∣X) 只看声音和文字像不像
- P ( Y ∣ X ) P(Y|X) P(Y∣X) = 听到声音 X,说出句子 Y 的概率
**LM语言模型**只看 P ( Y ) P(Y) P(Y)
- P ( Y ) P(Y) P(Y) 只看句子本身
- P ( Y ) P(Y) P(Y) = 这句话本身像不像人话、通不通顺
优势: 只需要纯文本就能训练,数据极易获取
现在两个标准一起打分: P ( Y ∣ X ) ⋅ P ( Y ) P(Y|X)⋅P(Y) P(Y∣X)⋅P(Y)
- P ( Y ∣ X ) P(Y|X) P(Y∣X):听着像不像(声学分)
- P ( Y ) P(Y) P(Y):说的通不通(语文分,LM 给的)
两者相乘后,正确句子的总分更高
e.g.
听到语音:
wreck a nice beach模型会猜好几个候选句子:
- wreck a nice beach(正确)
- recognize speech(发音几乎一样,模型很容易选这个)
- wreck and nice peach(错)
P ( Y ∣ X ) P(Y|X) P(Y∣X) 会觉得:
recognize speech发音更匹配,概率最高,直接选错P ( Y ) = P ( recognize speech ) P(Y)=P(\text{recognize speech}) P(Y)=P(recognize speech):很高,日常会说
P ( Y ) = P ( wreck a nice beach ) P(Y)=P(\text{wreck a nice beach}) P(Y)=P(wreck a nice beach):很低,日常很少这么说P ( Y ∣ X ) ⋅ P ( Y ) P(Y|X)⋅P(Y) P(Y∣X)⋅P(Y) 综合考虑
recognize speech:声学分高,但语境不对,语文分被压低
wreck a nice beach:声学分中等,但语境匹配,语文分拉高-> 两者相乘后,正确句子的总分更高 ,模型就选对了
连续型语言模型 continuous LM
1. N-gram 模型
用 前 n-1 个词 预测 下一个词
P ( y 1 , . . . , y n ) = P ( y 1 ) P ( y 2 ∣ y 1 ) P ( y 3 ∣ y 1 y 2 ) . . . P ( y n ∣ y n − 1 ) P(y_1,...,y_n)=P(y_1)P(y_2|y_1)P(y_3|y_1y_2)...P(y_n|y_{n-1}) P(y1,...,yn)=P(y1)P(y2∣y1)P(y3∣y1y2)...P(yn∣yn−1)
公式: P ( 词 ∣ 前文 ) = 共现次数 / 前文出现次数 P (\text{词} | \text{前文}) = \text{共现次数} / \text{前文出现次数} P(词∣前文)=共现次数/前文出现次数
缺点 :数据稀疏、长文本不准,需要平滑(smoothing)
2. 连续表示 LM(借鉴推荐系统)
把词变成向量 ,用向量点积估算共现概率
- h j h_j hj: 上文history
- v i v_i vi: 下文词汇
- n i j ≈ v i ⋅ h j n_{ij}≈v_i⋅h_j nij≈vi⋅hj: 共现次数
优点:
- 自动平滑:没见过的词对也能靠向量相似度算概率
- 语义相似:dog /cat 向量接近,模型能泛化
RNN-based LM
用神经网络 做下一词预测
- 解决 N-gram 长依赖差的问题
- 典型结构:RNN / LSTM → 输出下一词概率分布
- 核心:用**隐藏状态**保存历史信息,支持更长上下文
语言模型融合 Fusion
目标:把 LM语言模型 和 LAS语音识别模型 结合
三种融合方式:
| 融合方式 | 时机 | 融合位置 | 特点 |
|---|---|---|---|
| Shallow Fusion | 训练后 | 输出层 logit 加权 | 简单、不用重训 |
| Deep Fusion | 训练后 | 隐藏层结合 | 效果更强 |
| Cold Fusion | 训练前 | 训练时就融入 LM | LAS 收敛更快 |