天天看點

詳解nlp預訓練詞向量(上)——從word2vec到ELMO

長話短說

  • Bert具備廣泛的通用性,就是說絕大部分NLP任務都可以采用類似的兩階段模式直接去提升效果。客觀的說,把Bert當做最近兩年NLP重大進展的集大成者更符合事實。
  • 串起來這個故事的脈絡就是自然語言的預訓練過程,但是落腳點還是在Bert身上。要講自然語言的預訓練,得先從圖像領域的預訓練說起。

圖像領域的預訓練

  • 預訓練在圖像領域的應用
    • 1.訓練資料小,不足以訓練複雜網絡
    • 2.加快訓練速度
    • 3.參數初始化,先找到好的初始點,有利于優化
    • 把A任務和B認為的的網絡參數先儲存下來,當遇到C任務時,兩種做法:
      • “Frozen”:一種是淺層加載的參數在訓練C任務過程中不動
      • “Fine-Tuning”:底層網絡參數盡管被初始化了,在C任務訓練過程中仍然随着訓練的程序不斷改變
  • 對于層級的CNN結構來說,不同層級的神經元學習到了不同類型的圖像特征,由底向上特征形成層級結構;越往上層越和任務有關正因為此,是以預訓練好的網絡參數,尤其是底層的網絡參數抽取出特征跟具體任務越無關,越具備任務的通用性,是以這是為何一般用底層預訓練好的參數初始化新任務網絡參數的原因。
    詳解nlp預訓練詞向量(上)——從word2vec到ELMO
  • 一般我們喜歡用ImageNet來做網絡的預訓練,主要有兩點:
    • 1.一方面ImageNet是圖像領域裡有超多事先标注好訓練資料的資料集合,分量足是個很大的優勢
    • 2.另外一方面因為ImageNet有1000類,類别多,算是通用的圖像資料,跟領域沒太大關系,通用性好
  • 在說Word Embedding之前,先更粗略地說下語言模型,因為一般NLP裡面做預訓練一般的選擇是用語言模型任務來做。
    詳解nlp預訓練詞向量(上)——從word2vec到ELMO
  • 什麼是語言模型?為了能夠量化地衡量哪個句子更像一句人話,可以設計如上圖所示函數,核心函數P的思想是根據句子裡面前面的一系列前導單詞預測後面跟哪個單詞的機率大小(理論上除了上文之外,也可以引入單詞的下文聯合起來預測單詞出現機率)。句子裡面每個單詞都有個根據上文預測自己的過程,把所有這些單詞的産生機率乘起來,數值越大代表這越像一句人話。
  • 它生于2003,火于2013;學習任務是輸入某個句中單詞  前面句子的t-1個單詞,要求網絡正确預測單詞Bert,即最大化:
    詳解nlp預訓練詞向量(上)——從word2vec到ELMO
    詳解nlp預訓練詞向量(上)——從word2vec到ELMO
  • 前面任意單詞  用Onehot編碼(比如:0001000)作為原始單詞輸入,之後乘以矩陣Q後獲得向量  ,每個單詞的  拼接,上接隐層,然後接softmax去預測後面應該後續接哪個單詞。這個  是什麼?這其實就是單詞對應的Word Embedding值,那個矩陣Q包含V行,V代表詞典大小,每一行内容代表對應單詞的Word embedding值。隻不過Q的内容也是網絡參數,需要學習獲得,訓練剛開始用随機值初始化矩陣Q,當這個網絡訓練好之後,矩陣Q的内容被正确指派,每一行代表一個單詞對應的Word embedding值。是以你看,通過這個網絡學習語言模型任務,這個網絡不僅自己能夠根據上文預測後接單詞是什麼,同時獲得一個副産品,就是那個矩陣Q,這就是單詞的Word Embedding是被如何學會的
  • 2013年最火的用語言模型做Word Embedding的工具是Word2Vec,後來又出了Glove;Word2Vec是怎麼工作的呢?看下圖。
    詳解nlp預訓練詞向量(上)——從word2vec到ELMO
  • Word2Vec有兩種訓練方法

    • 一種叫CBOW,核心思想是從一個句子裡面把一個詞摳掉,用這個詞的上文和下文去預測被摳掉的這個詞;
    • 第二種叫做Skip-gram,和CBOW正好反過來,輸入某個單詞,要求網絡預測它的上下文單詞。
    • 使用Word2Vec或者Glove,通過做語言模型任務,就可以獲得每個單詞的Word Embedding
    • 效果很不錯呦,一個單詞表達成Word Embedding後,很容易找出語義相近的其它詞彙。
      詳解nlp預訓練詞向量(上)——從word2vec到ELMO
  • eg:使用word2vec,完成QA任務

    • 假設如上圖所示,我們有個NLP的下遊任務,比如QA,就是問答問題,所謂問答問題,指的是給定一個問題X,給定另外一個句子Y,要判斷句子Y是否是問題X的正确答案。
      詳解nlp預訓練詞向量(上)——從word2vec到ELMO
    • 這乍看上去好像是個查表操作,不像是預訓練的做法是吧?其實不然,那個Word Embedding矩陣Q其實就是網絡Onehot層到embedding層映射的網絡參數矩陣。是以你看到了,使用Word Embedding等價于什麼?等價于把Onehot層到embedding層的網絡用預訓練好的參數矩陣Q初始化了
    • 下遊NLP任務在使用Word Embedding的時候也類似圖像有兩種做法,一種是Frozen,就是Word Embedding那層網絡參數固定不動;另外一種是Fine-Tuning,就是Word Embedding這層參數使用新的訓練集合訓練也需要跟着訓練過程更新掉。
    • 上面這種做法就是18年之前NLP領域裡面采用預訓練的典型做法

