1. 概述
随着深度学习在NLP领域的发展,产生很多深度网络模型用于求解各类的NLP问题,在这众多的网络模型中,无疑都会使用到词向量的概念,这就不得不提及word2vec[1]词向量生成工具。从word2vec词向量工具的提出后,预训练的词向量成了众多NLP深度模型中的重要组成部分。然而传统的word2vec生成的词向量都是上下文无关的,其生成的词向量式固定,不会随着上下文的改变而改变,这种固定的词向量无法解决一词多义的问题。比如“bank”这个词,既可以表示“河岸”,也可以表示“银行”。Embeddings from Language Models(ELMo)[2]是2018年提出的一种基于上下文的预训练模型,研究人员认为一个好的预训练语言模型应该能够包含丰富的句法和语义信息, 并且能够对多义词进行建模。
ELMo的本质思想通过大量语料学习到每个词的一般性embedding形式,此时是与上下文无关的;当在具体的NLP任务中时,此时每个词都具有了上下文的含义,通过上下文调整学习好的词向量。
2. 算法原理
2.1. ELMo的基本原理
在ELMo的本质思想中包含了两阶段的过程,第一个阶段利用大量预料训练出与上下文无关的词向量的表达,如上述的“bank”,此时并不能知道代表的是“银行”还是“河岸”;第二阶段是在具体的下游任务中,将每个词向量放入到具体的上下文的语言环境中,对每个词向量微调,以适应具体的任务,如根据具体的上下文语境,微调得到“bank”一词的与上下文相关的向量。
2.2. 第一阶段——ELMo预训练
2.2.1. ELMo模型的结构
对于ELMo模型的网络结构如下图所示:
在ELMo的结构图中可以看到,ELMo主要分为三个部分,第一,最下方的黄色部分,词的Embedding部分,用于将离散的词映射成稠密的连续向量;第二,中间的蓝色部分,这部分是两个双层的LSTM模块,用于对词进行序列学习;第三,最上方的绿色部分,词向量的最终表征。从论文[2]中可知,这三个部分的输出代表了三个层级的含义,分别是:
第一部分代表了词法特征
第二部分代表了句法特征
第三部分代表了语义特征
其中,在ELMo的网络结构中,用于语言模型学习的是双层的双向LSTM。
2.2.2. ELMo模型的训练
ELMo模型的预训练是在大量预料上,通过无监督的方式,其目标函数是神经语言模型[3]。假设给定的N N N 个词的序列为( t 1 , t 2 , ⋯ , t N ) \left ( t_1,t_2,\cdots ,t_N \right ) ( t 1 , t 2 , ⋯ , t N ) ,先看正向的语言模型,其目标通过给定的前k − 1 k-1 k − 1 个词的序列( t 1 , t 2 , ⋯ , t k − 1 ) \left ( t_1,t_2,\cdots ,t_{k-1} \right ) ( t 1 , t 2 , ⋯ , t k − 1 ) 预测第k k k 个词t k t_k t k 的概率:
p ( t 1 , t 2 , ⋯ , t N ) = ∏ k = 1 N p ( t k ∣ t 1 , t 2 , ⋯ , t k − 1 ) p\left ( t_1,t_2,\cdots ,t_N \right )=\prod_{k=1}^{N}p\left ( t_k\mid t_1,t_2,\cdots ,t_{k-1} \right ) p ( t 1 , t 2 , ⋯ , t N ) = k = 1 ∏ N p ( t k ∣ t 1 , t 2 , ⋯ , t k − 1 )
再看反向的语言模型,其目标是通过第k k k 个词t k t_k t k 后面的词的序列( t k ∣ t k + 1 , t k + 2 , ⋯ , t N ) \left ( t_k\mid t_{k+1},t_{k+2},\cdots ,t_{N} \right ) ( t k ∣ t k + 1 , t k + 2 , ⋯ , t N ) 来预测t k t_k t k 的概率:
p ( t 1 , t 2 , ⋯ , t N ) = ∏ k = 1 N p ( t k ∣ t k + 1 , t k + 2 , ⋯ , t N ) p\left ( t_1,t_2,\cdots ,t_N \right )=\prod_{k=1}^{N}p\left ( t_k\mid t_{k+1},t_{k+2},\cdots ,t_{N} \right ) p ( t 1 , t 2 , ⋯ , t N ) = k = 1 ∏ N p ( t k ∣ t k + 1 , t k + 2 , ⋯ , t N )
对于双向的LSTM模型,通过语言模型得到双向LSTM的目标函数为:
∑ k = 1 N ( l o g p ( t k ∣ t 1 , ⋯ , t k − 1 ; Θ x , Θ → L S T M , Θ s ) + l o g p ( t k ∣ t k + 1 , ⋯ , t N ; Θ x , Θ ← L S T M , Θ s ) ) \sum_{k=1}^{N}\left ( log\; p\left ( t_k\mid t_1,\cdots ,t_k-1;\Theta _x,\overrightarrow{\Theta }_{LSTM},\Theta _s \right )+log\; p\left ( t_k\mid t_{k+1},\cdots ,t_N;\Theta _x,\overleftarrow{\Theta }_{LSTM},\Theta _s \right ) \right ) k = 1 ∑ N ( l o g p ( t k ∣ t 1 , ⋯ , t k − 1 ; Θ x , Θ L STM , Θ s ) + l o g p ( t k ∣ t k + 1 , ⋯ , t N ; Θ x , Θ L STM , Θ s ) )
此时需要求解上述目标函数的最大值,其中Θ x \Theta _x Θ x 表示的是词的上下文无关向量,Θ → L S T M \overrightarrow{\Theta }_{LSTM} Θ L STM 和Θ ← L S T M \overleftarrow{\Theta }_{LSTM} Θ L STM 分别为正向和反向的LSTM模型的参数,Θ s \Theta _s Θ s 为softmax层的参数。
通过上述模型的训练,最终得到了多个向量,可以表示为:
R k = { x k L M , h → k , j L M , h ← k , j L M ∣ j = 1 , ⋯ , L } = { h k , j L M ∣ j = 1 , ⋯ , L } R_k=\left \{ \mathbf{x}_k^{LM},\overrightarrow{\mathbf{h}}_{k,j}^{LM},\overleftarrow{\mathbf{h}}_{k,j}^{LM}\mid j=1,\cdots ,L \right \}=\left \{ \mathbf{h}_{k,j}^{LM}\mid j=1,\cdots ,L \right \} R k = { x k L M , h k , j L M , h k , j L M ∣ j = 1 , ⋯ , L } = { h k , j L M ∣ j = 1 , ⋯ , L }
其中,h k , 0 L M \mathbf{h}_{k,0}^{LM} h k , 0 L M 表示的是上图中的黄色部分,表示的是与上下文无关的词的向量,h k , j L M = [ h → k , j L M ; h ← k , j L M ] \mathbf{h}_{k,j}^{LM}=\left [ \overrightarrow{\mathbf{h}}_{k,j}^{LM};\overleftarrow{\mathbf{h}}_{k,j}^{LM} \right ] h k , j L M = [ h k , j L M ; h k , j L M ] 表示的是每一层的LSTM的输出。通过将这多个向量合并成一个向量便得到最终的向量表示:
E L M o k = E ( R k ; Θ e ) \mathbf{ELMo}_k=E\left ( R_k;\mathbf{\Theta }_e \right ) ELMo k = E ( R k ; Θ e )
2.3. 第二阶段——具体任务微调
通过ELMo的预训练得到了上述一系列的向量E L M o k \mathbf{ELMo}_k ELMo k ,根据下游的不同任务,选择不同的向量,其目的是将生成的向量带入到上下文中,对向量做微调。对于不同的任务,需要选择的向量不同,如在参考文献[2]中提及只使用最顶层的输出,即E ( R k ) = h k , j L M E\left ( R_k \right )=\mathbf{h}_{k,j}^{LM} E ( R k ) = h k , j L M 。更为一般的,可以由下式表示:
E L M o k t a s k = E ( R k ; Θ t a s k ) = γ t a s k ∑ j = 0 L s j t a s k h k , j L M \mathbf{ELMo}_k^{task}=E\left ( R_k;\Theta ^{task} \right )=\gamma ^{task}\sum_{j=0}^{L}s_j^{task}\mathbf{h}_{k,j}^{LM} ELMo k t a s k = E ( R k ; Θ t a s k ) = γ t a s k j = 0 ∑ L s j t a s k h k , j L M
其中,向量s t a s k \mathbf{s}^{task} s t a s k 用于对向量归一化,γ t a s k \gamma ^{task} γ t a s k 用于对具体任务中的向量缩放。
3. 总结
ELMo通过大量语料训练出与上下文无关的一系列向量表示,不同层级的向量带有不同的语言,包括了词法信息,句法信息以及语义信息,通过不同的组合,并在具体的上下文环境中微调得到带有上下文的词向量表示,并能够应用到具体的下游任务中。
参考文献
[1] Mikolov T , Chen K , Corrado G , et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.
[2] Peters M , Neumann M , Iyyer M , et al. Deep Contextualized Word Representations[J]. 2018.
[3] Y Bengio∗, Ducharme R , Vincent P . A Neural Probabilistic Language Model. 2001.