https://www.leiphone.com/news/202001/hlkvjs2EgjzQIMb1.htmlhtml
2019 年,可謂是 NLP 發展歷程中具備里程碑意義的一年,而其背後的最大功臣當屬 BERT !git
2018 年末才發佈,BERT 僅用 2019 年一年的時間,便以「勢如破竹」的姿態成爲了 NLP 領域數一數二的「紅人」,BERT 相關的論文也如涌潮般發表出來。github
2019 年,是 NLP 發展史上值得銘記的一年,也當之無愧的「BERT 年」。chrome
NLP、ML 研究者 Natasha Latysheva 基於本身蒐集的169 篇 BERT 相關論文,對 BERT 2019 年的發展進行了回顧。網絡
咱們跟隨她的腳步來看:架構
2019 年是 NLP 發展歷程中具備里程碑意義的一年,從閱讀理解到情感分析,針對各大重要任務的解決方案都迎來了新的記錄。iphone
其中最爲突出的研究趨勢是遷移學習在 NLP 的應用,即在特定的語言處理相關任務中,運用大量預訓練模型對它們進行微調。在遷移學習中能夠從新使用預構建模型中的知識,提升模型的性能和泛化能力,同時大量減小具備標籤的訓練樣本。
機器學習
實際上,相似遷移學習這種先對模型進行預訓練再對特定任務進行微調的方式,並很多見,好比計算機視覺研究人員一般使用大型數據集(如 ImageNet)上預訓練好的模型。 NLP 領域長久以來,則一直經過重用詞嵌入來進行「淺層」遷移學習。工具
但在 2019 年,隨着 BERT 等模型的出現,咱們看到了 NLP 領域轉向更深度的知識遷移的重要轉變,即遷移整個模型到新任務上,而這本質上是使用大型預訓練語言模型做爲可重用的語言理解特徵提取器的方法。性能
這在當時也被稱爲「NLP 的 ImageNet 時刻」,與此同時,2019 年基於這一趨勢的相關研究工做也在持續開展。
BERT 可以明顯地讓 NLP 任務輕易地實現遷移學習,同時在此過程當中可以以最小化適應的方式在 11 個句子級和詞級的 NLP 任務上,產生當前最好的結果。
從實用性的角度來看,這當然是使人興奮的,但更有趣的是,BERT 和相關模型能夠促進咱們對於如何將語言表示爲計算機可以理解的語言,以及哪一種表示方法能讓咱們的模型更好地解決這些具備挑戰的語言問題有基本的理解。
新出現的範例是:既然能夠從新使用 BERT 對語言紮實掌握的基礎,模型爲何還要不斷針對每個新的 NLP 任務從頭開始學習語言的語法和語義呢?
隨着這一核心概念與簡單的微調步驟和相應的開源代碼叒叒出現出現時,就意味着 BERT 已迅速地傳播開來了:翻譯的語句要能體現出「很快傳播」的意味:初發佈於 2018 年末的 BERT ,2019 年就已經變成了很是流行的研究工具。
實際上直到我試圖編撰一份去年發表的與 BERT 有關的論文清單時,我才意識到它到底有多受歡迎。我收集了 169 篇與 BERT 相關的論文,並手動將它們標記爲幾個不一樣的研究類別(例如:構建特定領域的 BERT 版本、理解 BERT 的內部機制、構建多語言BERT 等)。
下面是全部這些論文的分佈狀況:
如圖爲在 2018 年 11 月至 2019 年 12 月間發表的與 BERT 相關的論文集合。y 軸表明的是對引文數目的對數統計(由 Google Scholar統計),它的下限爲 0。這些文章中的大多數是經過在 arXiv 論文的標題中搜索關鍵詞 BERT 找到的。
這種信息一般具備更好的交互性,所以這裏我給出了它的 GIF 圖。若是感興趣的話,你也能夠打開以 Jupyter 筆記本形式記錄的原代碼,能夠自行調整圖中的參數,相關連接以下:
上述實驗使用的原始數據以下:
如圖爲在各篇 BERT 論文上移動鼠標時出現的數據。
如今已經有不少關於 BERT 的論文發表。從上圖咱們能夠發現如下幾點:
一個有趣的現象是,從 2018 年 11 月份發表 BERT 的原始論文的時間與大概 2019 年 1 月份開始出現一大波相關論文的時間之間的間隔,至關短。
BERT (相關)論文最初的發表浪潮每每集中在一些核心的 BERT 模型的即時擴展和應用上(好比:圖中紅色、紫色和橙色部分),例如使 BERT 適用於推薦系統,情感分析,文本摘要和文檔檢索。
而後從 4 月開始,一系列探討 BERT 內部機制的論文(圖中綠色部分)相繼發佈,例如瞭解 BERT 如何經過建模進行語言的分層,並分析注意力頭之間的冗餘現象。其中特別使人印象深入的是一篇名爲「利用 BERT 從新探索經典 NLP 的傳播途徑」的論文(相關論文連接爲:https://arxiv.org/abs/1905.05950)。該論文做者發現了BERT 的內部計算能夠反映傳統 NLP 的工做流程,即詞性標記、依賴項分析、實體標記等。
而後在 9 月份左右,又發佈了一系列有關壓縮 BERT 模型尺寸的論文(如圖青色部分),例如DistilBERT,ALBERT 和 TinyBERT 等論文。其中,來自 HuggingFace 的 DistilBERT 模型是 BERT 的壓縮版本,其參數只有先前的一半(從 1.1 億降至 6600 萬),但在對重要 NLP 任務的實現上卻達到了以前性能的 95%(具體請參閱 GLUE 基準; https://gluebenchmark.com/)。原始的 BERT 模型並不輕巧,這在計算資源不足的地方(如移動手機)是一個問題。
請注意這份 BERT 論文清單極可能是不完整的。若是與 BERT 相關論文的實際數量是本人所整理的兩倍,我不會感到驚訝。在這裏作一個粗略的數量估計,目前引用過原始 BERT 論文的數量已經超過了 3100。
若是你對其中一些模型的名稱感到好奇,這些名稱其實是 NLP 的研究人員對《芝麻街》中的人物着迷的體現。咱們能夠將這一切歸咎於(開先例以《芝麻街》人物命名)的論文 ELMo,論文相關連接以下:
這使得後來的諸如 BERT 和 ERNIE 模型也開始以相關任務命名,變得不可避免。我很是熱切地在等待一個 BIGBIRD 模型,那麼咱們不妨將其壓縮版本稱爲 SMALLBIRD?
瀏覽這些文獻時,我發現了其中出現的一些常見概念:
開源機器學習模型的價值。做者免費提供了 BERT 模型和相關代碼,並提供了一個簡單、可重複使用的微調過程。這種開放性對於加快研究進展而言是相當重要的,而且我有理由懷疑若是做者不那麼直爽的話,該模型是否會受到一樣程度的歡迎。
嚴肅看待超參數調整問題,認識到它的重要性。RoBERTa 的論文中,提出了一種更具原理化的優化設計(如更改訓練任務)和更加範化的超參數調整方法來訓練 BERT,這在學術界引發了轟動。這種不斷更新的訓練制度,再加上它只對模型使用更多數據進行更長時間的訓練,就再次將各類 NLP 基準性能的紀錄提高到了新的高度。
關於模型大小的想法。最初,BERT 做者發現了一個很吸引他的現象:即便在很是小的數據集上,僅經過簡單地增長模型大小也能夠極大地提升模型的性能。這也許在某種意義上意味着,你「須要」數億個參數來表示人類的語言。2019 年的其餘幾篇論文中指出,僅經過擴大 NLP 的模型規模便可帶來模型的改進(例如衆所周知的 OpenAI 中的 GPT-2 模型)。固然,這裏還有一些新的技巧能夠用於訓練大到荒謬的 NLP 模型(例如 NVIDIA 的擁有 80 億參數的龐然大物 MegatronLM)。可是,也有證據代表,隨着模型尺寸的增長,模型的效果會遞減,這與計算機視覺研究人員在添加到必定多數量的卷積層時會遇到壁壘的狀況類似。關於模型壓縮和參數效率論文的成功發表,代表能夠在給定大小的模型中得到更多的性能。
如圖,咱們的 NLP 模型變得愈來愈大。摘自 DistilBERT 論文。
讓咱們返回到前面,來討論一下 BERT 究竟是什麼。
BERT(來自 Transformer 的雙向編碼器表示),是 Google 研究人員構建的一個預訓練語言模型(LM)。這個語言模型是基於激勵模型學習一個對語言深層理解的任務上訓練的;LM 的一個常見的訓練任務是預測下一個單詞(好比:「貓坐在__上面」)。
BERT 基於相對較新的神經網絡結構 Transformer,後者使用一種稱爲自注意力的機制來捕獲單詞間的關係。在 Transformer 中沒有卷積(如 CNN)或遞歸(如 RNN)操做,注意力是你惟一須要的。已有一些已經出版的優秀教程(http://www.peterbloem.nl/blog/transformers)對此進行了介紹,因此在這裏就再也不作詳細介紹,以下爲相關概念的簡短介紹:
自注意力機制是一種序列到序列的操做,它經過將每一個詞的內容融合到它的表示中的方式來更新輸入標記的嵌入。這容許它同時對全部輸入的字之間的關係建模,這一點與 RNN 有所不一樣,RNN 中的輸入標記是按順序來讀取和處理的。自注意力使用點積計算詞向量之間的類似性,計算所得的注意力權重一般被視爲注意力權重矩陣。
注意力權重捕捉單詞之間關係的強度,咱們容許模型經過使用多個注意力頭來學習不一樣類型的關係。每個注意力頭一般捕捉單詞之間的一種特殊關係(帶有一些冗餘)。這些關係中的一部分是能夠直觀地解釋的(好比主客體關係,或者跟蹤相鄰的詞),而有些是至關難以理解的。你能夠把注意力頭集中看做是卷積網絡中的濾波器,每一個濾波器從數據中提取一種特定類型的特徵,這些提取出來的特徵將最大限度地幫助神經網絡其餘部分作出更好的預測。
這種自注意機制是 Transformer 的核心操做,但只是將其置於上下文中:Transformer 最初是爲機器翻譯而開發的,而且它們具備編碼-解碼器結構。能夠將 Transformer 編碼器和解碼器的構造看做 Transformer 模塊,其一般由自注意力層、必定量的歸一化和標準前饋層組成。每一個模塊對輸入向量執行此序列操做,並將輸出傳遞給下一個模塊。在 Transformer 中,它的深度是指 Transformer 中模塊的數量。
BERT 模型經過使用上述 Transformer 設置,在 2 個無監督語言模型上進行訓練。關於 BERT 訓練,最重要的是它不依賴於標記數據,也就是說它可使用任何文本語料庫,而不須要任何特殊標記的數據集。BERT 論文的模型就是使用維基百科和一本書的語料庫進行訓練的。與其餘「普通」的語言模型相比,BERT 使用的數據是廉價的,這邊是它所具有的一大優點。
可是,BERT 是在什麼任務上進行訓練,可以激勵它對語言的學習有這樣良好及廣泛有效的理解呢?將來的工做中也許能夠調整學習策略,但原論文就使用了下面兩個任務:
掩膜語言模型(MLM)任務。這項任務鼓勵模型同時以單詞級別和句子級別學習語言的良好表示。簡單地說,一個句子中 15% 的單詞是隨機選擇並用<MASK>標記隱藏(或「掩蔽」)。該模型的工做原理是利用<MASK>先後的單詞預測這些隱藏的部分,所以,咱們試圖從損壞的輸入從新創建起完整的文本,左邊和右邊的內容都被用來作預測。這容許咱們搭建考慮到全部文本的單詞表示。與 ELMo(一種基於 RNN 的語言模型,用於生成由上下文感知的單詞嵌入)等方法不一樣,BERT 同時學習它的雙向表示,而 ELMo 是由兩個不一樣的語言模型分別獨立地對從左到右和從右到左的語言表示進行學習,而後鏈接。咱們能夠說 ELMo 是一個「淺雙向」模型,而 BERT 是一個「深雙向」模型。
下一個句子的預測(NSP)任務。若是咱們的模型被用做語言理解的基礎,那麼瞭解句子間的連貫性將有助於它實現目標。爲鼓勵模型學習句子間的關係,咱們添加了下一句預測任務,在該任務中,模型必須預測一對句子是否相關,即一個句子是否可能繼續鏈接着另外一個句子。句子中的正訓練對是語料庫中真實相鄰的句子,負訓練對是從語料庫中隨機抽取的兩句話。這不是一個完美的系統,由於隨機抽樣的一對句子實際上多是相聯繫的,但這樣對於任務的須要來說已經足夠好了。
上述模型必須同時學會兩項任務,由於它實際的訓練損失是兩項任務損失的總和(即 MLM 和 NSP 可能性平均值的總和)。
若是你發現使用掩蔽的方法有點問題:那麼你實際上是對的。因爲一個片斷中隨機有 15% 的單詞被遮蔽,所以可能會出現多個<MASK>。確實是這樣,可是 BERT 將這些被遮蔽的單詞彼此間看做獨立,這是存在限制的,由於它們實際上很容易造成相互依賴的關係。這也是在 XLNet 論文(https://arxiv.org/abs/1906.08237)中提到的一點,有些人認爲它是 BERT 的繼承。
一旦訓練好的基礎的 BERT 模型,後續一般須要通過兩個步驟來對其進行微調:首先在無標籤數據上繼續進行無監督訓練,而後經過添加一個額外的層並在新目標上訓練,從而學習實際的任務(這裏無需使用過多的標記數據)。
該方法最初源於谷歌研究者 Dai&Le 於 2015 年發佈的 LSTM LM 論文,論文相關連接爲:
BERT 微調實際上會更新模型中全部參數,而不只針對新任務中特定層的參數,所以這種方法不一樣於將傳輸層參數徹底凍結的技術。
實際中,使用 BERT 進行遷移學習,一般只有通過訓練的編碼器棧纔會被從新使用——首先將模型的解碼器切掉一半,而後將編碼器 Transformer 模塊用做特徵提取器。所以,咱們不關心 Transformer 的解碼器對它最初訓練的語言任務作出的預測,咱們只關心模型內部表示輸入文本的方式。
BERT 微調可能須要幾分鐘到幾小時,這取決於任務、數據大小和 TPU/GPU 資源。若是你有興趣嘗試 BERT 微調,你能夠在 Google Colab 上使用這個現成的代碼,它提供對 TPU 的免費訪問。相關代碼以下:
BERT 原論文寫得很好,我建議各位讀者再溫習下,原論文連接爲:https://arxiv.org/abs/1810.04805。我將論文中用到的此前語言模型預訓練和微調經常使用的一些主要方法總結以下:
無監督的基於特徵的方法(如 ELMo),該方法使用預訓練表示做爲輸入特徵,但使用針對特定任務的架構(好比:它們爲每一個新任務更改模型結構)。事實上,全部研究者最喜歡的單詞嵌入方式(從 word2vec、GLoVe 到 FastText)、句子嵌入和段落嵌入都屬於這一類。ELMo 還提供單詞嵌入,但以上下文敏感的方式,標記的嵌入或者表示是從左到右和從右到左的語言模型隱藏狀態向量的鏈接。
無監督的微調方法(如 OpenAI 的 GPT 模型),它對有監督的下游任務的全部預訓練參數進行微調,而且只經過引入一些針對特定任務的參數,來最小程度地改變模型結構。預訓練是在未標記的文本上進行的,學習任務一般是從左到右的語言模型或文本壓縮(就像自動編碼同樣,它將文本壓縮成矢量形式,而後從矢量重建文本)。然而,這些方法使得對上下文建模的能力受到了限制,由於它們對給定單詞的模型一般是單向、從左到右的,它沒有能力將全部後來的單詞合併到其表示中。
從有監督的數據進行遷移學習。此外,還開展了一些工做來遷移從具備大量訓練數據的監督任務中學習到的知識,例如使用機器翻譯模型參數來對不一樣的語言問題的權重初始化。
計算機視覺領域,何凱明曾有一項工做《Rethinking ImageNet Pre-training》代表,預訓練和微調主要有助於加快模型的收斂速度。這一思考和觀點,是否也一樣適用於 NLP 領域的工做呢?
何凱明論文連接地址:https://arxiv.org/abs/1811.08883
我但願這篇文章對 BERT 所引起的研究熱潮提供了一個合理的回顧視角,並展現了這個模型在 NLP 研究領域中是如何變得如此熱門和強大。
目前這一領域的進展迅速,咱們如今從最早進的模型中看到的結果,即使在僅僅五年前也是難以置信的)例如,在問答任務中表現出來的超越人類的性能。
NLP 領域最新發展進程中的兩個主要趨勢是遷移學習和 Transformer 的興起,我很是期待看到這兩個研究方向在 2020 年的發展。
Via https://towardsdatascience.com/2019-the-year-of-bert-354e8106f7ba 雷鋒網雷鋒網(公衆號:雷鋒網)雷鋒網
雷鋒網原創文章,未經受權禁止轉載。詳情見轉載須知。