一文了解自然语言处理神经史(上)
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
摘要:?越來越火的NLP到底經(jīng)歷了什么?
本文擴展了Herman Kamper和我在2018年深度學(xué)習(xí)Indaba組織的自然語言處理前沿課程。整個課程的幻燈片都可以在這里找到,這篇文章將主要討論NLP中基于神經(jīng)網(wǎng)絡(luò)方法的近期進(jìn)展。
免責(zé)聲明:本文嘗試將大約15年NLP的發(fā)展歷程濃縮為今天最相關(guān)的八個里程碑,因此遺漏了許多相關(guān)和重要的發(fā)展。特別是,它嚴(yán)重偏向于當(dāng)前的神經(jīng)方法,這可能給人留下此期間沒有其他有影響力方法的錯誤影響。
2001年-神經(jīng)語言模型
語言建模是在給定前面的單詞的情況下預(yù)測文本中的下一個單詞的任務(wù)。?它可能是最簡單的語言處理任務(wù),具有實際應(yīng)用,如智能鍵盤和電子郵件響應(yīng)建議(Kannan et al.,2016)。語言建模有著豐富的歷史。基于n-gram的經(jīng)典方法采用平滑處理看不見的n-gram(Kneser&Ney,1995)。Bengio等人于2001年提出了第一種神經(jīng)語言模型,一種前饋神經(jīng)網(wǎng)絡(luò),如下圖1所示。
該模型把n個可以在表C中查找的先前單詞向量表示作為輸入。現(xiàn)在,這種向量被稱為詞嵌入。這些詞嵌入被連接并送入隱藏層,然后將其輸出提供給softmax層。想要了解更多該模型的信息,請查看此文章。
最近,前饋神經(jīng)網(wǎng)絡(luò)已被用于語言建模的遞歸神經(jīng)網(wǎng)絡(luò)(RNN; Mikolov等人,2010)和長短期記憶網(wǎng)絡(luò)(LSTM; Graves,2013)所取代。近年來已經(jīng)提出了許多經(jīng)典LSTM的新語言擴展模型(請參閱此頁面以獲得概述)。盡管有這些發(fā)展,但經(jīng)典的LSTM仍然是一個強大的基線(Melis等,2018)。即使Bengio等人的經(jīng)典前饋神經(jīng)網(wǎng)絡(luò)在某些環(huán)境中也與更復(fù)雜的模型競爭,但這些通常只學(xué)會考慮最近的詞(Daniluk等,2017)。如何理解這些語言模型捕獲的信息是一個活躍的研究領(lǐng)域(Kuncoro等,2018; Blevins等,2018)。
語言建模通常是應(yīng)用RNN時的首選訓(xùn)練場,并成功捕捉到了想象力,許多人通過Andrej的博客文章開始了解。語言建模是無監(jiān)督學(xué)習(xí)的一種形式,Yann LeCun也將預(yù)測性學(xué)習(xí)作為獲取常識的先決條件(參見NIPS 2016的Cake幻燈片)。?關(guān)于語言建模最顯著的方面可能是,盡管它很簡單,但它是本文討論的許多后期進(jìn)展的核心:
詞嵌入:word2vec的目標(biāo)是簡化語言建模;
序列到序列模型:這種模型通過一次預(yù)測一個詞來生成輸出序列;
預(yù)訓(xùn)練語言模型:這些方法使用語言模型中的表示來進(jìn)行遷移學(xué)習(xí);
這反過來意味著NLP中許多最重要的最新進(jìn)展減少為一種語言建模形式。?為了做“真正的”自然語言理解,僅僅從原始形式的文本中學(xué)習(xí)可能是不夠的,我們將需要新的方法和模型。
2008-多任務(wù)學(xué)習(xí)
多任務(wù)學(xué)習(xí)是在多個任務(wù)上訓(xùn)練的模型之間共享參數(shù)的一般方法。在神經(jīng)網(wǎng)絡(luò)中,這可以通過綁定不同層的權(quán)重來輕松實現(xiàn)。多任務(wù)學(xué)習(xí)的想法在1993年由Rich Caruana首次提出,并應(yīng)用于道路跟蹤和肺炎預(yù)測(Caruana,1998)。直觀地說,多任務(wù)學(xué)習(xí)鼓勵模型學(xué)習(xí)對許多任務(wù)有用的表示。特別對于學(xué)習(xí)一般的低級表示,集中模型的注意力或在有限量的訓(xùn)練數(shù)據(jù)的設(shè)置中特別有用。有關(guān)多任務(wù)學(xué)習(xí)的更全面概述,請查看此文章。
Collobert和Weston于2008年首次將多任務(wù)學(xué)習(xí)應(yīng)用于NLP的神經(jīng)網(wǎng)絡(luò)。?在他們的模型中,查找表(或詞嵌入矩陣)在兩個在不同任務(wù)上訓(xùn)練的模型之間共享,如下面的圖2所示。
共享詞嵌入使模型能夠在詞嵌入矩陣中協(xié)作和共享一般的低級信息,這通常構(gòu)成模型中最大數(shù)量的參數(shù)。Collobert和Weston在2008年的論文中證明了它在多任務(wù)學(xué)習(xí)中的應(yīng)用,它引領(lǐng)了諸如預(yù)訓(xùn)練詞嵌入和使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)之類的思想,這些思想僅在過去幾年中被廣泛采用。它贏得了ICML 2018的時間考驗獎(參見此時的時間考驗獎?wù)撐?#xff09;。
多任務(wù)學(xué)習(xí)現(xiàn)在用于各種NLP任務(wù),并且利用現(xiàn)有或“人工”任務(wù)已成為NLP指令集中的有用工具。有關(guān)不同附加任務(wù)的概述,請查看此文章。雖然通常預(yù)先定義參數(shù)的共享,但是在優(yōu)化過程期間也可以學(xué)習(xí)不同的共享模式(Ruder等,2017)。隨著模型越來越多地在多項任務(wù)中被評估來評估其泛化能力,多任務(wù)學(xué)習(xí)越來越重要,最近提出了多任務(wù)學(xué)習(xí)的專用基準(zhǔn)(Wang et al,2018; McCann et al,2018)。
2013-詞嵌入
文本的稀疏向量表示,即所謂的詞袋模型,在NLP中具有悠久的歷史。正如我們在上面所看到的,早在2001年就已經(jīng)使用了詞或詞嵌入的密集向量表示。?Mikolov等人在2013年提出的主要創(chuàng)新,是通過移動隱藏層和近似目標(biāo)來使這些詞嵌入的訓(xùn)練更有效率。雖然這些變化本質(zhì)上很簡單,但它們與高效的word2vec一起實現(xiàn)了大規(guī)模的詞嵌入訓(xùn)練。
Word2vec有兩種模式,可以在下面的圖3中看到:連續(xù)的詞袋(CBOW)和skip-gram。它們的目標(biāo)不同:一個基于周圍的詞預(yù)測中心詞,而另一個則相反。
雖然這些嵌入在概念上與使用前饋神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的嵌入技術(shù)沒有什么不同,但是對非常大的語料庫的訓(xùn)練使它們能夠捕獲諸如性別,動詞時態(tài)和國家–首都關(guān)系之類的詞之間的某些關(guān)系,由圖4可知:
這些關(guān)系及其背后的意義引發(fā)了對嵌入詞的初步興趣,許多研究調(diào)查了這些線性關(guān)系的起源(Arora等,2016; Mimno&Thompson,2017; Antoniak&Mimno,2018; Wendlandt等,2018))。然而,使用預(yù)訓(xùn)練嵌入作為初始化的固定詞嵌入,把它作為當(dāng)前NLP的主要內(nèi)容被證明可以提高各種下游任務(wù)的性能。
雖然捕獲的關(guān)系word2vec具有直觀且?guī)缀跎衿娴男阅?#xff0c;但后來的研究表明word2vec沒有任何固有的特殊性:通過矩陣分解也可以學(xué)習(xí)詞嵌入(Pennington等,2014; Levy&Goldberg,2014)和通過適當(dāng)?shù)恼{(diào)整,經(jīng)典的矩陣分解方法(如SVD和LSA)可以獲得類似的結(jié)果(Levy等,2015)。
從那時起,許多工作已經(jīng)開始探索詞嵌入的不同方面,可以通過這篇文章了解一些趨勢和未來方向。盡管有許多發(fā)展,但word2ve仍然是如今被廣泛使用的一種流行的選擇。Word2vec的范圍甚至超出了詞級別:帶有負(fù)抽樣的skip-gram,一個基于本地環(huán)境學(xué)習(xí)嵌入的方便目標(biāo),已被應(yīng)用于學(xué)習(xí)句子的表示(Mikolov&Le,2014; Kiros et al.,2015)-甚至超越NLP,應(yīng)用到網(wǎng)絡(luò)(Grover&Leskovec,2016)和生物序列(Asgari&Mofrad,2015)等。
一個特別令人興奮的方向是將不同語言的詞嵌入投影到同一空間中以實現(xiàn)(零射擊)跨語言轉(zhuǎn)移。越來越有可能以完全無監(jiān)督的方式(至少對于類似語言)學(xué)習(xí)良好的投影,這開啟了低資源語言和無監(jiān)督機器翻譯的應(yīng)用(Lample等,2018; Artetxe等,2018)。請查看(Ruder等,2018)的概述。
2013年-NLP的神經(jīng)網(wǎng)絡(luò)
2013年和2014年是神經(jīng)網(wǎng)絡(luò)模型開始應(yīng)用于NLP的標(biāo)志年份。三種主要類型的神經(jīng)網(wǎng)絡(luò)被廣泛使用:遞歸神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、循環(huán)神經(jīng)網(wǎng)絡(luò)。
遞歸神經(jīng)網(wǎng)絡(luò)(RNN)是處理NLP中普遍存在的動態(tài)輸入序列問題的明顯選擇。?Vanilla RNNs(Elman,1990)很快被經(jīng)典的長短期記憶網(wǎng)絡(luò)(Hochreiter&Schmidhuber,1997)所取代,后者證明其對消失和爆炸梯度問題更具彈性。在2013年之前,RNN仍然被認(rèn)為很難訓(xùn)練,Ilya Sutskever的博士論文是改變這種現(xiàn)狀的一個關(guān)鍵例子。LSTM細(xì)胞可視化可以在下面的圖5中看到。雙向LSTM(Graves等,2013)通常用于處理左右上下文。
隨著卷積神經(jīng)網(wǎng)絡(luò)(CNN)被廣泛用于計算機視覺,它們也開始應(yīng)用于文本(Kalchbrenner等,2014; Kim等,2014)。用于文本的卷積神經(jīng)網(wǎng)絡(luò)僅在兩個維度上操作,其中濾波器僅需要沿時間維度移動。下面的圖6顯示了NLP中使用的典型CNN。
卷積神經(jīng)網(wǎng)絡(luò)的一個優(yōu)點是它們比RNN更可并行化,因為每個時間步的狀態(tài)僅取決于本地環(huán)境(通過卷積運算)而不是像RNN取決過去所有狀態(tài)。CNN可以使用擴張卷積擴展到更寬的感受野,以捕捉更廣泛的背景(Kalchbrenner等2016)。?CNN和LSTM也可以組合和堆疊,并且可以使用卷積來加速LSTM。
RNN和CNN都將語言視為一個序列。然而,從語言學(xué)的角度來看,語言本質(zhì)上是等級的:單詞被組成高階短語和子句它們本身可以根據(jù)一組生產(chǎn)規(guī)則遞歸地組合。將句子視為樹而不是序列的語言啟發(fā)思想產(chǎn)生了遞歸神經(jīng)網(wǎng)絡(luò),這可以在下面的圖7中看到:
與從左到右或從右到左處理句子的RNN相比,遞歸神經(jīng)網(wǎng)絡(luò)從下到上構(gòu)建序列的表示。在樹的每個節(jié)點處,通過組合子節(jié)點的表示來計算新表示。由于樹也可以被視為在RNN上施加不同的處理順序,因此LSTM自然地擴展到樹。
RNN和LSTM不僅僅可以被擴展來使用分層結(jié)構(gòu),而且不僅可以根據(jù)本地語言學(xué)習(xí)詞嵌入,而且可以基于語法背景來學(xué)習(xí)詞嵌入(Levy&Goldberg,2014);語言模型可以基于句法堆棧生成單詞(Dyer et al。,2016);?圖形卷積神經(jīng)網(wǎng)絡(luò)可以在樹上運行(Bastings等,2017)。
原文鏈接
轉(zhuǎn)載于:https://my.oschina.net/u/1464083/blog/2962863
總結(jié)
以上是生活随笔為你收集整理的一文了解自然语言处理神经史(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vuls漏洞扫描工具
- 下一篇: JAVA入门到精通-第43讲-IO编程-