1. 程式人生 > >一文了解自然語言處理神經史

一文了解自然語言處理神經史

摘要:越來越火的NLP到底經歷了什麼?本文擴充套件了HermanKamper和我在2018年深度學習Indaba組織的自然語言處理前沿課程。整個課程的幻燈片都可以在這裡找到,這篇文章將主要討論NLP中基於神經網路方法的近期進展。


免責宣告:本文嘗試將大約15年NLP的發展歷程濃縮為今天最相關的八個里程碑,因此遺漏了許多相關和重要的發展。特別是,它嚴重偏向於當前的神經方法,這可能給人留下此期間沒有其他有影響力方法的錯誤影響。

 

2001年-神經語言模型


語言建模是在給定前面的單詞的情況下預測文字中的下一個單詞的任務。 它可能是最簡單的語言處理任務,具有實際應用,如智慧鍵盤和電子郵件響應建議(Kannan et al.,2016)。語言建模有著豐富的歷史。基於n-gram的經典方法採用平滑處理看不見的n-gram(Kneser&Ney,1995)。Bengio等人於2001年提出了第一種神經語言模型,一種前饋神經網路,如下圖1所示。



該模型把n個可以在表C中查詢的先前單詞向量表示作為輸入。現在,這種向量被稱為詞嵌入。這些詞嵌入被連線並送入隱藏層,然後將其輸出提供給softmax層。想要了解更多該模型的資訊,請檢視此文章。


最近,前饋神經網路已被用於語言建模的遞迴神經網路(RNN; Mikolov等人,2010)和長短期記憶網路(LSTM; Graves,2013)所取代。近年來已經提出了許多經典LSTM的新語言擴充套件模型(請參閱此頁面以獲得概述)。儘管有這些發展,但經典的LSTM仍然是一個強大的基線(Melis等,2018)。即使Bengio等人的經典前饋神經網路在某些環境中也與更復雜的模型競爭,但這些通常只學會考慮最近的詞(Daniluk等,2017)。如何理解這些語言模型捕獲的資訊是一個活躍的研究領域(Kuncoro等,2018; Blevins等,2018)。


語言建模通常是應用RNN時的首選訓練場,併成功捕捉到了想象力,許多人通過Andrej的部落格文章開始瞭解。語言建模是無監督學習的一種形式,Yann LeCun也將預測性學習作為獲取常識的先決條件(參見NIPS 2016的Cake幻燈片)。 關於語言建模最顯著的方面可能是,儘管它很簡單,但它是本文討論的許多後期進展的核心:


  • 詞嵌入:word2vec的目標是簡化語言建模;

  • 序列到序列模型:這種模型通過一次預測一個詞來生成輸出序列;

  • 預訓練語言模型:這些方法使用語言模型中的表示來進行遷移學習;


這反過來意味著NLP中許多最重要的最新進展減少為一種語言建模形式。 為了做“真正的”自然語言理解,僅僅從原始形式的文字中學習可能是不夠的,我們將需要新的方法和模型。


2008-多工學習


多工學習是在多個任務上訓練的模型之間共享引數的一般方法。在神經網路中,這可以通過繫結不同層的權重來輕鬆實現。多工學習的想法在1993年由Rich Caruana首次提出,並應用於道路跟蹤和肺炎預測(Caruana,1998)。直觀地說,多工學習鼓勵模型學習對許多工有用的表示。特別對於學習一般的低階表示,集中模型的注意力或在有限量的訓練資料的設定中特別有用。有關多工學習的更全面概述,請檢視此文章。


Collobert和Weston於2008年首次將多工學習應用於NLP的神經網路。 在他們的模型中,查詢表(或詞嵌入矩陣)在兩個在不同任務上訓練的模型之間共享,如下面的圖2所示。



共享詞嵌入使模型能夠在詞嵌入矩陣中協作和共享一般的低階資訊,這通常構成模型中最大數量的引數。Collobert和Weston在2008年的論文中證明了它在多工學習中的應用,它引領了諸如預訓練詞嵌入和使用卷積神經網路(CNN)之類的思想,這些思想僅在過去幾年中被廣泛採用。它贏得了ICML 2018的時間考驗獎(參見此時的時間考驗獎論文)。


