NLP的發展歷程


轉載來源:https://zhuanlan.zhihu.com/p/143473222
介紹bert之前我們先來看一下NLP發展的幾個階段。 如果說把人類完全攻克人工智能(AI)比作上天的話,那麼現在階段人類已經爬上天梯的第二個階梯了。再次之前人類總共進行的三個階段。

  • 第一階段(地上爬):統計機器學習爲代表
  • 第二階段(爬上第一階梯):word2vec爲代表
  • 第三階段(爬上第二階梯):bert爲代表

下面我們簡要介紹每個階段。

一、第一階段(地上爬)

猶如生命的誕生之初,混沌而原始。在word2vec誕生之前,NLP中並沒有一個統一的方法去表示一段文本。

各位前輩和大師們發明了許多的方法:

  • one-hot表示一個詞
  • bag-of-words來表示一段文本
  • tf-idf中用頻率的手段來表徵詞語的重要性
  • text-rank中借鑑了page-rank的方法來表徵詞語的權重
  • 基於SVD純數學分解詞文檔矩陣的LSA
  • pLSA中用概率手段來表徵文檔形成過程
  • LDA中引入兩個共軛分佈從而完美引入先驗

1、傳統統計語言模型:n-gram

實際上,語言模型的本質是對一段自然語言的文本進行預測概率的大小。
P(s)=P(w1w2w3...wt)=P(w1)P(w2w1)P(w3w1w2)P(wTw1...wT1)P(s)=P(w_1w_2w_3...w_t) =P(w_1)P(w_2|w_1)P(w_3|w_1w_2)P(w_T|w_1...w_{T-1})

這個公式是怎麼來的:

  • (1)聯合概率 聯合概率指的是包含多個條件且所有條件同時成立的概率,記作P(X=a,Y=b)或P(a,b)或者P(ab)。
  • (2)條件概率 條件概率表示在條件Y=b成立的情況下,X=a的概率,記作P(X=a|Y=b)或P(a|b)
  • (3)邊緣概率 僅與單個隨機變量有關的概率稱爲邊緣概率,邊緣概率是與聯合概率對應的,P(X=a)或P(Y=b)
  • (4)三者關係P(ab)=P(a,b)P(b)P(a|b)=\frac {P(a,b)}{P(b)}所有以上可以得到

P(a,b)=P(ab)P(b)P(a,b)=P(a|b)*P(b)

  • (5) 鏈式法則 沒有找到標準定義? 可以得到以上的公式
    然而,這個式子的計算依然過於複雜,我們一般都會引入馬爾科夫假設:假定一個句子中的詞只與它前面的n個詞相關。 N-gram這時候就派上用場了。

對於1-gram,其假設是P(wtw1w2wn1)P(wtwt1)P(w_t|w_1w_2…w_{n-1})≈P(w_t|w_{t-1})

對於2-gram,其假設是P(wtw1w2wt1)P(wtwt1,wn2)P(w_t|w_1w_2…w_{t-1})≈P(w_t|w_{t-1},w_{n-2})

對於3-gram,其假設是P(wtw1w2wn1)P(wtwt1,wt2,wt3)P(w_t|w_1w_2…w_{n-1})≈P(w_t|w_{t-1},w_{t-2},w_{t-3})

依次類推。

那麼假如t=3那麼3-game怎麼算呢? 其實就是P(wtw1w2wn1)P(wtwt1,wt2,wt3)P(w_t|w_1w_2…w_{n-1})≈P(w_t|w_{t-1},w_{t-2},w_{t-3})怎麼計算的問題,根據條件概率公式可得: P(wtwt1,wt2,wt3)=P(wt,wt1,wt2,wt3)P(wt1,wt2,wt3))P(w_t|w_{t-1},w_{t-2},w_{t-3})=\frac {P(w_t,w_{t-1},w_{t-2},w_{t-3})}{P(w_{t-1},w_{t-2},w_{t-3}))} 根據極大似然估計(Maximum Likelihood Estimation,MLE)**,說人話就是數頻數: P(wtwt1,wt2,wt3)=P(wt,wt1,wt2,wt3)P(wt1,wt2,wt3))=C(wt,wt1,wt2,wt3)C(wt1,wt2,wt3))P(w_t|w_{t-1},w_{t-2},w_{t-3})=\frac {P(w_t,w_{t-1},w_{t-2},w_{t-3})}{P(w_{t-1},w_{t-2},w_{t-3}))}=\frac {C(w_t,w_{t-1},w_{t-2},w_{t-3})}{C(w_{t-1},w_{t-2},w_{t-3}))}

