本文對2018年OpenAi提出的論文《Improving Language Understanding
by Generative Pre-Training》作一個解析。html
一個對文本有效的抽象方法能夠減輕NLP對監督學習的依賴。大多數深度學習方法大量的人工標註信息,這限制了在不少領域的應用。在這些狀況下,能夠利用來未標記數據的語言信息的模型來產生更多的註釋,這可能既耗時又昂貴。此外,即便在可得到至關大的監督的狀況下,以無人監督的方式學習良好的表示也能夠提供顯着的性能提高。到目前爲止,最引人注目的證據是普遍使用預訓練詞嵌入來提升一系列NLP任務的性能。算法
本文提出一種半監督的方式來處理語言理解的任務。使用非監督的預訓練和監督方式的微調。咱們的目標是學習一個通用的語言標示,能夠通過很小的調整就應用在各類任務中。這個模型的設置不須要目標任務和非標註的數據集在同一個領域。模型有兩個過程。網絡
處理非監督文本\((x_1,x_2,...,x_m)\)的普通方法是用語言模型去最大化語言模型的極大似然。框架
\[ L_1(X)=\sum_ilogP(x_i|x_{i-k},...,x_{i-1}:\theta) \]函數
文章中使用的是多層Transformer的decoder的語言模型。這個多層的結構應用multi-headed self-attention在處理輸入的文本加上位置信息的前饋網絡,輸出是詞的概念分佈。
\[ h_0=UW_e+W_p \]
\[ h_l=transformer\_block(h_{l-1}) \]
\[ P(u)=softmax(h_nW^T_e) \]性能
這個階段要對前一個階段模型的參數,根據監督任務進行調整。咱們假設有標籤數據集\(C\),裏面的結構是\((x_1,x_2,...,x_m,y)\)。輸入\((x_1,x_2,...,x_m)\)通過咱們預訓練的模型得到輸出向量\(h_l^m\),而後通過線性層和softmax來預測標籤。
\[ P(y|x_1,x_2,...,x_m)=softmax(h_l^m{W_y}) \]
\[ L_2(C)=\sum_{x,y}logP(y|x_1,...,x_m) \]學習
咱們增長了語言模型去輔助微調,提升了監督模型的結果。最後的損失函數能夠標示爲
\[ L_3(C)=L_2(C)+\lambda{L_1(C)} \]spa
模型結構以下:3d
對於有些任務,像文本分類,咱們可以直接用上文的模型進行微調。另外的任務,問答系統,須要構造輸入的句子對,或者三個文檔。因爲咱們的預訓練模型須要連續的文本序列,咱們須要改變這種多句文本的輸入。code
論文中介紹了一經過預訓練學習和有針對性的微調的個強有力的框架。經過預訓練是不一樣的長文本連續的數據集,模型可以有能力去處理長而廣的依賴關係,這個是解決問答系統、語義類似度、文本分類中的關鍵點。