從Word Embedding到ELMO(Embedding from Language Models)

  • ELMO提供了一種簡潔優雅的解決方案。
  • 這片在Word Embedding頭上籠罩了好幾年的烏雲是什麼?是多義詞問題。我們知道,多義詞是自然語言中經常出現的現象,也是語言靈活性和高效性的一種展現。多義詞對Word Embedding來說有什麼負面影響?如上圖所示,比如多義詞Bank,有兩個常用含義,但是Word Embedding在對bank這個單詞進行編碼的時候,是區分不開這兩個含義的,因為它們盡管上下文環境中出現的單詞不同,但是在用語言模型訓練的時候,不論什麼上下文的句子經過word2vec,都是預測相同的單詞bank,而同一個單詞占的是同一行的參數空間,這導緻兩種不同的上下文資訊都會編碼到相同的word embedding空間裡去。是以word embedding無法區分多義詞的不同語義,這就是它的一個比較嚴重的問題。
    詳解nlp預訓練詞向量(上)——從word2vec到ELMO
  • 在此之前的Word Embedding本質上是個靜态的方式,所謂靜态指的是訓練好之後每個單詞的表達就固定住了,以後使用的時候,不論新句子上下文單詞是什麼,這個單詞的Word Embedding不會跟着上下文場景的變化而改變
  • 這是為何說它是靜态的,這也是問題所在。ELMO的本質思想是:我事先用語言模型學好一個單詞的Word Embedding,此時多義詞無法區分,不過這沒關系。在我實際使用Word Embedding的時候,單詞已經具備了特定的上下文了,這個時候我可以根據上下文單詞的語義去調整單詞的Word Embedding表示,這樣經過調整後的Word Embedding更能表達在這個上下文中的具體含義,自然也就解決了多義詞的問題了。
  • 是以ELMO本身是個根據目前上下文對Word Embedding動态調整的思路。
    詳解nlp預訓練詞向量(上)——從word2vec到ELMO
  • 原理;

    • ELMO采用了典型的兩階段過程,第一個階段是利用語言模型進行預訓練;第二個階段是在做下遊任務時,從預訓練網絡中提取對應單詞的網絡各層的Word Embedding作為新特征補充到下遊任務中。
    • ELMO的第一階段:預訓練階段。
      • 下圖展示的是其預訓練過程,它的網絡結構采用了雙層雙向LSTM,目前語言模型訓練的任務目标是根據單詞  的上下文去正确預測單詞  ,  之前的單詞序列Context-before稱為上文,之後的單詞序列Context-after稱為下文。圖中左端的前向雙層LSTM代表正方向編碼器,輸入的是從左到右順序的除了預測單詞外  的上文Context-before;右端的逆向雙層LSTM代表反方向編碼器,輸入的是從右到左的逆序的句子下文Context-after;每個編碼器的深度都是兩層LSTM疊加。這個網絡結構其實在NLP中是很常用的。
        詳解nlp預訓練詞向量(上)——從word2vec到ELMO
      • 使用這個網絡結構利用大量語料做語言模型任務就能預先訓練好這個網絡,如果訓練好這個網絡後,輸入一個新句子  ,句子中每個單詞都能得到對應的三個Embedding:最底層是單詞的Word Embedding,往上走是第一層雙向LSTM中對應單詞位置的Embedding,這層編碼單詞的句法資訊更多一些;再往上走是第二層LSTM中對應單詞位置的Embedding,這層編碼單詞的語義資訊更多一些。也就是說,ELMO的預訓練過程不僅僅學會單詞的Word Embedding,還學會了一個雙層雙向的LSTM網絡結構,而這兩者後面都有用。
    • 第二個階段是在做下遊任務時,從預訓練網絡中提取對應單詞的網絡各層的Word Embedding作為新特征補充到下遊任務中。
      • 那麼預訓練好網絡結構後,如何給下遊任務使用呢?上圖展示了下遊任務的使用過程,比如我們的下遊任務仍然是QA問題,此時對于問句X,我們可以先将句子X作為預訓練好的ELMO網絡的輸入,這樣句子X中每個單詞在ELMO網絡中都能獲得對應的三個Embedding,之後給予這三個Embedding中的每一個Embedding一個權重a,這個權重可以學習得來,根據各自權重累加求和,将三個Embedding整合成一個。然後将整合後的這個Embedding作為X句在自己任務的那個網絡結構中對應單詞的輸入,以此作為補充的新特征給下遊任務使用。對于上圖所示下遊任務QA中的回答句子Y來說也是如此處理。因為ELMO給下遊提供的是每個單詞的特征形式,是以這一類預訓練的方法被稱為“Feature-based Pre-Training”
        詳解nlp預訓練詞向量(上)——從word2vec到ELMO
    • 這個圖是TagLM采用類似ELMO的思路做命名實體識别任務的過程,其步驟基本如上述ELMO的思路。TagLM的論文發表在2017年的ACL會議上,作者就是AllenAI裡做ELMO的那些人,是以可以将TagLM看做ELMO的一個前導工作。
      詳解nlp預訓練詞向量(上)——從word2vec到ELMO
    • 另外ULMFiT使用的是三階段模式,在通用語言模型訓練之後,加入了一個領域語言模型預訓練過程
    • 第一層LSTM編碼了很多句法資訊,這在這裡起到了重要作用。
      詳解nlp預訓練詞向量(上)——從word2vec到ELMO
    • 效果很好但是也存在很大局限性
      詳解nlp預訓練詞向量(上)——從word2vec到ELMO
    • ELMO有什麼值得改進的缺點呢?首先,一個非常明顯的缺點在特征抽取器選擇方面,ELMO使用了LSTM而不是新貴Transformer,Transformer是谷歌在17年做機器翻譯任務的“Attention is all you need”的論文中提出的,引起了相當大的反響,很多研究已經證明了Transformer提取特征的能力是要遠強于LSTM的。另外一點,ELMO采取雙向拼接這種融合特征的能力可能比Bert一體化的融合特征方式弱
    • 我們如果把ELMO這種預訓練方法和圖像領域的預訓練方法對比,發現兩者模式看上去還是有很大差異的。除了以ELMO為代表的這種基于特征融合的預訓練方法外,NLP裡還有一種典型做法,這種做法和圖像領域的方式就是看上去一緻的了,一般将這種方法稱為“基于Fine-tuning的模式”,而GPT就是這一模式的典型開創者。

GPT和BERT在下篇文章再分享;

繼續閱讀