NLP基础——语言模型(LM)

文章目录

NLP基础:语言模型(LM)

语言模型(LM,Language Model)就是用来判断某个句子是否语义通顺。首先对句子进行分词,句子的概率可以表示为各个词的联合概率:P ( s ) = P ( w 1 , w 2 , . . . , w n ) P(s)=P(w_1,w_2,…,w_n)P (s )=P (w 1 ​,w 2 ​,…,w n ​)。

根据Chain rule: P(A,B,C,D)=P(A)P(B|A)P(C|A,B)P(D|A,B,C),可以转化:

P ( s ) = P ( w 1 , w 2 , . . . , w n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) . . . P ( w n ∣ w 1 , w 2 , w 3 , . . . , w n − 1 ) P(s)=P(w_1,w_2,…,w_n)=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)…P(w_n|w_1,w_2,w_3,…,w_{n-1})P (s )=P (w 1 ​,w 2 ​,…,w n ​)=P (w 1 ​)P (w 2 ​∣w 1 ​)P (w 3 ​∣w 1 ​,w 2 ​)…P (w n ​∣w 1 ​,w 2 ​,w 3 ​,…,w n −1 ​)
对于概率P ( w n ∣ w 1 , w 2 , w 3 , . . . , w n − 1 ) P(w_n|w_1,w_2,w_3,…,w_{n-1})P (w n ​∣w 1 ​,w 2 ​,w 3 ​,…,w n −1 ​),条件很长,corpus里找不到单词,就容易导致稀疏性(sparsity),因此引入Markov Assumption:

  • Unigram Model(1-gram):P ( w n ∣ w 1 , w 2 , w 3 , . . . , w n − 1 ) = P ( w n ) P(w_n|w_1,w_2,w_3,…,w_{n-1})=P(w_n)P (w n ​∣w 1 ​,w 2 ​,w 3 ​,…,w n −1 ​)=P (w n ​)
  • Bigram Model(2-gram):P ( w n ∣ w 1 , w 2 , w 3 , . . . , w n − 1 ) = P ( w n ∣ w n − 1 ) P(w_n|w_1,w_2,w_3,…,w_{n-1})=P(w_n|w_{n-1})P (w n ​∣w 1 ​,w 2 ​,w 3 ​,…,w n −1 ​)=P (w n ​∣w n −1 ​)
  • Trigram Model(3-gram):P ( w n ∣ w 1 , w 2 , w 3 , . . . , w n − 1 ) = P ( w n ∣ w n − 2 , w n − 1 ) P(w_n|w_1,w_2,w_3,…,w_{n-1})=P(w_n|w_{n-2},w_{n-1})P (w n ​∣w 1 ​,w 2 ​,w 3 ​,…,w n −1 ​)=P (w n ​∣w n −2 ​,w n −1 ​)
  • N-gram Model

因此,语言模型可表示为:

  • Unigram Model:P ( w 1 , w 2 , . . . , w n ) = ∑ i = 1 n P ( w i ) P(w_1,w_2,…,w_n)= \sum_{i=1}^n P(w_i)P (w 1 ​,w 2 ​,…,w n ​)=∑i =1 n ​P (w i ​)
  • Bigram Model:P ( w 1 , w 2 , . . . , w n ) = P ( w 1 ) ∑ i = 2 n P ( w i ∣ w i − 1 ) P(w_1,w_2,…,w_n)= P(w_1)\sum_{i=2}^n P(w_i|w_{i-1})P (w 1 ​,w 2 ​,…,w n ​)=P (w 1 ​)∑i =2 n ​P (w i ​∣w i −1 ​)
  • Trigram Model:P ( w 1 , w 2 , . . . , w n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) ∑ i = 3 n P ( w i ∣ w i − 1 , w i − 2 ) P(w_1,w_2,…,w_n)= P(w_1)P(w_2|w_1)\sum_{i=3}^n P(w_i|w_{i-1},w_{i-2})P (w 1 ​,w 2 ​,…,w n ​)=P (w 1 ​)P (w 2 ​∣w 1 ​)∑i =3 n ​P (w i ​∣w i −1 ​,w i −2 ​)

那么如何估计每个单词的概率呢?统计语料库corpus里出现的单词的频数来估计概率,即模型的训练过程。

