NLP學習-Task 4: Contextual Word Embeddings

NLP學習

更新流程↓
Task 1: 簡介和詞向量Word Vectors
Task 2: 詞向量和詞義Word Senses
Task 3: 子詞模型Subword Models
Task 4: Contextual Word Embeddings
Task 5: 大作業
日本人綜藝感從昭和時代開始就這麼強了嗎?
今日份的舒適
常見餐桌禮儀


Contextual Word Embeddings




1. ELMo

  Allen實驗室認爲好的詞表徵應該同時兼顧兩個問題:一是單詞在語義和語法上的複雜特點;二是隨着語言環境的改變,這些用法也應該隨之變化
  爲此,Allen實驗室提出了deep contextualized word representation(深度情景化詞表徵)。這種算法的特點是每個詞的表徵都是整個輸入語句的函數。

具體做法:

  1. 現在大語料上以 language model爲目標訓練處 Bi-LSTM模型,利用它產生詞語的表徵 (pre-trained biLM模型)。ELMo因此得名embedding from language model。
  2. 爲了應用在下游NLP任務中,一般先利用下游任務的語料庫(此時,忽略掉label)進行 language model的微調(fine tuning),這種微調相當於一種domain transfer
  3. 然後纔是利用label的信息進行supervised learning

  ELMo表徵是“深”的,就是說它們是biLM的所有層的內部表徵的函數。這樣做的好處是能夠產生豐富的詞語表徵。高層的LSTM的狀態可以捕捉詞語意義中和語境相關的那方面的特徵(比如可以用來做語義的消歧),而低層的LSTM可以找到語法方面的特徵(比如可以做詞性標註)。如果把它們結合在一起,在下游的NLP任務中會體現優勢。

在這裏插入圖片描述



 1.1. Bidirectional language models

  ELMo顧名思義是從Language Models得來的embeddings,確切的說是來自於Bidirectional language models。具體可以表示爲:
p(t1,t2,...,tN)=k=1Np(tkt1,t2,...,tk1)p(t1,t2,...,tN)=k=1Np(tktk+1,tk+2,...,tN)p(t_1,t_2,...,t_N)=\prod_{k=1}^{N}p(t_k|t_1,t_2,...,t_{k-1})和p(t_1,t_2,...,t_N)=\prod_{k=1}^{N}p(t_k|t_{k+1},t_{k+2},...,t_N)

  這裏(t1,t2,...,tN)(t_1,t_2,...,t_N)的是一系列的tokens,作爲語言模型可能有不同的表達方法,最經典的方法是利用多層的LSTM,ELMo的語言模型也採取了這種方式。所以這個Bidirectional LM由stacked bidirectional LSTM來表示。

  假設輸入是tokentoken的表示xkLMx_k^{LM}。在每一個位置kk,每一層LSTM上都輸出相應的context-dependent的表徵hk,jLM\vec{h}_{k,j}^{LM}j=1,2,...,Lj=1,2,...,Ljj代表LSTM的某層layer。例如頂層的LSTM的輸出可以表示爲:hk,jLM\vec{h}_{k,j}^{LM},通過Softmax層來預測下一個token tk+1t_{k+1}
  最開始兩個概率的對數極大似然估計Loglikehood表達如下:
Loglikehood=k=1N(logp(tkt1,...,tk1;Θx,ΘLSTM,Θs)+logp(tktk+1,...,tN;Θx,ΘLSTM,Θs))Loglikehood=\sum_{k=1}^{N}(log\, p(t_k|t_1,...,t_{k-1};\Theta_x,\vec{\Theta}_{LSTM},\Theta_s)+log\,p(t_k|t_{k+1},...,t_N;\Theta_x,\overleftarrow{\Theta}_{LSTM},\Theta_s))
  這裏的ΘxΘ_x代表token embedding, ΘsΘ_s代表softmax layer的參數。



 1.2. ELMo

  對於每一個token,一個LL層的biLM要計算出共2L+12L+1個表徵:
