语言模型基础

61 阅读1分钟

语言模型旨在准确预测语言符号的概率,语言模型通过对语料库中的语料进行统计或学习获得预测语言符号概率的能力,n-grams是最具代表性的统计语言模型,它基于马尔可夫假设和离散变量的极大似然估计给出语言符号的概率

n-grams语言模型

我们约定包含N个元素的语言符号表示为w1:N={w1,w2...wN}w_{1:N} = \{w_1,w_2...w_N\}

n-grams语言模型通过依次统计文本中的n-gram以及对应的(n-1)gram在语料库中出现的相对频率计算文本w1:Nw_{1:N}出现的概率,计算公式如下

Pngrams(w1:N)=ΠinNC(win+1:i)C(win+1:i1)P_{n-grams}(w_{1:N}) = \Pi_{i-n}^N\frac{C(w_{i-n+1:i})}{C(w_{i-n+1:i-1})}

C(win+1:i)C(w_{i-n+1:i})为序列{win+1,...,wi}\{w_{i-n+1,...,w_i}\}在语料库中出现的次数,n=1时,称为unigram,也就是不考虑文本的上下文关系,n=2时称为bigrams,也就是对前一个词进行考虑,此时,公式变为:

P2grams(w1:N)=Πi2NC(wi1:i)C(wi1:i1)P_{2-grams}(w_{1:N}) = \Pi_{i-2}^N\frac{C(w_{i-1:i})}{C(w_{i-1:i-1})}

image.png n-grams具备对未知文本的泛化能力,但是这种能力会随着n的怎大而逐渐减弱,在trigams中,上述例子会出现零概率的情况

在n-grams模型中,n代表了拟合语料库的能力与对未知文本的泛化能力的权衡,n过大时,可能出现大量零概率现象,n过小时,n-grams难以承载足够的语言信息,不足以反映语料库的特性。

n-grams的统计学原理

简要来说,n-grams是在n阶马尔可夫假设下,对语料库中出现的长度为n的词序列出现概率的极大似然估计

基于RNN的语言模型

循环神经网络(Recurrent Neural Network)是一类网络连接中包含环路的神经网络的总称,给定一个序列,RNN的环路用于将历史状态叠加到当前状态上,随着时间维度,历史状态被循环累计,并作为预测未来的依据,因此,RNN可以基于历史规律对未来进行预测。

按照推理过程中信号流转的方向,神经网络的正向传播范式可以分为两大类:前馈传播范式和循环传播范式;采用前馈传播范式的神经网络统称为前馈神经网络(Feed-forward Nerual Network,FNN),采用循环传播范式的神经网络被称为RNN。

image.png 对于FNN,当前的输出只与当前的输入有关,对于RNN,由于其前面的元素会被循环编码成隐状态并叠加到当前的输入上,其在t时刻的输出:ht=g(WHht1+WIxt)h_t = g(W_Hh_{t-1}+W_Ix_t)ot=f(Woht)o_t = f(W_oh_t)

image.png

训练RNN时,涉及大量的矩阵联乘操作,容易引发梯度衰减或梯度爆炸问题。

[WIP]:具体分析

image.png 对于词序列{w1,w2...,wN}\{w_1,w_2...,w_N\},基于RNN的语言模型每次根据当前词wiw_i和循环输入的隐藏状态hi1h_{i-1}预测下一个词wi+1w_{i+1}出现的状态,也就是

Pwi+1w1:i=P(wi+1wi,hi1)P(w_{i+1} | w_{1:i}) = P(w_{i+1} | w_i,h_{i-1})

因此对基于RNN的语言模型有

P(w1:N)=Πi=1N1P(wi+1w1:i)=Πi=1Noi[wi+1]P(w_{1:N}) = \Pi_{i=1}^{N-1}P(w_{i+1}|w_{1:i}) = \Pi_{i=1}^No_i[w_{i+1}]

image.png 假设词表 D = {脖子, 头部, 吃, 长, 疼, 吃, 短},基于 RNN 的语言模型计算“长颈鹿脖子长”的概率的过程如图1.4所示。

P (长颈鹿脖子长) = P (脖子|长颈鹿) · P (长|脖子, h1) = 0.2 × 0.6 = 0.12。

由于语言模型的输出是对序列数据的特征抽取,我们可以对语言模型的输出进行解码,在自回归范式下完成文本生成任务。

自回归范式可以理解为将前一轮的输出作为下一轮的输入拼接。