比如,根据以下不同阶段的工作或选择构建不同的LM?

  • N-gram里N的选择:Unigram, Bigram, Trigram,…

  • 平滑处理方法的不同:Laplace smoothing, Interpolation, Good-Turing smoothing等10几种方法。(计算概率避免出现概率为0,在文本分类的问题中,当一个词语没有在训练样本中出现,该词语调概率为0,使用连乘计算文本出现概率时也为0。)

  • 预处理方法:语料中去掉某些特定的人名地名等词,停用词等。

1. 模型评估(概率估计)

根据不同的选择可以有很多LM,又如何从中选择最好的一个呢?训练出来的语言模型效果是好还是坏?

理想情况下:

  1. 假设有语言模型A,B
  2. 选定一个特定的任务,比如拼写纠错,机器翻译(MT,Machine Translation)
  3. 把两个模型都应用到此任务中
  4. 最后比较准确率,从而判断A,B的表现

核心思路:P ( w 1 , w 2 , . . . , w n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 , w 2 ) . . . P ( w n ∣ w 1 , w 2 , w 3 , . . . , w n − 1 ) P(w_1,w_2,…,w_n)= P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)…P(w_n|w_1,w_2,w_3,…,w_{n-1})P (w 1 ​,w 2 ​,…,w n ​)=P (w 1 ​)P (w 2 ​∣w 1 ​)P (w 3 ​∣w 1 ​,w 2 ​)…P (w n ​∣w 1 ​,w 2 ​,w 3 ​,…,w n −1 ​)使概率乘积最大。

更简单的评估方法,不需要放在特定任务中—— Perplexity

Perplexity = 2 − x , x : a v e r a g e l o g l i k e l i h o o d \text{Perplexity}=2^{-x}, \quad x:average\quad log\quad likelihood Perplexity =2 −x ,x :a v e r a g e l o g l i k e l i h o o d
例如,Bigram Model:
B i g r a m M o d e l : P ( w 1 , w 2 , w 3 , w 4 , w 5 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 2 ) P ( w 4 ∣ w 3 ) P ( w 5 ∣ w 4 ) x = l o g P ( w 1 ) + l o g P ( w 2 ∣ w 1 ) + l o g P ( w 3 ∣ w 2 ) + l o g P ( w 4 ∣ w 3 ) + l o g P ( w 5 ∣ w 4 ) 5 ⟹ Perplexity = 2 − x Bigram Model: P(w_1,w_2,w_3,w_4,w_5)=P(w_1)P(w_2|w_1)P(w_3|w_2)P(w_4|w_3)P(w_5|w_4)\ x =\frac{logP(w_1)+logP(w_2|w_1)+logP(w_3|w_2)+logP(w_4|w_3)+logP(w_5|w_4)}{5} \Longrightarrow \text{Perplexity}=2^{-x}B i g r a m M o d e l :P (w 1 ​,w 2 ​,w 3 ​,w 4 ​,w 5 ​)=P (w 1 ​)P (w 2 ​∣w 1 ​)P (w 3 ​∣w 2 ​)P (w 4 ​∣w 3 ​)P (w 5 ​∣w 4 ​)x =5 l o g P (w 1 ​)+l o g P (w 2 ​∣w 1 ​)+l o g P (w 3 ​∣w 2 ​)+l o g P (w 4 ​∣w 3 ​)+l o g P (w 5 ​∣w 4 ​)​⟹Perplexity =2 −x
Perplexity越小(LM中所有单词的概率乘积越大),LM越好。

2. 平滑方法

为了解决使用N-Gram模型时可能引入的稀疏数据问题,人们设计了多种平滑算法。
计算概率应避免出现概率为0,在文本分类的问题中,当一个词语没有在训练样本中出现,该词语概率为0,使用连乘计算文本出现概率时也为0。

可以用平滑处理方法:Laplace smoothing, Interpolation, Good-Turing smoothing等10几种方法。

  • *Add-one Smoothing(Laplace Smoothing)

P ( w i ∣ w i − 1 ) = c ( w i − 1 , w i ) + 1 c ( w i − 1 ) + V P(w_i|w_{i-1})=\frac{c(w_{i-1},w_i)+1}{c(w_{i-1})+V}P (w i ​∣w i −1 ​)=c (w i −1 ​)+V c (w i −1 ​,w i ​)+1 ​

,V是词库大小(分母+V为了归一化,所有概率和=1)

  • *Add-K Smoothing(Laplace Smoothing)

P ( w i ∣ w i − 1 ) = c ( w i − 1 , w i ) + k c ( w i − 1 ) + k V P(w_i|w_{i-1})=\frac{c(w_{i-1},w_i)+k}{c(w_{i-1})+kV}P (w i ​∣w i −1 ​)=c (w i −1 ​)+k V c (w i −1 ​,w i ​)+k ​