Rk={xkLM,hk,jLM,hk,jLMj=1,...,Lhk,jLMj=0,...,LR_k=\left\{\begin{matrix} x_k^{LM},\vec{h}_{k,j}^{LM},\overleftarrow{h}_{k,j}^{LM}&j=1,...,L\\ \\ h_{k,j}^{LM}&j=0,...,L \end{matrix}\right.  這裏hk,jLMh_{k,j}^{LM}是簡寫,當j=0j=0時,代表token層。j>0j>0時,同時包括兩個方向的hiddenhidden表徵。
  在下游的任務中, ELMo把所有層的R壓縮在一起形成一個單獨的vector。(在最簡單的情況下,可以只保留最後一層的hk,jLMh_{k,j}^{LM}。) ELMoktask=E(Rk;Θtask)=γtaskj=0Lsjtaskhk,jLM      (1)ELMo_k^{task}=E(R_k;Θ^{task})=\gamma^{task}\sum_{j=0}^{L}s_j^{task}h_{k,j}^{LM}\; \; \; (1)

  具體來講如何使用ElMo產生的表徵呢?對於一個supervised NLP任務,可以分以下三步:

  1. 產生pre-trained biLM模型。模型由兩層bi-LSTM組成,之間用residual connection連接起來。
  2. 在任務語料上(注意是語料,忽略label)fine tuning上一步得到的biLM模型。可以把這一步看爲biLM的domain transfer。
  3. 利用ELMo的word embedding來對任務進行訓練。通常的做法是把它們作爲輸入加到已有的模型中,一般能夠明顯的提高原模型的表現。



2.GPT

  GPT的核心思想是先通過無標籤的文本去訓練生成語言模型,再根據具體的NLP任務(如文本蘊涵、QA、文本分類等),來通過有標籤的數據對模型進行fine-tuning
在這裏插入圖片描述

  具體來說,在這篇論文中提出了半監督的方法,即結合了無監督的預訓練和有監督的fine-tuning。論文采用兩階段訓練。首先,在未標記數據集上訓練語言模型來學習神經網絡模型的初始參數。隨後,使用相應NLP任務中的有標籤的數據地將這些參數微調,來適應當前任務。

  模型的結構是使用了多層的單向Transformer結構(《Attention is All you need》提出)。下圖是GPT語言模型的結構:
在這裏插入圖片描述


 2.1. 無監督的預訓練

  對於無標籤的文本U={u1,u2,...,un}U=\{u_1,u_2,...,u_n\},最大化語言模型的極大似然函數:L1(u)=log  P(uiuik,...,ui1;Θ)L_1(u)=\sum log \;P(u_i|u_{i-k},...,u_{i-1};\Theta)  這裏的kk是文本上下文窗口的大小。
  論文中使用的是多層Transformer的decoder的語言模型,input爲詞嵌入以及單詞token的位置信息;再對transformer_block的輸出向量做softmax,output爲詞的概念分佈。具體公式如下:
h0=UWe+WpHl=transformer_block(hl1)i[i,n]P(u)=softmax(hnWeT)\begin{matrix}h_0=UW_e+W_p\\H_l=transformer\_block(h_{l-1})\forall i\in[i,n]\\ P(u)=softmax(h_nW_e^T)\end{matrix}  這裏U={uik,...,ui1}U=\{u_{i-k},...,u_{i-1}\}表示uiu_i的上下文,WeW_e是詞向量矩陣,WpW_p是位置向量矩陣。



 2.2. 有監督的fine-tuning

  在對模型預訓練之後,採用有監督的目標任務對模型參數微調。假設一個有標籤的數據集,假設每一條數據爲一個單詞序列x1,...,xmx_{1}, . . . , x_{m}以及相應的標籤yy,通過之前預訓練的模型獲得輸出向量hlmh_{l}^{m},再送入線性輸出層,來預測標籤yy
P(yx1,...,xm)=softmax(hlmWy)P(y|x^1,...,x^m)=softmax(h_l^mW_y)  Loss函數爲:L2(C)=x,ylog  P(yx1,...,xm)L_2(C)=\sum_{x,y} log\;P(y|x^1,...,x^m)  最後,將兩階段的目標函數通過超參λ\lambda相加訓練整個模型:L3(C)=L2(C)+λL1(C)L_3(C)=L_2(C)+\lambda L_1(C)



 2.3. 具體任務的模型微調

  對於文本分類,只需要在預訓練模型上微調。對於QA任務或者文本蘊含,因爲預訓練模型是在連續序列上訓練,需要做一些調整,修改輸入結構,將輸入轉化爲有序序列輸入

  1. 文本蘊含 :將前提pp和假設hh序列拼接,中間用($)符號來分隔兩個序列。

  2. 文本相似度:分別將兩個序列輸入,通過模型輸出兩個序列的特徵向量,再逐元素相加輸入線性層。

  3. 問答和常識推理:給定上下文文本zz,問題qq,一組可能的候選答案 {ak}\{a_k\},將上下文文本、問題以及每個候選答案拼接起來,得到這樣一個序列[z;q;[z;q; $ ;ak];a_k],再將該序列輸入預訓練模型,經softmax層得到候選答案的概率分佈。




3. BERT

  Bert(原文)是谷歌的大動作,公司AI團隊新發布的BERT模型,在機器閱讀理解頂級水平測試SQuAD1.1中表現出驚人的成績:全部兩個衡量指標上全面超越人類,並且還在11種不同NLP測試中創出最佳成績,包括將GLUE基準推至80.4%(絕對改進7.6%),MultiNLI準確度達到86.7% (絕對改進率5.6%)等。可以預見的是,BERT將爲NLP帶來里程碑式的改變,也是NLP領域近期最重要的進展。

  BERT的全稱是Bidirectional Encoder Representation from Transformers,即雙向Transformer的Encoder。模型的主要創新點都在pre-train方法上,即用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的representation。

  BERT採用了Transformer Encoder的模型來作爲語言模型,Transformer模型來自於經典論文《Attention is all you need》, 完全拋棄了RNN/CNN等結構,而完全採用Attention機制來進行input-output之間關係的計算,如下圖中左半邊部分所示:
在這裏插入圖片描述

  Bert模型結構如下:
在這裏插入圖片描述

  BERT模型與OpenAI GPT的區別就在於採用了Transformer Encoder,也就是每個時刻的Attention計算都能夠得到全部時刻的輸入,而OpenAI GPT採用了Transformer Decoder,每個時刻的Attention計算只能依賴於該時刻前的所有時刻的輸入,因爲OpenAI GPT是採用了單向語言模型。




4. 參考資料

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