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

本文介绍概率语言模型的基本概念及其在NLP任务中的应用,包括输入法预测、机器翻译和语音识别等。详细解释了N-gram模型,如Unigram、Bigram和Trigram,并探讨了如何通过平滑技术解决OOV问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从本篇博文开始总结NLPNLPNLP相关知识。

概率语言模型(Statistical Language Model)(Statistical\ Language\ Model)(Statistical Language Model)

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

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

例如:

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

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

N-gram 语言模型

N−gramN-gramNgram 模型是语言模型里面最经典的模型之一。

计算 p(w1,w2,...,wn)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(w1,w2,...,wn)=p(w1)p(w2∣w1)...p(wn∣w1,w2,...,wn−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)

马尔可夫(Markov)(Markov)(Markov) 假设:

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

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

unigramunigramunigramp(w5)p({w}_{5})p(w5)

bigrambigrambigramp(w5∣w4)p({w}_{5}|{w}_{4})p(w5w4)

trigramtrigramtrigramp(w5∣w4,w3)p({w}_{5}|{w}_{4},{w}_{3})p(w5w4,w3)

我们以bigrambigrambigram 为例,计算p(w1,w2,...,wn)=p(w1∣start)p(w2∣w1)...p(wn∣wn−1)p(EOS∣wn)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)

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

这里写图片描述

语言模型的评价

PerplexityPerplexityPerplexity

测试集的能力
语言模型 ⬆-> P(test set)P(test\ set)P(test set) ⬆ -> Perplexity(test set)Perplexity(test\ set)Perplexity(test set)

Wtest={w1,w2,...,wn;wi∈V}{W}_{test}=\{{w}_{1},{w}_{2},...,{w}_{n};{w}_{i}\in V\}Wtest={w1,w2,...,wn;wiV}
Perplexity(Wtest)=2−1n∑i=1Nlog2q(wi)Perplexity({W}_{test})={2}^{-\frac{1}{n}\sum_{i=1}^{N}{log}_{2}q({w}_{i})}Perplexity(Wtest)=2n1i=1Nlog2q(wi)

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

理解PerplexityPerplexityPerplexity

这里写图片描述

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

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

  • 2−1n∑i=1Nlog2q(wi){2}^{-\frac{1}{n}\sum_{i=1}^{N}{log}_{2}q({w}_{i})}2n1i=1Nlog2q(wi)WtestW_{test}Wtest 的等效状态数目。

PerplexityPerplexityPerplexity 越小表示预测正确的概率越大。

##OOV(Out of Vocab)OOV(Out\ of\ Vocab)OOV(Out of Vocab)
Trigram ModelTrigram\ ModelTrigram Model 为例:

p(wi∣wi−1,wi−2)=count(wi−2,wi−1,wi)count(wi−2,wi−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)

这里写图片描述

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

这里写图片描述

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

max log(L(DTrain))=log(∏ip(wi∣wi−1,wi−2))=∑ilog(p(wi∣wi−1,wi−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∗log(p(我∣−,−))+log(p(你∣−−))+3∗log(p(喜欢∣−,我))+log(p(喜欢∣−,你))+log(p(开车∣我喜欢))+log(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())
+log(p(篮球∣我喜欢))+log(p(编程∣你喜欢))+log(p(篮球|我 喜欢)) + log(p(编程|你 喜欢))+log(p())+log(p())

我们以首字符举例

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

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

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

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

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

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

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

PPP(王者荣耀|我 喜欢) = 000 (TrainingTrainingTraining 中来没有出现的词)-->OOV(Out of Vocabulary)OOV (Out\ of\ Vocabulary)OOV(Out of Vocabulary)

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

同理:
PPP (编程|我 喜欢) = 000 (TrainingTrainingTraining 中没有出现的trigramtrigramtrigram)–>Smoothing

那么如何解决OOVOOVOOV 问题呢?

  1. 假设Training SetTraining\ SetTraining Set 中出现了∣V′∣|V'|V 个不同的词汇,那么我们根据词频***选择词频最高的∣V∣|V|V个词汇作为我们的词汇集VVV。***

  2. TrainingTrainingTrainingTestingTestingTesting 中,将不属于VVV 的词汇都替换成特殊词汇UNKUNKUNK

这里写图片描述

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

P(王者荣耀∣我喜欢)=P(UNK∣我喜欢)=count(我喜欢UNK)/count(我喜欢)=1/3=0.333P(王者荣耀|我 喜欢) = P(UNK|我 喜欢) = count(我 喜欢 UNK) / count(我 喜欢) = 1 / 3 = 0.333P(耀)=P(UNK)=count(UNK)/count()=1/3=0.333

平滑方法

TrainingTrainingTraining 中没有出现的trigramtrigramtrigram,就是在训练集中没出现这种组合。

共有以下几种方法解决:

  • +1 平滑
  • Back−offBack-offBackoff 回退法
  • InterpolateInterpolateInterpolate 插值法
  • Absolute DiscountAbsolute\ DiscountAbsolute Discount
  • Kneser−Ney SmoothingKneser-Ney\ SmoothingKneserNey Smoothing
  • Modified Kneser−Ney SmoothingModified\ Kneser-Ney\ SmoothingModified KneserNey Smoothing (最优的方法)

+1 平滑

这里写图片描述

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

Back−offBack-offBackoff 回退法

这里写图片描述

CountCountCount (我 喜欢 编程) = 0,但是 countcountcount (喜欢 编程) > 0

使用 TrigramTrigramTrigram 如果 count(trigram)count(trigram)count(trigram) 不满足条件,则使用BigramBigramBigram;再否则使用UnigramUnigramUnigram;

因为之前已经解决了OOVOOVOOV 问题,所以UnigramUnigramUnigram 不可能为0。

Interpolate 插值法

Trigram,Bigram,UnigramTrigram, Bigram, UnigramTrigram,Bigram,Unigram 线性组合起来:

这里写图片描述

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

这里写图片描述

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

更进一步:

这里写图片描述

根据不同的上下文,选择不同的参数。显然这样处理PerplexityPerplexityPerplexity 变小,

Absolute Discounting “绝对折扣”

这里写图片描述

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

Kneser-Ney Smoothing

这里写图片描述

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

Modified Kneser-Ney Smoothing

这里写图片描述

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

总结

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值