深度学习-->NLP-->语言模型

从本篇博文开始总结 N L P NLP NLP相关知识。

概率语言模型 ( S t a t i s t i c a l   L a n g u a g e   M o d e l ) (Statistical\ Language\ Model) (Statistical Language Model)

p ( s e n t e n c e ) = p ( w 1 , w 2 , . . , w n ) {p}(sentence)={p}({w}_{1},{w}_{2},..,{w}_{n}) p(sentence)=p(w1,w2,..,wn)

∑ s e n t e n c e ∈ L p ( s e n t e n c e ) = 1 \sum_{sentence\in L}^{}{p}(sentence)=1 sentenceLp(sentence)=1(相加之和为1,非常重要)

例如:

  • 输入法: P P P (隔壁老王) > P P P (隔壁老张)
  • 机器翻译:
    I   h a v e   a   d r e a m I\ have\ a\ dream I have a dream
    P P P (我有个梦想) > P P P (我有只梦想)
  • 语音识别:
    P P P (我向你汇报) > P P P (我象你汇报)

核心:所以语言模型一般指的是概率语言模型,通过分数来告诉机器怎么说人话。

N-gram 语言模型

N − g r a m N-gram Ngram 模型是语言模型里面最经典的模型之一。

计算 p ( w 1 , w 2 , . . . , w n ) p({w}_{1},{w}_{2},...,{w}_{n}) p(w1,w2,...,wn)
利用链式法则:
p ( A , B , C ) = p ( A ) p ( B ∣ A ) p ( C ∣ A , B ) p(A,B,C)=p(A)p(B|A)p(C|A,B) p(A,B,C)=p(A)p(BA)p(CA,B)

可得:
p ( w 1 , w 2 , . . . , w n ) = p ( w 1 ) p ( w 2 ∣ w 1 ) . . . p ( w n ∣ w 1 , w 2 , . . . , w n − 1 ) p({w}_{1},{w}_{2},...,{w}_{n})=p({w}_{1})p({w}_{2}|{w}_{1})...p({w}_{n}|{w}_{1},{w}_{2},...,{w}_{n-1}) p(w1,w2,...,wn)=p(w1)p(w2w1)...p(wnw1,w2,...,wn1)

马尔可夫 ( M a r k o v ) (Markov) (Markov) 假设:

  • “无记忆性”: 未来的事件,只取决于有限的历史。

基于马尔科夫假设计算 p ( w 5 ∣ w 4 , w 3 , w 2 , w 1 ) p({w}_{5}|{w}_{4},{w}_{3},{w}_{2},{w}_{1}) p(w5w4,w3,w2,w1),有三种版本的结果。

u n i g r a m unigram unigram p ( w 5 ) p({w}_{5}) p(w5)

b i g r a m bigram bigram p ( w 5 ∣ w 4 ) p({w}_{5}|{w}_{4}) p(w5w4)

t r i g r a m trigram trigram p ( w 5 ∣ w 4 , w 3 ) p({w}_{5}|{w}_{4},{w}_{3}) p(w5w4,w3)

我们以 b i g r a m bigram bigram 为例,计算 p ( w 1 , w 2 , . . . , w n ) = p ( w 1 ∣ s t a r t ) p ( w 2 ∣ w 1 ) . . . p ( w n ∣ w n − 1 ) p ( E O S ∣ w n ) p({w}_{1},{w}_{2},...,{w}_{n})=p({w}_{1}|start)p({w}_{2}|{w}_{1})...p({w}_{n}|{w}_{n-1})p(EOS|{w}_{n}) p(w1,w2,...,wn)=p(w1start)p(w2w1)...p(wnwn1)p(EOSwn)

显然引入马尔科夫假设,会使得模型变得简单,参数个数减少。

这里写图片描述

语言模型的评价

P e r p l e x i t y Perplexity Perplexity

测试集的能力
语言模型 ⬆-> P ( t e s t   s e t ) P(test\ set) P(test set) ⬆ -> P e r p l e x i t y ( t e s t   s e t ) Perplexity(test\ set) Perplexity(test set)

W t e s t = { w 1 , w 2 , . . . , w n ; w i ∈ V } {W}_{test}=\{{w}_{1},{w}_{2},...,{w}_{n};{w}_{i}\in V\} Wtest={w1,w2,...,wn;wiV}
P e r p l e x i t y ( W t e s t ) = 2 − 1 n ∑ i = 1 N l o g 2 q ( w i ) Perplexity({W}_{test})={2}^{-\frac{1}{n}\sum_{i=1}^{N}{log}_{2}q({w}_{i})} Perplexity(Wtest)=2n1i=1Nlog2q(wi)

q ( w i ) q({w}_{i}) q(wi) 表示模型对每个词的预测概率。

理解 P e r p l e x i t y Perplexity Perplexity