這樣一來,語言模型的計算終於變得可行。

2、 n-gram 存在的三個缺點

然而,這種基於統計的語言模型卻存在很多問題:

  • 第一,很多情況下 [公式] 的計算會遇到特別多零值,尤其是在n取值比較大的情況下,這種數據稀疏導致的計算爲0的現象變得特別嚴重。所以統計語言模型中一個很重要的方向便是設計各種平滑方法來處理這種情況。

  • 第二, 另一個更爲嚴重的問題是,基於統計的語言模型無法把n取得很大,一般來說在3-gram比較常見,再大的話,計算複雜度會指數上升。這個問題的存在導致統計語言模型無法建模語言中上下文較長的依賴關係。

  • 第三,統計語言模型無法表徵詞語之間的相似性。

二、第二階段(爬上第一階梯)

1.NNLM(Neural Net Language Model)–鋪墊

這些缺點的存在,迫使2003年Bengio在他的經典論文《A Neural Probabilistic Language Model》中,首次將深度學習的思想融入到語言模型中,並發現將訓練得到的NNLM(Neural Net Language Model。

NNLM的最主要貢獻是非常有創見性的將模型的第一層特徵映射矩陣當做詞的分佈式表示,從而可以將一個詞表徵爲一個向量形式,這直接啓發了後來的word2vec的工作。

NNLM雖然將N-Gram的階n提高到了5,相比原來的統計語言模型是一個很大的進步,但是爲了獲取更好的長程依賴關係,5顯然是不夠的。再者,因爲NNLM只對詞的左側文本進行建模,所以得到的詞向量並不是語境的充分表徵。還有一個問題就更嚴重了,NNLM的訓練依然還是太慢,在論文中,Bengio說他們用了40塊CPU,在含有1400萬個詞,只保留詞頻相對較高的詞之後詞典大小爲17964個詞,只訓練了5個epoch,但是耗時超過3周。按這麼來算,如果只用一塊CPU,可能需要2年多,這還是在僅有1400萬個詞的語料上。如此耗時的訓練過程,顯然嚴重限制了NNLM的應用。

2.NNLM優化----鋪墊

自NNLM於2003年被提出後,後面又出現了很多類似和改進的工作,諸如LBL, C&W和RNNLM模型等等,這些方法主要從兩個方面去優化NNLM的思想。

  1. 其一是NNLM只用了左邊的n-1個詞,如何利用更多的上下文信息便成爲了很重要的一個優化思路(如Mikolov等人提出的RNNLM);
  2. 其二是NNLM的一個非常大的缺點是輸出層計算量太大,如何減小計算量使得大規模語料上的訓練變得可行,這也是工程應用上至關重要的優化方向(如Mnih和Hinton提出的LBL以及後續的一系列模型)。

2007年Mnih和Hinton提出的LBL以及後續的一系列相關模型,省去了NNLM中的激活函數,直接把模型變成了一個線性變換,尤其是後來將Hierarchical Softmax引入到LBL後,訓練效率進一步增強,但是表達能力不如NNLM這種神經網絡的結構; 2008年Collobert和Weston 提出的C&W模型不再利用語言模型的結構,而是將目標文本片段整體當做輸入,然後預測這個片段是真實文本的概率,所以它的工作主要是改變了目標輸出,由於輸出只是一個概率大小,不再是詞典大小,因此訓練效率大大提升,但由於使用了這種比較“別緻”的目標輸出,使得它的詞向量表徵能力有限; 2010年Mikolov(對,還是同一個Mikolov)提出的RNNLM主要是爲了解決長程依賴關係,時間複雜度問題依然存在。

3.word2vec—突破

  • CBOW和Skip-gram模型
    2013年,Tomas Mikolov連放幾篇劃時代的論文,其中最爲重要的是兩篇,《Efficient estimation of word representations in vector space》首次提出了CBOW和Skip-gram模型。

  • 優化方法:Hierarchical Softmax和 Negative Sampling
    進一步的在《Distributed Representations of Words and Phrases and their Compositionality》中,又介紹了幾種優化訓練的方法,包括Hierarchical Softmax(當然,這個方法早在2003年,Bengio就在他提出NNLM論文中的Future Work部分提到了這種方法,並於2005年把它系統化發表了一篇論文), Negative Sampling和Subsampling技術。放出兩篇論文後,當時仍在谷歌工作的Mikolov又馬不停蹄的放出了大殺器——word2vec工具,並在其中開源了他的方法。順便提一下的是,很多人以爲word2vec是一種模型和方法,其實word2vec只是一個工具,背後的模型是CBOW或者Skip-gram,並且使用了Hierarchical Softmax或者Negative Sampling這些訓練的優化方法。所以準確說來,word2vec並不是一個模型或算法,只不過Mikolov恰好在當時把他開源的工具包起名叫做word2vec而已。

  • 里程碑革命意義
    word2vec的出現,極大的促進了NLP的發展,尤其是促進了深度學習在NLP中的應用(不過有意思的是,word2vec算法本身其實並不是一個深度模型,它只有兩層全連接),利用預訓練好的詞向量來初始化網絡結構的第一層幾乎已經成了標配,尤其是在只有少量監督數據的情況下,如果不拿預訓練的embedding初始化第一層,幾乎可以被認爲是在蠻幹。 雖然咿咿呀呀囫圇吞棗似的剛開始能夠說得三兩個詞,然而這是“NLP的一小步,人類AI的一大步”。正如人類語言產生之初,一旦某個原始人類的喉部發出的某個音節,經無比智慧和刨根問底考證的史學家研究證實了它具有某個明確的指代意義(無論它指代什麼,即便是人類的排泄物),這便無比莊嚴的宣示着一個全新物種的誕生。

4.word2vec—發展

在此之後,一大批word embedding方法大量湧現,比較知名的有GloVe和fastText等等,它們各自側重不同的角度,並且從不同的方向都得到了還不錯的embedding表徵。

三、第三階段(爬上第二階梯)

1.ELMo–鋪墊

2018年的早些時候,AllenNLP的Matthew E. Peters等人在論文《Deep contextualized word representations》(該論文同時被ICLR和NAACL接受,並且還獲得了NAACL最佳論文獎,可見這篇論文的含金量)中首次提出了ELMo,它的全稱是Embeddings from Language Models,從名稱上可以看出,ELMo爲了利用無標記數據,使用了語言模型。

  • 特徵提取 使用的時雙向LSTM來抽取特徵,還是使用語言模型的方式來定義loss。
    alt
  • 特徵提取-存在的缺點
    • 梯度消失和梯度爆炸問題、即便使用了attention,也無法解決長文本的long-term dependency,長文本依賴問題
    • 因爲使用的是標準的語言模型(sequential model),所以無法並行計算

2.GPT–曙光

大規模語料集上的預訓練語言模型這把火被點燃後,整個業界都在驚呼,原來預訓練的語言模型遠不止十年前Bengio和五年前Mikolov只爲了得到一個詞向量的威力。然而,當大家還在驚呼,沒過幾個月,很快在2018年6月的時候,不再屬於“鋼鐵俠”馬斯克的OpenAI,發了一個大新聞(相關論文是《Improving Language Understanding by Generative Pre-Training》),往這把火勢正猛的烈焰上加了一劑猛料,從而將這把火推向了一個新的高潮。

OpenAI的猛料配方里,第一劑主料便是谷歌於2017年年中的時候提出的Transformer框架(《Attention Is All You Need》)。Transformer是谷歌在17年做機器翻譯任務的“Attention is all you need”的論文中提出的,引起了相當大的反響。 Transformer作爲機器翻譯模型註定了這個模型有兩個過程:Encoder->Decoder。
alt
Transformer的核心技術是self-attention

  • 特徵提取 使用了Transformer的decoder過程做特徵抽取,還是使用語言模型的方式來定義loss。
  • 特徵提取-存在的缺點 使用了語言模型的從左邊到右的方式,沒有考慮右邊文本意思,是單向

3.bert–突破

Bidirectional Encoder Representations from Transformers(BERT) 如果要用一句時下正流行的話來形容BERT的出現,這句話大概再恰當不過:

一切過往, 皆爲序章。

2018年的10月11日,這似乎是個絕對平凡的日子(OpenAI在其博客中放出GPT工作的時間恰好不多不少是4個整月前,即2018年6月11日),然而Google AI的Jacob Devlin和他的合作者們悄悄地在arxiv上放上了他們的最新文章,名爲《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》,隨後先是在Twitter上引發了一波浪潮,同樣是Google AI團隊的Thang Luong在其Twitter上直言這項工作是一個劃時代的工作(原話“A new era of NLP has just begun a few days ago.”)

  • 特徵提取 使用了Transformer的Encoder過程做特徵抽取,考慮了文本的上下文。
  • 特徵提取-存在的缺點
    在這裏插入圖片描述

4.bert–發展

(1).XLNET 自迴歸自編碼的區別
alt
特徵提取 不能直接適用transformer,需要做調整。
在這裏插入圖片描述
特徵提取-存在的缺點
(2).Roberta 優化bert的一些地方

1).Training the model longer, with bigger batches, over more data
2).Removing the next sentence prediction objective
3).Training on longer sequences
4).Dynamically changing the masking patten applied to the training data.

