Language Model
语言模型用来判断:是否一句话从语法上通顺
- LM—Obgective(目标=) : Compute the probability of a sentence or sequence of words.
- P(s) = P(w1,w2,w3,w4,w5...wn)
方式:给定一个句子,计算该句子在当前LM下的概率。重点是LM的训练。
Noisy Channel Model
P(text | source) ∝ P(source | text)* P(text)
∝:proportional 等同于
此公式考虑贝叶斯公式
-
应用场景:语音识别、机器翻译、拼写纠正、OCR、密码破解
- 共同点:给定一个信号,将其转换成一个文本
给定一个 source 要转换成指定text
由于source是指定的,因此P(source)不受text影响,可看做常量
Recap:Chain Rule
-
P(A,B,C,D) =P(A)* P(B|A)* P(C|A,B)*P(D|A,B,C) ——chain rule
- 把包含4个随机变量的联合分布,拆分成3个条件分布和1个P(A)
- P(A,B) = P(A|B)* P(B) = P(B|A)*P(A)
P(w1,w2,w3,w4,w5...wn) = P(w1)* P(w2|w1)* P(w3|w1w2)* P(w4|w1,w2,w3)* P(w5|w1,w2,w3,w4)...P(wn|w1,w2...wn-1) ————chain rule
Chain Rule for Language Model
条件若包含很多单词,会有稀疏问题
Markov Assumption(马尔可夫假设 )
有些情况概率很难计算,此时考虑markov assumption估计概率
- first order markov assumption
- p(w1,w2,w3,w4...wn) = p(w1)* p(w2|w1)* p(w3|w2)...p(Wn|Wn-1)
- secod order
- p(w1,w2,w3,w4...wn) = p(w1)* p(w2|w1)* p(w3|w2,w1)...p(Wn|Wn-2,Wn-1)
- third order
- ...
Unigram, Bigram, N-gram
Language Model:Unigram
- P(w1,w2,w3,w4...Wn) = P(w1) * P(w2)* P(w3)...P(Wn)
Language Model:Bigram
<=> first order markov assumption
- p(w1,w2,w3,w4...wn) = p(w1)* p(w2|w1)* p(w3|w2,w1)...p(Wn|Wn-2,Wn-1)
Language Model: N-gram
<=> Higher order (n>2)
Estimating Probability of Language Model (估计语言模型的概率)
Unigram:Estimating Probability
P(Wn) = 词汇Wn出现次数 / 语料库所有词汇数量V
Bigram:Estimating Probability
p(w1,w2,w3,w4...wn) = p(w1)* p(w2|w1)* p(w3|w2,w1)...p(Wn|Wn-2,Wn-1)
- P(Wn/Wn-2,Wn-1) = 出现Wn的同时也出现词汇Wn-1,Wn-2的次数 / 词汇Wn出现次数
对于其中一项概率为0,可以作平滑处理
N-gram:Estimating Probability
同理Bigram estimating probability
Evaluation of Language Model(评估语言模型)
Perplexity
Perplexity = 2^(-x) ,
x : average log likelihood
将训练好的 LM 放入 语料库,计算 likelihood。
likelihood 的越大,x越大,2^(-x) 越小,Perplexity越小,越小越好!!
(可以画图像更生动展示变化曲线)Perplexity 尤其适用 unsupervised 文本的情况
Perplexity计算
Perplexity = 2^(-x) ,
x : average log likelihood (平均 对数 似然)
计算X 的过程:
- likelihood : 计算P(Wn)
- log likelihood: 计算logP(Wn)
- average log likelihood: x = (logP(W1)+...+logP(Wn))/n
最后将x带入Perplexity公式。
一般情况下,N-gram LM 效果更好
Smoothing(平滑处理)
Add-one Smoothing 方法(Laplace Smoothing 方法)
若不考虑Smoothing,通常计算的是PMLE,
- PMLE(Wi | Wi-1) = c((Wi , Wi-1)) / c(Wi )
但是此方法可能出现P(Wn)为0的情况而导致无法评估,因此引入Smoothing方法。
- PAdd-1(Wi | Wi-1) = c((Wi , Wi-1)) + 1 / c(Wi ) + V
- V是词典的大小(无重复词)
- 在分母中加V,会使得所有P()的总和为1
Add-K Smoothing(Laplace Smoothing)
- PAdd-1(Wi | Wi-1) = c((Wi , Wi-1)) + k / c(Wi ) + kV
- k=1时, 是Add-one Smoothing
如何选择K
- K = 1,2,3...n ,一个一个计算对比找到最合适的 k
- 优化 f(k) ,此时Perplexity = f(k),故 Minperplexity= Minf(k) => k= argmink f(k)
Interpolation 方法
背景:现在不出现的概率,不代表未来数据更多anyway还不出现
- 核心思路:在计算Trigram概率时同时Unigram,Bigram,Trigram出现的频次
- P(Wn|Wn-1,Wn-2) = λ1P(Wn|Wn-1,Wn-2)+ λ2P(Wn|Wn-1)+ λ3P(Wn) , λ1+λ2+λ3 =1
上面公式 <=> Tri-gram = λ1Trigram+ λ2 Bigram+ λ3Unigram
对各方法加权平均,好的方法权重大些,加权平均的和为1
Good-Turning Smoothing
背景:在训练数据里没有见过的怎么处理?
- Nc : 出现c次的单词的个数
没有出现过的单词,未来出现的概率
- PMLE=0
PMLE 方法: 在历史数据中看到过什么,依据此来给出概率结果
- PGT=N1 / N
通过N1 / N来计算。通过出现过1次的情况来预测未来的这种小概率事件
出现过的单词,未来出现的概率
- PMLE= c / N
- PGT=(c+1)Nc+1 / Nc*N
通常,PGT小于PMLE ,因为考虑到了新的情况(未出现),相当于把一些概率已经给到了新事件
缺点?如何解决?
- 计算Ni-1,需要Ni,很多情况会有Nn的缺失
- 解决:根据现有Nn的情况作一条曲线(机器学习的方法拟合)来估计缺失值
Use Language Model to Generate Sentence(利用语言模型生成句子)
LM是生成模型:一旦模型训练好,该模型可以生成新的数据
- ungram model是最简单的,不考虑语言逻辑
- Bigram model在随机的基础上,会大概率选取关联概率最大的单词,因此优于unigram
- N-gram,在有大量的语料库的基础上,可以训练