这里写图片描述

  • − l o g 2 p ( v i ) -{log}_{2}p({v}_{i}) log2p(vi):如果用概率 p p p 来编码 v i {v}_{i} vi,需要多少比特。

  • − ∑ i = 1 ∣ V ∣ p ^ ( v i ) l o g 2 q ( v i ) -\sum_{i=1}^{|V|}\hat{p}({v}_{i}){log}_{2}q({v}_{i}) i=1Vp^(vi)log2q(vi):表示 v i {v}_{i} vi 服从 p p p q q q 来编码 v i {v}_{i} vi 比特数的期望。

  • 2 − 1 n ∑ i = 1 N l o g 2 q ( w i ) {2}^{-\frac{1}{n}\sum_{i=1}^{N}{log}_{2}q({w}_{i})} 2n1i=1Nlog2q(wi) W t e s t W_{test} Wtest 的等效状态数目。

P e r p l e x i t y Perplexity Perplexity 越小表示预测正确的概率越大。

## O O V ( O u t   o f   V o c a b ) OOV(Out\ of\ Vocab) OOV(Out of Vocab)
T r i g r a m   M o d e l Trigram\ Model Trigram Model 为例:

p ( w i ∣ w i − 1 , w i − 2 ) = c o u n t ( w i − 2 , w i − 1 , w i ) c o u n t ( w i − 2 , w i − 1 ) p({w}_{i}|{w}_{i-1},{w}_{i-2})=\frac{count({w}_{i-2},{w}_{i-1},{w}_{i})}{count({w}_{i-2},{w}_{i-1})} p(wiwi1,wi2)=count(wi2,wi1)count(wi2,wi1,wi)

这里写图片描述

那么有人可能要问:为什么上面公式成立?

这里写图片描述

下面我们以上面这个训练集为例,利用***最大似然估计*** 的方法来证明上式成立。

m a x   l o g ( L ( D T r a i n ) ) = l o g ( ∏ i p ( w i ∣ w i − 1 , w i − 2 ) ) = ∑ i l o g ( p ( w i ∣ w i − 1 , w i − 2 ) ) max\ log(L({D}_{Train}))=log(\prod_{i}^{}p({w}_{i}|{w}_{i-1},{w}_{i-2}))=\sum_{i}^{}log(p({w}_{i}|{w}_{i-1},{w}_{i-2})) max log(L(DTrain))=log(ip(wiwi1,wi2))=ilog(p(wiwi1,wi2))

= 3 ∗ l o g ( p ( 我 ∣ − , − ) ) + l o g ( p ( 你 ∣ − − ) ) + 3 ∗ l o g ( p ( 喜 欢 ∣ − , 我 ) ) + l o g ( p ( 喜 欢 ∣ − , 你 ) ) + l o g ( p ( 开 车 ∣ 我 喜 欢 ) ) + l o g ( p ( 上 网 ∣ 我 喜 欢 ) ) =3*log(p(我|-,-))+log(p(你|--))+3*log(p(喜欢|-, 我)) + log(p(喜欢|-,你))+log(p(开车|我 喜欢)) + log(p(上网|我 喜欢)) =3log(p(,))+log(p())+3log(p(,))+log(p(,))+log(p())+log(p())
+ l o g ( p ( 篮 球 ∣ 我 喜 欢 ) ) + l o g ( p ( 编 程 ∣ 你 喜 欢 ) ) +log(p(篮球|我 喜欢)) + log(p(编程|你 喜欢)) +log(p())+log(p())

我们以首字符举例

约束条件: p ( 我 ∣ − , − ) + p ( 你 ∣ − , − ) = 1 p(我|-,-) + p(你|-,-) = 1 p(,)+p(,)=1

由拉格朗日乘子法:$$L = 3*log(p(我|-,-)) + log(p(你|-, -))

  • lambda * (p(我|-,-) + p(你|-,-) - 1)$$

L对参数的导数等于零: d L d ( p ( 我 ∣ − , − ) ) = 0 ; d L d ( p ( 你 ∣ − , − ) ) = 0 ; d L d ( l a m b d a ) = 0 \frac{dL}{d(p(我|-,-))} = 0; \frac{dL}{d(p(你|-,-))}= 0; \frac{dL}{d(lambda)}= 0 d(p(,))dL=0d(p(,))dL=0d(lambda)dL=0

得: 3 / p ( 我 ∣ − , − ) + l a m b d a = 0 ; 3 / p(我|-,-) + lambda = 0; 3/p(,)+lambda=0;
1 / p ( 你 ∣ − , − ) + l a m b d a = 0 ; 1 / p(你|-,-) + lambda = 0; 1/p(,)+lambda=0;
p ( 我 ∣ − , − ) + p ( 你 ∣ − , − ) – 1 = 0 p(我|-,-) + p(你|-,-) – 1 = 0 p(,)+p(,)1=0

可计算得出: P ( 我 ∣ − , − ) = 3 3 + 1 = c o u n t ( − , − , 我 ) c o u n t ( − , − , 我 ) + c o u n t ( − , − , 你 ) P(我|-,-) = \frac{3} {3 + 1} = \frac{count(-,-,我)}{count(-,-,我) + count(-,-,你)} P(,)=3+13=count(,,)+count(,,)count(,,)