多工學習現在用於各種NLP任務,並且利用現有或“人工”任務已成為NLP指令集中的有用工具。有關不同附加任務的概述,請檢視此文章。雖然通常預先定義引數的共享,但是在優化過程期間也可以學習不同的共享模式(Ruder等,2017)。隨著模型越來越多地在多項任務中被評估來評估其泛化能力,多工學習越來越重要,最近提出了多工學習的專用基準(Wang et al,2018; McCann et al,2018)。

 

2013-詞嵌入


文字的稀疏向量表示,即所謂的詞袋模型,在NLP中具有悠久的歷史。正如我們在上面所看到的,早在2001年就已經使用了詞或詞嵌入的密集向量表示。 Mikolov等人在2013年提出的主要創新,是通過移動隱藏層和近似目標來使這些詞嵌入的訓練更有效率。雖然這些變化本質上很簡單,但它們與高效的word2vec一起實現了大規模的詞嵌入訓練。


Word2vec有兩種模式,可以在下面的圖3中看到:連續的詞袋(CBOW)和skip-gram。它們的目標不同:一個基於周圍的詞預測中心詞,而另一個則相反。



雖然這些嵌入在概念上與使用前饋神經網路學習的嵌入技術沒有什麼不同,但是對非常大的語料庫的訓練使它們能夠捕獲諸如性別,動詞時態和國家–首都關係之類的詞之間的某些關係,由圖4可知:



這些關係及其背後的意義引發了對嵌入詞的初步興趣,許多研究調查了這些線性關係的起源(Arora等,2016; Mimno&Thompson,2017; Antoniak&Mimno,2018; Wendlandt等,2018))。然而,使用預訓練嵌入作為初始化的固定詞嵌入,把它作為當前NLP的主要內容被證明可以提高各種下游任務的效能。


雖然捕獲的關係word2vec具有直觀且幾乎神奇的效能,但後來的研究表明word2vec沒有任何固有的特殊性:通過矩陣分解也可以學習詞嵌入(Pennington等,2014; Levy&Goldberg,2014)和通過適當的調整,經典的矩陣分解方法(如SVD和LSA)可以獲得類似的結果(Levy等,2015)。


從那時起,許多工作已經開始探索詞嵌入的不同方面,可以通過這篇文章瞭解一些趨勢和未來方向。儘管有許多發展,但word2ve仍然是如今被廣泛使用的一種流行的選擇。Word2vec的範圍甚至超出了詞級別:帶有負抽樣的skip-gram,一個基於本地環境學習嵌入的方便目標,已被應用於學習句子的表示(Mikolov&Le,2014; Kiros et al.,2015)-甚至超越NLP,應用到網路(Grover&Leskovec,2016)和生物序列(Asgari&Mofrad,2015)等。


一個特別令人興奮的方向是將不同語言的詞嵌入投影到同一空間中以實現(零射擊)跨語言轉移。越來越有可能以完全無監督的方式(至少對於類似語言)學習良好的投影,這開啟了低資源語言和無監督機器翻譯的應用(Lample等,2018; Artetxe等,2018)。請檢視(Ruder等,2018)的概述。

 

2013年-NLP的神經網路


2013年和2014年是神經網路模型開始應用於NLP的標誌年份。三種主要型別的神經網路被廣泛使用:遞迴神經網路、卷積神經網路、迴圈神經網路。


遞迴神經網路(RNN)是處理NLP中普遍存在的動態輸入序列問題的明顯選擇。 Vanilla RNNs(Elman,1990)很快被經典的長短期記憶網路(Hochreiter&Schmidhuber,1997)所取代,後者證明其對消失和爆炸梯度問題更具彈性。在2013年之前,RNN仍然被認為很難訓練,Ilya Sutskever的博士論文是改變這種現狀的一個關鍵例子。LSTM細胞視覺化可以在下面的圖5中看到。雙向LSTM(Graves等,2013)通常用於處理左右上下文。



隨著卷積神經網路(CNN)被廣泛用於計算機視覺,它們也開始應用於文字(Kalchbrenner等,2014; Kim等,2014)。用於文字的卷積神經網路僅在兩個維度上操作,其中濾波器僅需要沿時間維度移動。下面的圖6顯示了NLP中使用的典型CNN。



卷積神經網路的一個優點是它們比RNN更可並行化,因為每個時間步的狀態僅取決於本地環境(通過卷積運算)而不是像RNN取決過去所有狀態。CNN可以使用擴張卷積擴充套件到更寬的感受野,以捕捉更廣泛的背景(Kalchbrenner等2016)。 CNN和LSTM也可以組合和堆疊,並且可以使用卷積來加速LSTM。


