语言模型
什么是语言模型?
了解一门语言的人可以判断一句话是否合理
语言模型是用于计算文本的成句概率模型
语言模型的主要用途
语音识别(ASR)
语音识别 : 声音–>文本
声音本质是一种波
将波按时间段切分很多帧,如25ms一段
之后进行声学特征提取,将每一帧转换成一个向量
以声学特征提取后的向量为输入,经过 声学模型 预测得到音素
音素与拼音类似,但要考虑声调
音素序列对应多条文本序列,由语言模型挑选出成句概率最高的序列
使用beam search 或者维特比的方式解码
手写识别 (OCR)
识别模型将图片中文字转化为候选汉字(一般分为识别和定位两位),再有语言模型挑选出成句概率最高的序列
输入法
输入法即为拼音序列,每个拼音自然的有多个候选汉字,根据语言模型挑选高概率序列
需要考虑常见的误读,手误等问题
手写输入法,语言输入法同理
语言模型的分类
按照发展阶段来看,有四个模型,从简单到复杂
1.统计语言模型(SLM) S = Statistics
ngram语言模型等
2.神经语言模型(NLM) N = Neural
rnn语言模型等
3.预训练语言模型(PLM) P = Pre-train
Bert, GPT等
4.大语言模型(LLM) L = Large
ChatGPT等
N-gram语言模型
如何计算成句概率?
用S代表句子,w代表单个字或词
$$
S = w_1w_2w_3w_4
P(S) = P(w_1,w_2,w_3,w_4,…w_n)
$$
成句概率本质上是在计算词W1 – Wn按顺序出现的概率
P(w1,w2,…wn)=P(w1)P(w2∣w1)P(w3∣w1w2)…P(wn∣w1w2…wn−1) P(w_1,w_2,…w_n) = P(w_1)P(w_2 | w1)P(w_3 |w_1w_2)…P(w_n|w_{1}w_{2}…w_{n-1}) P(w1,w2,…wn)=P(w1)P(w2∣w1)P(w3∣w1w2)…P(wn∣w1w2…wn−1)
例子:
以字为单位:
P(今天天气不错) = P(今)* P(天|今) * P(天|今天) * P(气|今天天)* P(不|今天天气) * P(错|今天天气不)
以词为单位:
P(今天 天气 不错) = P(今天)* P(天气 | 今天) * P(不错 | 今天 天气)
计算流程:
如何计算P(今天)?
P(今天) = Count(今天) / Count_total 语料总词数
P(天气 | 今天) = Count(今天 天气) / Count(今天)
P(不错 | 今天 天气) = Count(今天 天气 不错) / Count(今天 天气 )
二元组 : 今天 天气 2 gram
三元组 : 今天 天气 不错 3 gram
困难 : 句子太多了
N-gram 数量非常庞大,无法穷举,需要简化
改善:
马尔可夫假设
P(w∣w1,w2,w3….wn−1)=P(wn∣wn−3,wn−2,wn−1) P(w_ | w_1,w_2,w_3….w_{n-1}) = P(w_n | w_{n-3},w_{n-2},w_{n-1}) P(w∣w1,w2,w3….wn−1)=P(wn∣wn−3,wn−2,wn−1)
假设第n个词出现的概率,仅受其前面有限个词的影响
P(今天天气不错) = P(今)* P(天|今) * P(天|今天) * P(气|天天)* P(不|天气) * P(错|气不)
跟前面几个字相关,可以自己指定
马尔科夫假设的缺陷:
影响第n个词的因素可能出现在前面很远的地方
影响第n个词的因素可能出现在其后面
影响第n个词的因素可能并不在文中
但是马尔科夫假设下依然可以得到非常有效的模型
3 gram 模型:
P(今天 天气 不错) = P(今天)* P(天气 | 今天) * P(不错 | 今天 天气)
2 gram 模型:
P(今天 天气 不错) = P(今天)* P(天气 | 今天) * P(不错 | 天气)
问题:
如何给出语料中没有出现过的词或ngram概率?
P(今天 天气 糟糕) = P(今天)* P(天气 | 今天) * P(糟糕 | 天气)
不能直接给0,否则都失效了
引入:
平滑问题
理论上说,任意的词组合成的句子,概率都不应当为0
如何给没见过的词或ngram分配概率,即为平滑问题
也称折扣问题
平滑方法
1.回退(backoff)
当三元组a b c 不存在时,退而求其次寻找 b c 二元组的概率
P(c | ab) = P(c | b) * Bow(ab)
Bow(ab) : 二元组 a b 的回退概率
回退概率有很多计算方式,甚至可以设定为常数
回退可以迭代进行,如序列 abcd
















暂无评论内容