系統學習NLP(二十八)--GPT

論文:Improving Language Understandingby Generative Pre-Training

 

1. 前言

本文對2018年OpenAi提出的論文《Improving Language Understandingby Generative Pre-Training》做一個解析。

一個對文本有效的抽象方法可以減輕NLP對監督學習的依賴。大多數深度學習方法大量的人工標註信息,這限制了在很多領域的應用。在這些情況下,可以利用來未標記數據的語言信息的模型來產生更多的註釋,這可能既耗時又昂貴。此外,即使在可獲得相當大的監督的情況下,以無人監督的方式學習良好的表示也可以提供顯着的性能提升。到目前爲止,最引人注目的證據是廣泛使用預訓練詞嵌入來提高一系列NLP任務的性能。

2. OpenAI GPT原理

本文提出一種半監督的方式來處理語言理解的任務。使用非監督的預訓練和監督方式的微調。我們的目標是學習一個通用的語言標示,可以經過很小的調整就應用在各種任務中。這個模型的設置不需要目標任務和非標註的數據集在同一個領域。模型有兩個過程。

  1. 使用語言模型學習一個深度模型
  2. 隨後,使用相應的監督目標將這些參數調整到目標任務

3. OpenAI GPT模型結構

3.1 非監督預訓練

處理非監督文本(𝑥1,𝑥2,...,𝑥𝑚)的普通方法是用語言模型去最大化語言模型的極大似然。

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)

3.2 監督微調fine-tuning

這個階段要對前一個階段模型的參數,根據監督任務進行調整。我們假設有標籤數據集𝐶,裏面的結構是(𝑥1,𝑥2,...,𝑥𝑚,𝑦)。輸入(𝑥1,𝑥2,...,𝑥𝑚)經過我們預訓練的模型獲得輸出向量ℎ𝑚𝑙,然後經過線性層和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)}

模型結構如下:

 

3.3 特殊任務的輸入變換

對於有些任務,像文本分類,我們能夠直接用上文的模型進行微調。另外的任務,問答系統,需要構造輸入的句子對,或者三個文檔。由於我們的預訓練模型需要連續的文本序列,我們需要改變這種多句文本的輸入。

  • 文本含義:用$鏈接前後兩個文本
  • 相似度:對於相似度的問題,由於沒有文本內部的先後順序。我們可以有兩個輸入𝑇𝑒𝑥𝑡1$𝑇𝑒𝑥𝑡2和𝑇𝑒𝑥𝑡2$𝑇𝑒𝑥𝑡1,輸出的表示向量在加起來。
  • 問答系統:有𝐶𝑜𝑛𝑡𝑒𝑥𝑡和𝐴𝑛𝑠𝑤𝑒𝑟1,...,𝐴𝑛𝑠𝑤𝑒𝑟𝑁,我們可以組合成𝑁個𝐶𝑜𝑛𝑡𝑒𝑥𝑡$𝐴𝑛𝑠𝑤𝑒𝑟𝑖輸入,獲得N個輸出,在通過linear後softmax出概率分佈。

4. 總結

論文中介紹了一通過預訓練學習和有針對性的微調的個強有力的框架。通過預訓練是不同的長文本連續的數據集,模型能夠有能力去處理長而廣的依賴關係,這個是解決問答系統、語義相似度、文本分類中的關鍵點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章