RNN和CNN都將語言視為一個序列。然而,從語言學的角度來看,語言本質上是等級的:單詞被組成高階短語和子句它們本身可以根據一組生產規則遞迴地組合。將句子視為樹而不是序列的語言啟發思想產生了遞迴神經網路,這可以在下面的圖7中看到:



與從左到右或從右到左處理句子的RNN相比,遞迴神經網路從下到上構建序列的表示。在樹的每個節點處,通過組合子節點的表示來計算新表示。由於樹也可以被視為在RNN上施加不同的處理順序,因此LSTM自然地擴充套件到樹。


RNN和LSTM不僅僅可以被擴充套件來使用分層結構,而且不僅可以根據本地語言學習詞嵌入,而且可以基於語法背景來學習詞嵌入(Levy&Goldberg,2014);語言模型可以基於句法堆疊生成單詞(Dyer et al。,2016); 圖形卷積神經網路可以在樹上執行(Bastings等,2017)。


2014年-序列到序列模型


2014年,Sutskever等人提出序列到序列學習,一種通過神經網路將一個序列對映到另一個序列的通用框架。在該框架中,編碼器神經網路逐個符號地處理句子並將其壓縮成矢量表示; 然後,解碼器神經網路基於編碼器狀態逐個符號地預測輸出符號,在每個步驟中將先前預測的符號作為輸入,如下面的圖8所示。



機器翻譯成了這個框架的殺手級應用。2016年,谷歌宣佈開始用NMT模型替換其基於單片短語的MT模型(Wu et al.,2016)。根據Jeff Dean的說法,這意味著用500線性神經網路模型替換500,000行基於短語的MT程式碼。


由於其靈活性,該框架現在是自然語言生成任務的首選框架,不同的模型承擔編碼器和解碼器的角色。重要的是,解碼器模型不僅可以以序列為條件,而且可以以任意表示為條件。這使得例如基於影象生成標題(Vinyals等人,2015)(如下面的圖9中可見),基於表格的文字(Lebret等人,2016),以及基於原始碼更改的描述(Loyola等,2017),以及許多其他應用程式。



序列到序列學習甚至可以應用於NLP中常見的結構化預測任務,其中NLP輸出具有特定結構。簡單地說,輸出是線性化的,如下面圖10中的consituency解析所示。神經網路已經證明了在給予consituency解析的足夠數量的訓練資料(Vinyals等,2015)和命名實體識別(Gillick等,2016)等的情況下,能夠直接學習產生這種線性化輸出的能力。



用於序列和解碼器的編碼器通常基於RNN,但是也可以使用其他模型型別,最新的架構主要來自作為序列到序列架構的培養皿MT的工作。最近的模型是卷積編碼器(Kalchbrenner等,2016; Gehring等,2017),變換器(Vaswani等,2017),將在下一個部分討論,以及LSTM和變壓器的組合(Chen等,2018)。


2015-注意力


注意力(Bahdanau等,2015)NMT)的核心創新之一,也是使NMT模型優於基於經典短語的MT系統的關鍵思想。序列到序列學習的主要瓶頸是它需要將源序列的整個內容壓縮成固定大小的向量。注意力通過允許解碼器回顧源序列隱藏狀態來減輕這種情況,然後將其作為加權平均值提供給解碼器的附加輸入,如下面的圖11所示。



注意力有不同的形式(Luong等,2015)在這裡檢視簡要概述。 注意力廣泛適用並且可能對任何需要根據輸入的某些部分做出決策的任務有用。它已被應用於consituency解析(Vinyals等,2015),閱讀理解(Hermann等,2015)和一次性學習(Vinyals等,2016)等。甚至輸入不需要是序列,但可以包括其他表示,如影象字幕的情況(Xu et al.,2015),可以在下面的圖12中看到。注意力的一個有用的副作用是,通過根據注意力量檢查輸入的哪些部分與特定輸出相關。



注意力也不僅限於檢視輸入序列;自-注意力可用於檢視句子或文件中的周圍單詞以獲得更多上下文敏感的單詞表示。多層自-注意力是Transformer架構的核心(Vaswani等,2017),這是目前最先進的NMT模型。

 

