自然语言处理从入门到应用——动态词向量预训练:双向语言模型

分类目录:《自然语言处理从入门到应用》总目录


对于给定的一段输入文本 w 1 w 2 ⋯ w n w_1w_2\cdots w_n w1w2wn,双向语言模型从前向(从左到右)和后向(从右到左)两个方向同时建立语言模型。这样做的好处在于,对于文本中任一时刻的词 w t w_t wt,可以同时获得其分别基于左侧上下文信息和右侧上下文信息的表示。具体地,模型首先对每个词单独编码。这一过程是上下文无关的,主要利用了词内部的字符序列信息。基于编码后的词表示序列,模型使用两个不同方向的多层长短时记忆网络(LSTM)分别计算每一时刻词的前向、后向隐含层表示,也就是上下文相关的词向量表示。利用该表示,模型预测每一时刻的目标词。对于前向语言模型, t t t时刻的目标词是 w t + 1 w_{t+1} wt+1,对于后向语言模型,目标词是 w t − 1 w_{t-1} wt1

输入表示层

ELMo模型采用基于字符组合的神经网络表示输入文本中的每个词,目的是减小未登录词(Out-Of-Vocabulary,OOV)对模型的影响。下图展示了输入表示层的基本结构。首先,字符向量层将输入层中的每个字符(含额外添加的起止符)转换为向量表示。假设 w t w_t wt由字符序列 c 1 c 2 ⋯ c l c_1c_2\cdots c_l c1c2cl构成,对于其中的每个字符 c i c_i ci,可以表示为: v c i = E char e c i v_{c_i}=E^{\text{char}}e_{c_i} vci=Echareci。其中, E char ∈ R d char × ∣ V char ∣ E^{\text{char}}\in R^{d^{\text{char}}\times |V^{\text{char}}|} EcharRdchar×Vchar表示字符向量矩阵; V char V^{\text{char}} Vchar表示所有字符集合; d char d^{\text{char}} dchar表示字符向量维度; e c i e_{c_i} eci表示字符 c i c_i ci的独热编码。记 w t w_t wt中所有字符向量组成的矩阵为 C t ∈ R d char × l C_t\in R^{d^{\text{char}}\times l} CtRdchar×l,即 C t = [ v c 1 , v c 2 , ⋯   , v c l ] C_t=[v_{c_1}, v_{c_2}, \cdots, v_{c_l}] Ct=[vc1,vc2,,vcl]。接下来,利用卷积神经网络对字符级向量表示序列进行语义组合(Semantic Composition)。这里使用一维卷积神经网络,将字符向量的维度 d char d^{\text{char}} dchar作为输入通道的个数,记为 N in N^{\text{in}} Nin,输出向量的维度作为输出通道的个数,记为 N out N^{\text{out}} Nout。另外,通过使用多个不同大小(宽度)的卷积核,可以利用不同粒度的字符级上下文信息,并得到相应的隐含层向量表示,这些隐含层向量的维度由每个卷积核对应的输出通道个数确定。拼接这些向量,就得到了每一位置的卷积输出。然后,池化操作隐含层所有位置的输出向量,就可以得到对于词 w t w_t wt的定长向量表示,记为 f t f_t ft。假设使用宽度分别为{1,2,3,4,5,6,7}的7个一维卷积核,对应的输出通道数量分别为{32,32,64,128,256,512,1024},那么输出向量 f t f_t ft的维度为2048。基于字符卷积神经网络和Highway神经网络的输入表示层示意图接着,模型使用两层Highway神经网络对卷积神经网络输出作进一步变换,得到最终的词向量表示 x t x_t xt。Highway神经网络在输入与输出之间直接建立“通道”,使得输出层可以直接将梯度回传至输入层,从而避免因网络层数过多而带来的梯度爆炸或弥散的问题。单层Highway神经网络的具体计算方式如下:
x t = g ⊙ f t + ( 1 − g ) ⊙ ReLU ( W f t + b ) x_t=g\odot f_t+(1 - g)\odot\text{ReLU}(Wf_t+b) xt=gft+(1g)ReLU(Wft+b)

式中, g g g为门控向量,其以 f t f_t ft为输入,经线性变换后通过Sigmoid函数计算得到:
g = σ ( W g f t + b g ) g=\sigma(W^gf_t+b^g) g=σ(Wgft+bg)

式中, W g W^g Wg b g b^g bg为门控网络中的线性变换矩阵与偏置向量。可见,Highway神经网络的输出实际上是输入层与隐含层的线性插值结果。当然,通常模型的结构是根据实验调整和确定的,我们也可以自行尝试其他的模型结构。例如,可以使用字符级双向LSTM网络编码单词内字符串序列。接下来,在由上述过程得到的上下文无关词向量的基础之上,利用双向语言模型分别编码前向与后向上下文信息,从而得到每一时刻的动态词向量表示。

前向语言模型

在前向语言模型中,对于任一时刻目标词的预测,都只依赖于该时刻左侧的上下文信息或者历史。这里使用基于多层堆叠的长短时记忆网络语言模型。将模型中多层堆叠LSTM的参数记为 θ → LSTM \overrightarrow{\theta}^\text{LSTM} θ LSTM,Softmax输出层参数记为 θ out \theta^\text{out} θout。则模型可以表示为:
p ( w 1 w 2 ⋯ w n ) = ∏ t = 1 n P ( w t ∣ x 1 : t − 1 ; θ → LSTM ; θ out ) p(w_1w_2\cdots w_n)=\prod_{t=1}^nP(w_t|x_{1:t-1}; \overrightarrow{\theta}^\text{LSTM}; \theta^\text{out}) p(w1w2wn)=t=1nP(wtx1:t1;θ LSTM;θout)

后向语言模型

与前向语言模型相反,后向语言模型只考虑某一时刻右侧的上下文信息。可以表示为:
p ( w 1 w 2 ⋯ w n ) = ∏ t = 1 n P ( w t ∣ x t + 1 : n ; θ ← LSTM ; θ out ) p(w_1w_2\cdots w_n)=\prod_{t=1}^nP(w_t|x_{t+1:n}; \overleftarrow{\theta}^\text{LSTM}; \theta^\text{out}) p(w1w2wn)=t=1nP(wtxt+1:n;θ LSTM;θout)

参考文献:
[1] 车万翔, 崔一鸣, 郭江. 自然语言处理:基于预训练模型的方法[M]. 电子工业出版社, 2021.
[2] 邵浩, 刘一烽. 预训练语言模型[M]. 电子工业出版社, 2021.
[3] 何晗. 自然语言处理入门[M]. 人民邮电出版社, 2019
[4] Sudharsan Ravichandiran. BERT基础教程:Transformer大模型实战[M]. 人民邮电出版社, 2023
[5] 吴茂贵, 王红星. 深入浅出Embedding:原理解析与应用实战[M]. 机械工业出版社, 2021.

猜你喜欢

转载自blog.csdn.net/hy592070616/article/details/131261194