【技术综述】深度学习在自然语言处理中的应用发展史
本篇介紹深度學(xué)習(xí)在自然語言處理(NLP)中的應(yīng)用,從詞向量開始,到最新最強大的BERT等預(yù)訓(xùn)練模型,梗概性的介紹了深度學(xué)習(xí)近20年在NLP中的一些重大的進(jìn)展。
作者&編輯 | 小Dream哥?
在深度學(xué)習(xí)之前,用于解決NLP問題的機(jī)器學(xué)習(xí)方法一般都基于淺層模型(如SVM和logistic 回歸),這些模型都在非常高維和稀疏的特征(one-hot encoding)上進(jìn)行訓(xùn)練和學(xué)習(xí),出現(xiàn)了維度爆炸等問題難以解決。并且基于傳統(tǒng)機(jī)器學(xué)習(xí)的NLP系統(tǒng)嚴(yán)重依賴手動制作的特征,它們極其耗時,且通常并不完備。
而近年來,基于稠密向量表征的神經(jīng)網(wǎng)絡(luò)在多種NLP任務(wù)上得到了不錯結(jié)果。這一趨勢取決了詞嵌入和深度學(xué)習(xí)方法的成功;并且深度學(xué)習(xí)使多級自動特征表征學(xué)習(xí)成為可能。因此,本文從詞的分布式表征開始介紹深度學(xué)習(xí)在NLP中的應(yīng)用。
1 分布式詞表征(詞向量)的實現(xiàn)?
通常來講,在2003年的《A Neural Probabilistic Language Model》中Bengio等人提出了神經(jīng)語言模型(NNLM),而它的副產(chǎn)品,詞向量,可以實現(xiàn)詞的分布式表征。該文通常被認(rèn)為是深度學(xué)習(xí)在自然語言處理中應(yīng)用的開始。提出伊始,由于屆時計算機(jī)計算能力的限制,該網(wǎng)絡(luò)并不能較好的得到訓(xùn)練。因此,這一篇成果,在當(dāng)時并沒有得到相當(dāng)?shù)年P(guān)注。其神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如下:
2008年Collobert和Weston展示了第一個能有效利用預(yù)訓(xùn)練詞嵌入的研究工作,他們提出的神經(jīng)網(wǎng)絡(luò)架構(gòu),構(gòu)成了當(dāng)前很多方法的基礎(chǔ)。這一項研究工作還率先將詞嵌入作為 NLP 任務(wù)的高效工具。
不過詞嵌入真正走向NLP主流還是Mikolov 等人在 2013 年做出的研究《Distributed Representations of Words and Phrases and their Compositionality》。
Mikolov 等研究者在這篇論文中提出了連續(xù)詞袋模型CBOW和 Skip-Gram 模型,通過引入負(fù)采樣等可行性的措施,這兩種方法都能學(xué)習(xí)高質(zhì)量的詞向量。CBOW模型的網(wǎng)絡(luò)結(jié)構(gòu)如下:
分布式的詞表征的一大好處是實現(xiàn)了語義的合成性,即兩個詞向量相加得到的結(jié)果是語義相加的詞,例如[man]+[royal]=[king]。
這種語義合成性的理論依據(jù)最近已經(jīng)由Gittens et al. 在2017年給出,他們表示只有保證某些特定的假設(shè)才能滿足語義合成性,例如詞需要在嵌入空間中處于均勻分布。
GloVe是另外一個很有名的獲得詞向量的方法,在有些情況下,CBOW和Skip-Gram采用的交叉熵?fù)p失函數(shù)有劣勢。因此GloVe采用了平方損失。同時,它基本上是一種基于詞統(tǒng)計的模型,它令詞向量擬合預(yù)先基于整個數(shù)據(jù)集計算得到的全局統(tǒng)計信息,從而學(xué)習(xí)高效的詞表征。
2 NLP中特征提取方法的進(jìn)化
隨著詞分布式表征的問題得到了有效的解決,人們開始思考如何提取詞序列中高級的語義信息,然后才能將這些提取到的語義信息,應(yīng)用到下游的NLP任務(wù)中,例如情感分析、問答系統(tǒng)、機(jī)器翻譯以及自動摘要等。
最早用來對自然語言詞序列進(jìn)行特征提取的,其實是卷積神經(jīng)網(wǎng)絡(luò)(CNN)。這主要歸因于卷積神經(jīng)網(wǎng)絡(luò)在圖像領(lǐng)域取得的驕人成績。
使用 CNN 進(jìn)行句子建模可以追溯到Collobert和Weston在2008年的研究,他們使用多任務(wù)學(xué)習(xí)為不同的NLP任務(wù)輸出多個預(yù)測,如詞性標(biāo)注、語塊分割、命名實體標(biāo)簽和語義相似詞等。其中查找表可以將每一個詞轉(zhuǎn)換為一個用戶自定義維度的向量。因此通過查找表,n個詞的輸入序列 {s_1,s_2,... s_n } 能轉(zhuǎn)換為一系列詞向量 {w_s1, w_s2,... w_sn}。
在Collobert 2011年的研究中,他擴(kuò)展了以前的研究,并提出了一種基于CNN的通用框架來解決大量NLP任務(wù),這兩個工作都令NLP研究者嘗試在各種任務(wù)中普及 CNN架構(gòu)。CNN具有從輸入句子抽取n-gram特征的能力,因此它能為下游任務(wù)提供具有句子層面信息的隱藏語義表征。
因為語言序列常常具有長程性,需要記憶很早時候的輸入信息,CNN并不具備這種能力。這個時候,循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)網(wǎng)絡(luò)被提出。
RNN的思路是處理序列信息。“循環(huán)”表示RNN模型對序列中的每一個實例都執(zhí)行同樣的任務(wù),并且權(quán)重共享,從而使輸出依賴于之前的計算和結(jié)果。
通常,RNN通過將token挨個輸入到循環(huán)單元中,來生成表示序列的固定大小向量。一定程度上,RNN對之前的計算有“記憶”,并在當(dāng)前的處理中使用對之前的記憶。該模板天然適合很多NLP 任務(wù),如語言建模、機(jī)器翻譯、語音識別、圖像字幕生成。因此近年來,RNN在NLP任務(wù)中逐漸流行。
但是RNN容易出現(xiàn)梯度消失和爆炸的問題,因而其改進(jìn)版本LSTM和GRU被提出來了。
LSTM比簡單RNN多了“遺忘門”,其獨特機(jī)制幫助該網(wǎng)絡(luò)克服了梯度消失和梯度爆炸問題。與原版RNN不同,LSTM允許誤差通過無限數(shù)量的時間步進(jìn)行反向傳播。它包含三個門:輸入門、遺忘門和輸出門,并通過結(jié)合這三個門來計算隱藏狀態(tài)。另一個門控RNN變體是GRU,復(fù)雜度更小,其在大部分任務(wù)中的實驗性能與LSTM類似。GRU包括兩個門:重置門和更新門,并像沒有記憶單元的 LSTM那樣處理信息流。因此,GRU不加控制地暴露出所有的隱藏內(nèi)容。由于GRU的復(fù)雜度較低,它比LSTM更加高效。
在llya Sutskever等人2014年的研究《Sequence to Sequence Learning with Neural Networks》中,作者提出了一種通用深度LSTM編碼器-解碼器框架,可以實現(xiàn)序列之間的映射。使用一個LSTM將源序列編碼為定長向量,源序列可以是機(jī)器翻譯任務(wù)中的源語言、問答任務(wù)中的問題或?qū)υ捪到y(tǒng)中的待回復(fù)信息。然后將該向量作為另一個 LSTM解碼器的初始狀態(tài)。在推斷過程中,解碼器逐個生成token,同時使用最后生成的token更新隱藏狀態(tài)。
傳統(tǒng)編碼器-解碼器框架的一個潛在問題是:有時編碼器會強制編碼可能與目前任務(wù)不完全相關(guān)的信息。這個問題在輸入過長或信息量過大時也會出現(xiàn),選擇性編碼是不可能的。因此,能夠根據(jù)編碼器編碼內(nèi)容動態(tài)解碼內(nèi)容的注意力機(jī)制(Attention)得到提出。
《Neural Machine Translation by Jointly Learning to Align and Translate》首次將注意力機(jī)制應(yīng)用到機(jī)器翻譯任務(wù),尤其改進(jìn)了在長序列上的性能。該論文中,關(guān)注輸入隱藏狀態(tài)序列的注意力信號由解碼器最后的隱藏狀態(tài)的多層感知機(jī)決定。通過在每個解碼步中可視化輸入序列的注意力信號,可以獲得源語言和目標(biāo)語言之間的清晰對齊。
但是RNN及其優(yōu)化變種,因為都要按時序輸入,都存在編碼效率低下的問題。Transformer這種基于self-attention機(jī)制的強大特征提取器應(yīng)運而生。《Attention Is All You Need》提出了Transformer,它完全去除了編碼步中的循環(huán)和卷積,僅依賴注意力機(jī)制來捕捉輸入和輸出之間的全局關(guān)系。因此,整個架構(gòu)更加并行化,在翻譯、解析等任務(wù)上訓(xùn)練得到積極結(jié)果所需的時間也更少。
3 NLP中的預(yù)訓(xùn)練模型
訓(xùn)練得到的詞向量表征的詞語之間的信息其實有限。詞向量一個難以解決的問題就是多義詞的問題,例如“bank”在英文中有“河岸”和“銀行”兩種完全不同意思,但是在詞向量中確實相同的向量來表征,這顯然不合理。
2017年,為了解決這個問題,ELMO模型在“Deep contextualized word representation”被提出。
ELMO的本質(zhì)思想是:用事先訓(xùn)練好的語言模型學(xué)好一個單詞的Word Embedding,此時多義詞無法區(qū)分,不過這沒關(guān)系。在實際使用Word Embedding的時候,單詞特定的上下文就可以知道,這個時候模型可以根據(jù)上下文單詞的語義去調(diào)整單詞的Word Embedding表示,這樣經(jīng)過調(diào)整后的Word Embedding更能表達(dá)在這個上下文中的具體含義,自然也就能克服多義詞的問題。
從ELMO開始,這種先預(yù)訓(xùn)練,在實際應(yīng)用時再fine-Tune的模式就開始流行起來了。我們再看ELMO,通過雙向語言模型,能夠?qū)W到較豐富的語義信息。但其用的是LSTM作為特征抽取器,在特征抽取能力上較弱。
2018年,Generative Pre-Training(GPT)采用單向語言模型,用Transformer作為特征抽取器,取得了非常不錯的效果,但由于主創(chuàng)人員營銷能力欠佳,并沒有像下面這一個主角一樣,在NLP領(lǐng)域掀起滔天巨浪。
2018年10月,谷歌推出BERT(Bidirectional Encoder Representation from Transformers)模型,刷新了幾乎所有NLP任務(wù)的榜單,一時風(fēng)頭無兩。仔細(xì)看BERT的實現(xiàn),其與GPT的主要差別在于,BERT用的“雙向語言模型”,它通過MASK掉預(yù)料中的部分詞再重建的過程來學(xué)習(xí)預(yù)料中詞語序列中的語義表示信息,同樣采用Transformer作為特征抽取器。BERT的出現(xiàn),因其效果太好,幾乎讓其他所有的NLP工作都黯然失色。
2019年2月openAI用更大的模型,規(guī)模更大質(zhì)量更好的數(shù)據(jù)推出了GPT2.0,其語言生成能力令人驚嘆。
目前來看,出彩的工作都是基于BERT和GPT的改進(jìn)工作。在2019年6月,XLNet: Generalized Autoregressive Pretraining for Language Understanding誕生,其基于BERT和GPT等兩類預(yù)訓(xùn)練模型來進(jìn)行改進(jìn),分別吸取了兩類模型的長處,獲得的很好的效果。
需要注意的是,所有的預(yù)訓(xùn)練模型都是無監(jiān)督的,這意味著,模型的數(shù)據(jù)來源是廉價而且數(shù)量巨大的。因為XLNET在訓(xùn)練時一直是under-fitting的,因此即使是通過增加數(shù)據(jù)量,都還能提升NLP預(yù)訓(xùn)練模型的效果。這無疑是振奮人心的。
總結(jié)
以上大體上介紹了深度學(xué)習(xí)在自然語言處理領(lǐng)域的一些標(biāo)志性進(jìn)展。可預(yù)見的是,現(xiàn)階段是NLP最好的時代,后續(xù)一段時間內(nèi),會有更多更好的模型出現(xiàn),不斷刷新各個任務(wù)的"state of the art"。
NLP群推薦
有三AI建立了一個NLP群,便于有志者相互交流。現(xiàn)人數(shù)較多,不便貼二維碼。感興趣的同學(xué)可以微信搜索jen104,備注"加入有三AI NLP群"。
有三AI夏季劃
有三AI夏季劃進(jìn)行中,歡迎了解并加入,系統(tǒng)性成長為中級CV算法工程師。
轉(zhuǎn)載文章請后臺聯(lián)系
侵權(quán)必究
往期精選
【NLP】自然語言處理專欄上線,帶你一步一步走進(jìn)“人工智能技術(shù)皇冠上的明珠”。
【NLP】用于語音識別、分詞的隱馬爾科夫模型HMM
【NLP】用于序列標(biāo)注問題的條件隨機(jī)場(Conditional Random Field, CRF)
【NLP】 NLP專欄欄主自述,說不出口的話就交給AI說吧
總結(jié)
以上是生活随笔為你收集整理的【技术综述】深度学习在自然语言处理中的应用发展史的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【NLP】经典分类模型朴素贝叶斯解读
- 下一篇: 梳理百年深度学习发展史-七月在线机器学习