但是自回归过程存在两个问题

  1. 错误级联放大:选用模型自己生成的词作为输入可能有错误,错误循环输入会不断放大错误,导致模型不能很好的拟合训练集。
  2. 串行计算效率低:由于下一个要预测的词依赖上一次的预测,每次预测之间是串行的,难以并行加速。

为了解决上述问题,teacher forcing在语言模型预训练过程中被广泛应用。

在teacher forcing中,每轮都仅将输出结果与标准答案进行拼接作为下一轮的输入。

基于transform的语言模型

transform是由两种模块组合构建的模块化网络结构,两种模块为

  1. 注意力模块(attention)

    1. 自注意力层(self attention layer)
    2. 残差连接(residual connections)
    3. 层正则化(layer normalization)
  2. 全连接前馈模块

    1. 全连接前馈层
    2. 残差连接
    3. 层正则化

image.png

注意力层(attention layer)

注意力层采用加权平均的思想将前文信息叠加到当前状态上。transformer将输入编码为query,key,value三个部分,也就是将输入{x1,x2...xt}\{x_1,x_2...x_t\}编码为{(q1,k1,v1),(q2,k2,v2)...(qt,kt,vt)}\{(q_1,k_1,v_1),(q_2,k_2,v_2)...(q_t,k_t,v_t)\},其中,query和key用于计算自注意力的权重α\alpha,value是对于输入的编码:

Attention(xt)=i=1tαt,iviAttention(x_t) = \sum_{i=1}^t \alpha_{t,i}v_i\\

αt,i=softmax(sim(xt,xi))=sim(qt,ki)i=1tsim(qt,ki)\alpha_{t,i} = softmax(sim(x_t,x_i)) = \frac{sim(q_t,k_i)}{\sum_{i=1}^tsim(q_t,k_i)}

全连接前馈层(fully-connected feedforward layer)

全连接前馈层掌管着transformer模型的记忆,它包含两层,两层之间有relu作为激活函数,假设全连接前馈层的输入为v,全连接前馈层可以由下式表示

FFN(v)=max(0,W1v+b1)W2+b2FFN(v) = max(0,W_1v+b_1)W_2+b_2

其中,W为第一层和第二层的权重参数,b为第一层和第二层的偏置参数,第一层可以看为神经记忆中的key,第二层可看作value。

[WIP]: 层正则化

[WIP]: 残差连接

语言模型的采样方法

语言模型的输出为一个向量,该向量的每一维代表着词典中对应词的概率,在采用自回归范式的文本生成任务中,语言模型将依次生成一组向量并将其解码为文本。将这组向量解码为文本的过程被称为语言模型解码,解码过程显著影响着生成文本的质量,当前两类主流的解码方法可以被总结为

  1. 概率最大化方法
  2. 随机采样方法

概率最大化方法

设词典为D,输入文本为{w1,w2...,wN}\{w_1,w_2...,w_N\}在i轮自回归中,输出的向量为oi={oi[wd]}Dd=1o_{i} = \{o_i[w_d]\}^{|D|} *{d=1},模型在M轮自回归后生成的文本为{wN+1,wN+2...wN+M}\{w*{N+1},w_{N+2}...w_{N+M}\},生成文档的出现概率如下

P(wN+1:N+M)=Πi=NN+M1P(wi+1w1:i)=Πi=NN+M1oi[wi+1]P(w_{N+1:N+M}) = \Pi_{i=N}^{N+M-1}P(w_{i+1}|w_{1:i}) = \Pi_{i=N}^{N+M-1}o_{i}[w_{i+1}]

基于概率最大化的解码方法旨在最大化P(wN+1:N+M)P(w_{N+1:N+M})以生成出可能性最高的文本。该问题的搜索空间大小为MDM^D,是NP-Hard问题,现有的概率最大化方法通常采用启发式搜索方法。

贪心搜索(greedy search)

贪心搜索是在每轮预测中选择概率最大的词

波束搜索(beam search)

波束搜索在每轮预测中都先保留b个可能性最高的词Bi={wi+11,wi+12...wi+1b}B_i=\{ w_{i+1}^1,w_{i+1}^2...w_{i+1}^b \},结束搜索时,得到M个集合,也就是{Bi=1M}\{B_{i=1}^M \}。找出最优组合使得联合概率最大。

但是概率最大的文本通常是最常见的我呢吧,也就是说,贪心搜搜和波束搜索都让容易生成重复的废话文学。