2015-基於記憶的網路


注意力可以看作是模糊記憶的一種形式,其中記憶由模型的過去隱藏狀態組成,模型選擇從記憶中所檢索的內容。有關注意事項及其與記憶關聯的更詳細概述,請檢視此文章。許多具有更明確記憶的模型已經被提出,它們有不同的變體,例如神經網路圖靈機(Graves et al,2014),記憶網路(Weston et al.,2015)[70]和端到端的記憶網路(Sukhbaatar et al.,2015),動態記憶網路( Kumar等,2015),可微神經計算機(Graves等,2016)和遞迴實體網路(Henaff等,2017)。


通常基於與當前狀態的相似性來訪問記憶體,類似於注意力,並且通常可以寫入和讀取儲存器,模型在實現和利用記憶體方面有所不同。例如,端到端記憶網路多次處理輸入並更新記憶體以啟用多個推理步驟。神經圖靈機還具有基於位置的定址,允許它們學習簡單的計算機程式,如排序。基於記憶的模型通常應用於其中保留較長時間跨度資訊的有用任務,例如語言建模和閱讀理解。儲存器的概念非常通用:知識庫或表可以用作儲存器,而儲存器也可以基於整個輸入或其特定部分來填充。

 

2018年 - 預訓練語言模型


預訓練的詞嵌入與上下文無關,而且僅用於初始化模型中的第一層。最近幾個月,一系列監督任務被用於預訓練神經網路(Conneau等,2017; McCann等,2017; Subramanian等,2018)。相比之下,語言模型只需要未標記的文字; 因此,訓練可以擴充套件到數十億個tokens,新領域和新語言。 2015年首次提出了預訓練語言模型(Dai&Le,2015); 直到最近,它們才被證明對各種各樣的任務都有益。 語言模型嵌入可以用作目標模型中的特徵(Peters等,2018),或者可以對目標任務資料微調語言模型(Ramachandran等,2017; Howard&Ruder,2018)。新增語言模型嵌入比許多工的最新技術有了很大的改進,如下面的圖13所示。



預訓練語言模型可以用更少的資料進行學習,由於語言模型僅需要未標記的資料,因此對於標記資料稀缺的低資源語言尤其有用。有關預訓練語言模型的更多資訊,請參閱本文。

 

其他里程碑


基於字元的表示:在字元上使用CNN或LSTM來獲得基於字元的詞表示是相當普遍的,特別是對於形態學豐富的語言和形態資訊很重要或具有許多未知單詞的任務。據我所知,基於字元的表示首先用於序列標記(Lample等,2016; Plank等,2016)。基於字元的表示減少了必須以增加計算成本處理固定詞彙表的需要,並且能夠實現諸如完全基於字元的NMT之類的應用(Ling等人,2016; Lee等人,2017)。

 

對抗性學習:對抗性方法已經在風暴中佔據了ML的領域,並且在NLP中也以不同的形式使用。對抗性示例越來越廣泛地被廣泛使用,不僅作為探測模型和理解其失敗案例的工具,而且還使它們更加具有魯棒性(Jia&Liang,2017)。對抗性訓練:域對抗性損失(Ganin等,2016; Kim等,2017)是可以同樣使模型更加健壯的有用的正規化形式。生成對抗網路(GAN)對於自然語言生成來說還不是太有效(Semeniuta等,2018),但是例如在匹配分佈時是有用的(Conneau等,2018)。

 

強化學習:強化學習已經被證明對於具有時間依賴性的任務是有用的,例如在訓練期間選擇資料(Fang等,2017; Wu等,2018)和建模對話(Liu等,2018)。RL對於直接優化諸如ROUGE或BLEU之類的非可微結束度量而不是優化替代損失(例如摘要中的交叉熵(Paulus等,2018; Celikyilmaz等,2018)和機器翻譯也是有效的。(Ranzato等人,2016),反向強化學習在犒賞太複雜而無法指定的環境中可能是有用的,例如視覺敘事(Wang et al。,2018)。


本文由阿里云云棲社群組織翻譯。

文章原標題《a-review-of-the-recent-history-of-natural-language-processing》

作者:Sebastian Ruder 譯者:虎說八道,審校:。



end

Python資料科學“冷門”庫

模組化與解耦式開發在螞蟻金服 mPaaS 深度實踐探討

Python資料視覺化的四種簡易方法

更多精彩