NLP领域通常用语言模型来做预训练,得到单词的Embedding向量,用于其他NLP下游任务的输入。
什么是语言模型?就是某种语言中,一个句子 S S S出现的概率:
P ( S ) P(S) P(S)
自然语言的基本构成元素是词,那么语句 S S S的概率可以表示为:
P ( S ) = P ( w 1 , w 2 , . . . , w n ) P(S)=P(w_1,w_2,...,w_n) P(S)=P(w1,w2,...,wn)
= P ( w 1 ) P ( w 2 ∣ w 1 ) . . . P ( w n ∣ w 1 , w 2 , . . . , w n − 1 ) =P(w_1)P(w_2|w_1)...P(w_n|w_1,w_2,...,w_{n-1}) =P(w1)P(w2∣w1)...P(wn∣w1,w2,...,wn−1)
采用对数形式,则转化为:
L = L o g P ( S ) = ∑ i = 1 n l o g P ( w i ∣ w 1 , . . w i − 1 ) L=LogP(S)=\sum_{i=1}^nlogP(w_i|w_1,..w_{i-1}) L=LogP(S)=i=1∑nlogP(wi∣w1,..wi−1)
论文《A Neural Probabilistic Language Model》中提出了用神经网络建模语言模型的方法,模型结构如下:
P ( w i ∣ w 1 , . . . , w i − 1 ) ≈ P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) P(w_i|w_1,...,w_{i-1})\approx P(w_i|w_{i-n+1},...,w_{i-1}) P(wi∣w1,...,wi−1)≈P(wi∣wi−n+1,...,wi−1)
P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) = s o f m a x ( y ) P(w_i|w_{i-n+1},...,w_{i-1})=sofmax(y) P(wi∣wi−n+1,...,wi−1)=sofmax(y)
y = b + W x + U t a n h ( d + H x ) y=b+Wx+Utanh(d+Hx) y=b+Wx+Utanh(d+Hx)
x = ( C ( w i − 1 ) , . . . C ( w i − n + 1 ) ) x=(C(w_{i-1}),...C(w_{i-n+1})) x=(C(wi−1),...C(wi−n+1))
NAACL2018最佳论文《Deep contextualized word representations》则采用双向语言模型做预训练,同时采用了一种RNN的网络结构LSTM。LSTM网络结果在前面的文章里有单独分析过,这里不再展开。
双向语言模型就是采用前置词预测当前词与后置词预测当前词结合的方式训练模型,最大化两个方向的似然函数之和:
∑ k = 1 N ( l o g p ( w k ∣ w 1 , . . . , w k − 1 ; Θ x , Θ → L S T M , Θ s ) + l o g p ( w k ∣ w k + 1 , . . . , w N ; Θ x , Θ ← L S T M , Θ s ) ) \sum_{k=1}^N(logp(w_k|w_1,...,w_{k-1};\Theta_x,\overrightarrow{\Theta}_{LSTM},\Theta_s)+logp(w_k|w_{k+1},...,w_N;\Theta_x,\overleftarrow{\Theta}_{LSTM},\Theta_s)) k=1∑N(logp(wk∣w1,...,wk−1;Θx,Θ LSTM,Θs)+logp(wk∣wk+1,...,wN;Θx,Θ LSTM,Θs))
其中 Θ x \Theta_x Θx表示embedding层参数, Θ s \Theta_s Θs表述Softmax输出层参数, Θ → L S T M , Θ ← L S T M \overrightarrow{\Theta}_{LSTM},\overleftarrow{\Theta}_{LSTM} Θ LSTM,Θ LSTM表示双向LSTM网络的参数。
论文《Improving Language Understanding by Generative Pre-Training》则回到单向语言模型,并将LSTM替换为Transformer。Transformer也在前面的文章里分析过,不再展开。
论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》则在GPT的基础上,又回到了双向语言模型。