本篇介紹深度學(xué)習(xí)在自然語言處理(NLP)中的應(yīng)用,從詞向量開始,到最新最強(qiá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)重依賴手動(dòng)制作的特征,它們極其耗時(shí),且通常并不完備。 而近年來,基于稠密向量表征的神經(jīng)網(wǎng)絡(luò)在多種NLP任務(wù)上得到了不錯(cuò)結(jié)果。這一趨勢(shì)取決了詞嵌入和深度學(xué)習(xí)方法的成功;并且深度學(xué)習(xí)使多級(jí)自動(dòng)特征表征學(xué)習(xí)成為可能。因此,本文從詞的分布式表征開始介紹深度學(xué)習(xí)在NLP中的應(yīng)用。 1 分布式詞表征(詞向量)的實(shí)現(xiàn) 通常來講,在2003年的《A Neural Probabilistic Language Model》中Bengio等人提出了神經(jīng)語言模型(NNLM),而它的副產(chǎn)品,詞向量,可以實(shí)現(xiàn)詞的分布式表征。該文通常被認(rèn)為是深度學(xué)習(xí)在自然語言處理中應(yīng)用的開始。提出伊始,由于屆時(shí)計(jì)算機(jī)計(jì)算能力的限制,該網(wǎng)絡(luò)并不能較好的得到訓(xùn)練。因此,這一篇成果,在當(dāng)時(shí)并沒有得到相當(dāng)?shù)年P(guān)注。其神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如下: 2008年Collobert和Weston展示了第一個(gè)能有效利用預(yù)訓(xùn)練詞嵌入的研究工作,他們提出的神經(jīng)網(wǎng)絡(luò)架構(gòu),構(gòu)成了當(dāng)前很多方法的基礎(chǔ)。這一項(xiàng)研究工作還率先將詞嵌入作為 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)如下: 分布式的詞表征的一大好處是實(shí)現(xiàn)了語義的合成性,即兩個(gè)詞向量相加得到的結(jié)果是語義相加的詞,例如[man]+[royal]=[king]。 這種語義合成性的理論依據(jù)最近已經(jīng)由Gittens et al. 在2017年給出,他們表示只有保證某些特定的假設(shè)才能滿足語義合成性,例如詞需要在嵌入空間中處于均勻分布。 GloVe是另外一個(gè)很有名的獲得詞向量的方法,在有些情況下,CBOW和Skip-Gram采用的交叉熵?fù)p失函數(shù)有劣勢(shì)。因此GloVe采用了平方損失。同時(shí),它基本上是一種基于詞統(tǒng)計(jì)的模型,它令詞向量擬合預(yù)先基于整個(gè)數(shù)據(jù)集計(jì)算得到的全局統(tǒng)計(jì)信息,從而學(xué)習(xí)高效的詞表征。 2 NLP中特征提取方法的進(jìn)化 隨著詞分布式表征的問題得到了有效的解決,人們開始思考如何提取詞序列中高級(jí)的語義信息,然后才能將這些提取到的語義信息,應(yīng)用到下游的NLP任務(wù)中,例如情感分析、問答系統(tǒng)、機(jī)器翻譯以及自動(dòng)摘要等。 最早用來對(duì)自然語言詞序列進(jìn)行特征提取的,其實(shí)是卷積神經(jīng)網(wǎng)絡(luò)(CNN)。這主要?dú)w因于卷積神經(jīng)網(wǎng)絡(luò)在圖像領(lǐng)域取得的驕人成績(jī)。 使用 CNN 進(jìn)行句子建??梢宰匪莸紺ollobert和Weston在2008年的研究,他們使用多任務(wù)學(xué)習(xí)為不同的NLP任務(wù)輸出多個(gè)預(yù)測(cè),如詞性標(biāo)注、語塊分割、命名實(shí)體標(biāo)簽和語義相似詞等。其中查找表可以將每一個(gè)詞轉(zhuǎn)換為一個(gè)用戶自定義維度的向量。因此通過查找表,n個(gè)詞的輸入序列 {s_1,s_2,... s_n } 能轉(zhuǎn)換為一系列詞向量 {w_s1, w_s2,... w_sn}。 在Collobert 2011年的研究中,他擴(kuò)展了以前的研究,并提出了一種基于CNN的通用框架來解決大量NLP任務(wù),這兩個(gè)工作都令NLP研究者嘗試在各種任務(wù)中普及 CNN架構(gòu)。CNN具有從輸入句子抽取n-gram特征的能力,因此它能為下游任務(wù)提供具有句子層面信息的隱藏語義表征。 因?yàn)檎Z言序列常常具有長程性,需要記憶很早時(shí)候的輸入信息,CNN并不具備這種能力。這個(gè)時(shí)候,循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)網(wǎng)絡(luò)被提出。 RNN的思路是處理序列信息?!把h(huán)”表示RNN模型對(duì)序列中的每一個(gè)實(shí)例都執(zhí)行同樣的任務(wù),并且權(quán)重共享,從而使輸出依賴于之前的計(jì)算和結(jié)果。 通常,RNN通過將token挨個(gè)輸入到循環(huán)單元中,來生成表示序列的固定大小向量。一定程度上,RNN對(duì)之前的計(jì)算有“記憶”,并在當(dāng)前的處理中使用對(duì)之前的記憶。該模板天然適合很多NLP 任務(wù),如語言建模、機(jī)器翻譯、語音識(shí)別、圖像字幕生成。因此近年來,RNN在NLP任務(wù)中逐漸流行。 但是RNN容易出現(xiàn)梯度消失和爆炸的問題,因而其改進(jìn)版本LSTM和GRU被提出來了。 LSTM比簡(jiǎn)單RNN多了“遺忘門”,其獨(dú)特機(jī)制幫助該網(wǎng)絡(luò)克服了梯度消失和梯度爆炸問題。與原版RNN不同,LSTM允許誤差通過無限數(shù)量的時(shí)間步進(jìn)行反向傳播。它包含三個(gè)門:輸入門、遺忘門和輸出門,并通過結(jié)合這三個(gè)門來計(jì)算隱藏狀態(tài)。另一個(gè)門控RNN變體是GRU,復(fù)雜度更小,其在大部分任務(wù)中的實(shí)驗(yàn)性能與LSTM類似。GRU包括兩個(gè)門:重置門和更新門,并像沒有記憶單元的 LSTM那樣處理信息流。因此,GRU不加控制地暴露出所有的隱藏內(nèi)容。由于GRU的復(fù)雜度較低,它比LSTM更加高效。 在llya Sutskever等人2014年的研究《Sequence to Sequence Learning with Neural Networks》中,作者提出了一種通用深度LSTM編碼器-解碼器框架,可以實(shí)現(xiàn)序列之間的映射。使用一個(gè)LSTM將源序列編碼為定長向量,源序列可以是機(jī)器翻譯任務(wù)中的源語言、問答任務(wù)中的問題或?qū)υ捪到y(tǒng)中的待回復(fù)信息。然后將該向量作為另一個(gè) LSTM解碼器的初始狀態(tài)。在推斷過程中,解碼器逐個(gè)生成token,同時(shí)使用最后生成的token更新隱藏狀態(tài)。 傳統(tǒng)編碼器-解碼器框架的一個(gè)潛在問題是:有時(shí)編碼器會(huì)強(qiáng)制編碼可能與目前任務(wù)不完全相關(guān)的信息。這個(gè)問題在輸入過長或信息量過大時(shí)也會(huì)出現(xiàn),選擇性編碼是不可能的。因此,能夠根據(jù)編碼器編碼內(nèi)容動(dòng)態(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)序列的注意力信號(hào)由解碼器最后的隱藏狀態(tài)的多層感知機(jī)決定。通過在每個(gè)解碼步中可視化輸入序列的注意力信號(hào),可以獲得源語言和目標(biāo)語言之間的清晰對(duì)齊。 但是RNN及其優(yōu)化變種,因?yàn)槎家磿r(shí)序輸入,都存在編碼效率低下的問題。Transformer這種基于self-attention機(jī)制的強(qiáng)大特征提取器應(yīng)運(yùn)而生。《Attention Is All You Need》提出了Transformer,它完全去除了編碼步中的循環(huán)和卷積,僅依賴注意力機(jī)制來捕捉輸入和輸出之間的全局關(guān)系。因此,整個(gè)架構(gòu)更加并行化,在翻譯、解析等任務(wù)上訓(xùn)練得到積極結(jié)果所需的時(shí)間也更少。 3 NLP中的預(yù)訓(xùn)練模型 訓(xùn)練得到的詞向量表征的詞語之間的信息其實(shí)有限。詞向量一個(gè)難以解決的問題就是多義詞的問題,例如“bank”在英文中有“河岸”和“銀行”兩種完全不同意思,但是在詞向量中確實(shí)相同的向量來表征,這顯然不合理。 2017年,為了解決這個(gè)問題,ELMO模型在“Deep contextualized word representation”被提出。 ELMO的本質(zhì)思想是:用事先訓(xùn)練好的語言模型學(xué)好一個(gè)單詞的Word Embedding,此時(shí)多義詞無法區(qū)分,不過這沒關(guān)系。在實(shí)際使用Word Embedding的時(shí)候,單詞特定的上下文就可以知道,這個(gè)時(shí)候模型可以根據(jù)上下文單詞的語義去調(diào)整單詞的Word Embedding表示,這樣經(jīng)過調(diào)整后的Word Embedding更能表達(dá)在這個(gè)上下文中的具體含義,自然也就能克服多義詞的問題。 從ELMO開始,這種先預(yù)訓(xùn)練,在實(shí)際應(yīng)用時(shí)再fine-Tune的模式就開始流行起來了。我們?cè)倏碋LMO,通過雙向語言模型,能夠?qū)W到較豐富的語義信息。但其用的是LSTM作為特征抽取器,在特征抽取能力上較弱。 2018年,Generative Pre-Training(GPT)采用單向語言模型,用Transformer作為特征抽取器,取得了非常不錯(cuò)的效果,但由于主創(chuàng)人員營銷能力欠佳,并沒有像下面這一個(gè)主角一樣,在NLP領(lǐng)域掀起滔天巨浪。 2018年10月,谷歌推出BERT(Bidirectional Encoder Representation from Transformers)模型,刷新了幾乎所有NLP任務(wù)的榜單,一時(shí)風(fēng)頭無兩。仔細(xì)看BERT的實(shí)現(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ù)來源是廉價(jià)而且數(shù)量巨大的。因?yàn)閄LNET在訓(xùn)練時(shí)一直是under-fitting的,因此即使是通過增加數(shù)據(jù)量,都還能提升NLP預(yù)訓(xùn)練模型的效果。這無疑是振奮人心的。 以上大體上介紹了深度學(xué)習(xí)在自然語言處理領(lǐng)域的一些標(biāo)志性進(jìn)展。可預(yù)見的是,現(xiàn)階段是NLP最好的時(shí)代,后續(xù)一段時(shí)間內(nèi),會(huì)有更多更好的模型出現(xiàn),不斷刷新各個(gè)任務(wù)的"state of the art"。 NLP群推薦 |
|