,V是词库大小(V=set(corpus))

  • Interpolation插值 在使用插值算法时,把不同阶别的N-Gram模型线性加权组合后再来使用。简单线性插值(Simple Linear Interpolation)可以用下面的公式来定义:

P ( w i ∣ w i − 2 , w i − 1 ) = λ 1 P ( w i ) + λ 2 P ( w i ∣ w i − 1 ) + λ 3 P ( w i − 2 , w i − 1 ) λ 1 + λ 2 + λ 3 = 1 P(w_i|w_{i-2},w_{i-1})=\lambda_1P(w_i)+\lambda_2P(w_i|w_{i-1})+\lambda_3P(w_{i-2},w_{i-1}) \ \lambda_1 + \lambda_2 + \lambda_3 = 1 P (w i ​∣w i −2 ​,w i −1 ​)=λ1 ​P (w i ​)+λ2 ​P (w i ​∣w i −1 ​)+λ3 ​P (w i −2 ​,w i −1 ​)λ1 ​+λ2 ​+λ3 ​=1

  • Good-Turing smoothing 基本思想: 用观察计数较高的 N-gram 数量来重新估计概率量大小,并把它指派给那些具有零计数或较低计数的 N-gram. Idea: reallocate the probability mass of n-grams that occur r+1 times in the training data to the n-grams that occur r times. 在 Good Turing 下,对每一个计数 r,我们做一个调整,变为 r ′ r’r ′,n r n_r n r ​表示出现过r次的N-gram:

r ′ = ( r + 1 ) n r + 1 / n r P ( x : c ( x ) = r ) = r ′ / N r’= (r+1)n_{r+1}/n_r \ P(x:c(x)=r)=r’/N r ′=(r +1 )n r +1 ​/n r ​P (x :c (x )=r )=r ′/N

3. LM在拼写纠正(Spell Correction)中的应用

一般地,拼写错误有两种:第一,词拼写错;第二,没有错词,语法有问题。

对于错词,之前的方法VS现在的方法

之前的方法:

用户输入 --> 从词典中寻找编辑距离最小的词(需要遍历整个词典O(|V|) --> 返回

现在的方法:

用户输入 --> 生成编辑距离为1,2的字符串(candidates) --> 过滤 (根据上下文)--> 返回

如何过滤?

假设w是错词,改成正确的形式c:
c ∗ = arg ⁡ max ⁡ c ∈ C a n d i d a t e s P ( c ∣ w ) = arg ⁡ max ⁡ c ∈ C a n d i d a t e s P ( w ∣ c ) P ( c ) / P ( w ) = arg ⁡ max ⁡ c ∈ C a n d i d a t e s P ( w ∣ c ) P ( c ) \begin{aligned} c^{*} &= \mathop{\arg\max}\limits_{c \in Candidates} P(c|w) \ &= \mathop{\arg\max}\limits_{c \in Candidates} P(w|c)P(c)/P(w) \ &= \mathop{\arg\max}\limits_{c \in Candidates} P(w|c)P(c) \ \end{aligned}c ∗​=c ∈C a n d i d a t e s ar g max ​P (c ∣w )=c ∈C a n d i d a t e s ar g max ​P (w ∣c )P (c )/P (w )=c ∈C a n d i d a t e s ar g max ​P (w ∣c )P (c )​

P ( w ∣ c ) P(w|c)P (w ∣c )是(w,c)相关的score,P ( c ) P(c)P (c )是语言模型

第一,词拼写错:

  1. 首先是获取candidates,w所有可能的c,有两种方法来过滤出最优的正确词。

  2. Edit Distance 设定不同编辑距离下(w,c)相关的score,例如d=1, score=0.8; d=2, score=0.2; other, score=0.

  3. Collected data
    P(w|c):当用户拼c时,有多少概率把它拼错位w?

从搜索引擎可以得到相关的历史数据,例如输入搜索词”appl”,搜索框历史给出相关的可能的匹配词,统计出现的频率即可。

  1. 然后对候选词根据N-gram的概率最大化来选择最优的词c。

第二,没有错词,语法有问题。

根据LM来检查。

欢迎各位关注我的个人公众号: HsuDan,我将分享更多自己的学习心得、避坑总结、面试经验、AI最新技术资讯。

Original: https://blog.csdn.net/u012744245/article/details/124237078
Author: 快乐小码农
Title: NLP基础——语言模型(LM)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/531696/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球