假设我们现在由训练集得出一个模型 p p p,现在由模型给测试集中的"我 喜欢 王者荣耀"打分。

P P P(王者荣耀|我 喜欢) = 0 0 0 ( T r a i n i n g Training Training 中来没有出现的词)--> O O V ( O u t   o f   V o c a b u l a r y ) OOV (Out\ of\ Vocabulary) OOV(Out of Vocabulary)

按照上面的计算公式 P P P(王者荣耀|我 喜欢) = 0,显然不合理,训练集中没出现"王者荣耀"并不能代表就不喜欢?

同理:
P P P (编程|我 喜欢) = 0 0 0 ( T r a i n i n g Training Training 中没有出现的 t r i g r a m trigram trigram)–>Smoothing

那么如何解决 O O V OOV OOV 问题呢?

  1. 假设 T r a i n i n g   S e t Training\ Set Training Set 中出现了 ∣ V ′ ∣ |V'| V 个不同的词汇,那么我们根据词频***选择词频最高的 ∣ V ∣ |V| V个词汇作为我们的词汇集 V V V。***

  2. T r a i n i n g Training Training T e s t i n g Testing Testing 中,将不属于 V V V 的词汇都替换成特殊词汇 U N K UNK UNK

这里写图片描述

V ′ = V'= V= {我 喜欢 开车 上网 篮球 编程}
V = V = V= {我 喜欢 开车 上网 编程 }

P ( 王 者 荣 耀 ∣ 我 喜 欢 ) = P ( U N K ∣ 我 喜 欢 ) = c o u n t ( 我 喜 欢 U N K ) / c o u n t ( 我 喜 欢 ) = 1 / 3 = 0.333 P(王者荣耀|我 喜欢) = P(UNK|我 喜欢) = count(我 喜欢 UNK) / count(我 喜欢) = 1 / 3 = 0.333 P(耀)=P(UNK)=count(UNK)/count()=1/3=0.333

平滑方法

T r a i n i n g Training Training 中没有出现的 t r i g r a m trigram trigram,就是在训练集中没出现这种组合。

共有以下几种方法解决:

  • +1 平滑
  • B a c k − o f f Back-off Backoff 回退法
  • I n t e r p o l a t e Interpolate Interpolate 插值法
  • A b s o l u t e   D i s c o u n t Absolute\ Discount Absolute Discount
  • K n e s e r − N e y   S m o o t h i n g Kneser-Ney\ Smoothing KneserNey Smoothing
  • M o d i f i e d   K n e s e r − N e y   S m o o t h i n g Modified\ Kneser-Ney\ Smoothing Modified KneserNey Smoothing (最优的方法)

+1 平滑

这里写图片描述

该平滑方法在别的分类问题中可能有用,但是在语言模型中表现一般,基本上不用。

B a c k − o f f Back-off Backoff 回退法

这里写图片描述

C o u n t Count Count (我 喜欢 编程) = 0,但是 c o u n t count count (喜欢 编程) > 0

使用 T r i g r a m Trigram Trigram 如果 c o u n t ( t r i g r a m ) count(trigram) count(trigram) 不满足条件,则使用 B i g r a m Bigram Bigram;再否则使用 U n i g r a m Unigram Unigram;

因为之前已经解决了 O O V OOV OOV 问题,所以 U n i g r a m Unigram Unigram 不可能为0。

Interpolate 插值法

T r i g r a m , B i g r a m , U n i g r a m Trigram, Bigram, Unigram Trigram,Bigram,Unigram 线性组合起来:

这里写图片描述

这里面的参数如何得出?同理使用极大似然估计得:

这里写图片描述

l o g log log 里面只有几个参数的和求导之后,各个参数耦合在一起。EM 算法 来解决。

更进一步:

这里写图片描述

根据不同的上下文,选择不同的参数。显然这样处理 P e r p l e x i t y Perplexity Perplexity 变小,

Absolute Discounting “绝对折扣”

这里写图片描述

w i − n + 1 i − 1 {w}^{i-1}_{i-n+1} win+1i1表示 w i − n + 1 {w}_{i-n+1} win+1 w i − 1 {w}_{i-1} wi1 n _ g r a m n\_gram n_gram。显然由公式可知在这种平滑方法中,计算结果和 P a b s ( w i ∣ w i − n + 2 i − 1 ) {P}_{abs}({w}_{i}|{w}^{i-1}_{i-n+2}) Pabs(wiwin+2i1) 有很大关系。

Kneser-Ney Smoothing

这里写图片描述

有钱的,每个人固定的税 D, 建立一个基金;没钱的,根据 n − 1 _ g r a m n-1\_gram n1_gram的“交际广泛”的程度来分了这个基金。

Modified Kneser-Ney Smoothing

这里写图片描述

有钱的,每个人根据自己的收入交不同的税D, 类似于阶梯税,建立一个基金;没钱的,根据 n − 1 _ g r a m n-1\_gram n1_gram“交际广泛”的程度来分了这个基金。

总结

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值