(3).ALbert 模型壓縮

目前可用的號稱比bert更好的有中文預訓練的模型有

  • (1)XLNET-google出品 2019年6月CMU與谷歌大腦提出英文語言模型。 官方地址:https://github.com/zihangdai/xlnet 2019年9月哈工大訊飛聯合實驗室實現中文XLNet-base語言模型。 https://github.com/ymcui/Chinese-XLNet
  • (2)ERNIE-百度出品 2019.3 ERNIE1.0 2019.7 ERNIE2.0 官方地址:https://github.com/PaddlePaddle/ERNIE ERNIE 2.0 模型在英語任務上很多都優於 BERT 和 XLNet,在 7 個 GLUE 任務上取得了最好的結果;中文任務上,ERNIE 2.0 模型在所有 9 箇中文 NLP 任務上全面優於 BERT。 缺點:ERNIE2.0預訓練模型不開源,無法離線使用,必須在百度平臺paddlepaddle上使用。
    目前來說百度的ERNIE2.0應該是最好的中文預訓練模型,但是必須基於百度的生態才能使用。

DNN->CNN->RNN->LSTM->Attention->Transformer->Bert->XLNet->ERNIE2.0

其他:

ERT優點

  • Transformer Encoder因爲有Self-attention機制,因此BERT自帶雙向功能
  • 因爲雙向功能以及多層Self-attention機制的影響,使得BERT必須使用Cloze版的語言模型Masked-LM來完成token級別的預訓練
  • 爲了獲取比詞更高級別的句子級別的語義表徵,BERT加入了Next Sentence Prediction來和Masked-LM一起做聯合訓練
  • 爲了適配多任務下的遷移學習,BERT設計了更通用的輸入層和輸出層
  • 微調成本小

BERT缺點

  • task1的隨機遮擋策略略顯粗獷,推薦閱讀《Data Nosing As Smoothing In Neural Network Language Models》
  • [MASK]標記在實際預測中不會出現,訓練時用過多[MASK]影響模型表現;
  • 每個batch只有15%的token被預測,所以BERT收斂得比left-to-right模型要慢(它們會預測每個token)
  • BERT對硬件資源的消耗巨大(大模型需要16個tpu,歷時四天;更大的模型需要64個tpu,歷時四天。

關於BERT最新的各領域應用推薦張俊林的Bert時代的創新(應用篇)

參考文獻

  1. https://zhuanlan.zhihu.com/p/50443871
  2. https://www.bilibili.com/video/BV1XK4y1t7N5
  3. https://www.bilibili.com/video/BV1X
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章