萬字長文帶你解讀NLP深度學習的各類模型

原文鏈接:https://www.yuque.com/weis/ai/wqiw8u

導讀:NLP,讓人與機器的交互不再遙遠;深度學習,讓語言解析不再是智能系統的瓶頸。本文嘗試回顧NLP發展的歷史,解讀NLP升級迭代過程中一些重要而有意思的模型,總結不同任務場景應用模型的思路,對NLP未來發展趨勢發表自己的看法。筆者經驗有限,如有不全或不當地方,請予指正。

1 背景

自然語言處理(英語:Natural Language Process,簡稱NLP)是計算機科學、信息工程以及人工智能的子領域,專注於人機語言交互,探討如何處理和運用自然語言。自然語言處理的研究,最早可以說開始於圖靈測試,經歷了以規則爲基礎的研究方法,流行於現在基於統計學的模型和方法,從早期的傳統機器學習方法,基於高維稀疏特徵的訓練方式,到現在主流的深度學習方法,使用基於神經網絡的低維稠密向量特徵訓練模型。最近幾年,隨着深度學習以及相關技術的發展,NLP領域的研究取得一個又一個突破,研究者設計各種模型和方法,來解決NLP的各類問題。下圖是Young等[1]統計了過去6年ACL、EMNLP、EACL和NAACL上發表深度學習長篇論文的比例逐年增加,而2018年下半場基本是ELMo、GPT、BERT等深度學習模型光芒四射的showtime,所以本文會將更多的筆墨用於陳述分析深度學習模型。

機器學習是計算機通過模式和推理、而不是明確指令的方式,高效執行指定任務的學習算法。貝葉斯概率模型、邏輯迴歸、決策樹、SVM、主題模型、HMM模型等,都是常見的用於NLP研究的傳統機器學習算法。而深度學習是一種基於特徵學習的機器學習方法,把原始數據通過簡單但非線性的模塊轉變成更高層次、更加抽象的特徵表示,通過足夠多的轉換組合,非常複雜的函數也能被學習。在多年的實驗中,人們發現了認知的兩個重要機制:抽象和迭代,從原始信號,做底層抽象,逐漸向高層抽象迭代,在迭代中抽象出更高層的模式。如何形象地理解?在機器視覺領域會比較容易理解,深度學習通過多層神經網絡依次提取出圖像信息的邊緣特徵、簡單形狀特徵譬如嘴巴的輪廓、更高層的形狀特徵譬如臉型;而在自然語言處理領域則沒有那麼直觀的理解,我們可以通過深度學習模型學習到文本信息的語法特徵和語義特徵。可以說,深度學習,代表自然語言處理研究從機器學習到認知計算的進步。

要講深度學習,得從語言模型開始講起。自然語言處理的基礎研究便是人機語言交互,以機器能夠理解的算法來反映人類的語言,核心是基於統計學的語言模型。語言模型(英語:Language Model,簡稱LM),是一串詞序列的概率分佈。通過語言模型,可以量化地評估一串文字存在的可能性。對於一段長度爲n的文本,文本中的每個單詞都有通過上文預測該單詞的過程,所有單詞的概率乘積便可以用來評估文本存在的可能性。在實踐中,如果文本很長,P(w_i|context(w_i))的估算會很困難,因此有了簡化版:N元模型。在N元模型中,通過對當前詞的前N個詞進行計算來估算該詞的條件概率。對於N元模型。常用的有unigram、bigram和trigram,N越大,越容易出現數據稀疏問題,估算結果越不準。爲了解決N元模型估算概率時的數據稀疏問題,研究者嘗試用神經網絡來研究語言模型。

早在2000年,就有研究者提出用神經網絡研究語言模型的想法,經典代表有2003年Bengio等[2]提出的NNLM,但效果並不顯著,深度學習用於NLP的研究一直處在探索的階段。直到2011年,Collobert等[3]用一個簡單的深度學習模型在命名實體識別NER、語義角色標註SRL、詞性標註POS-tagging等NLP任務取得SOTA成績,基於深度學習的研究方法得到越來越多關注。2013年,以Word2vec、Glove爲代表的詞向量大火,更多的研究從詞向量的角度探索如何提高語言模型的能力,研究關注詞內語義和上下文語義。此外,基於深度學習的研究經歷了CNN、RNN、Transormer等特徵提取器,研究者嘗試用各種機制優化語言模型的能力,包括預訓練結合下游任務微調的方法。最近最吸睛的EMLo、GPT和BERT模型,便是這種預訓練方法的優秀代表,頻頻刷新SOTA。

2 模型

接下來文章會以循序漸進的方式分成五個部分來介紹深度學習模型:第一部分介紹一些基礎模型;第二部分介紹基於CNN的模型;第三部分介紹基於RNN的模型;第四部分介紹基於Attention機制的模型;第五部分介紹基於Transformer的模型,講述一段語言模型升級迭代的故事。NLP有很多模型和方法,不同的任務場景有不同的模型和策略來解決某些問題。筆者認爲,理解了這些模型,再去理解別的模型便不是很難的事情,甚至可以自己嘗試設計模型來滿足具體任務場景的需求。


Basic Embedding Model

NNLM是非常經典的神經網絡語言模型,雖然相比傳統機器學習並沒有很顯著的成效,但大家說起NLP在深度學習方向的探索,總不忘提及這位元老。分佈式表示的概念很早就有研究者提出並應用於深度學習模型,Word2vec使用CBOW和Skip-gram訓練模型,意外的語意組合效果才使得詞向量廣泛普及。FastText在語言模型上沒有什麼特別的突破,但模型的優化使得深度學習模型在大規模數據的訓練非常快甚至秒級,而且文本分類的效果匹敵CNN/RNN之類模型,在工業化應用佔有一席之地。

NNLM

2003年Bengio等[2]提出一種基於神經網絡的語言模型NNLM,模型同時學習詞的分佈式表示,並基於詞的分佈式表示,學習詞序列的概率函數,這樣就可以用詞序列的聯合概率來表示句子,而且,模型還能夠產生指數量級的語義相似的句子。作者認爲,通過這種方式訓練出來的語言模型具有很強的泛化能力,對於訓練語料裏沒有出現過的句子,模型能夠通過見過的相似詞組成的相似句子來學習。

模型訓練的目標函數是長度爲n的詞序列的聯合概率,分解成兩部分:一是特徵映射,通過映射矩陣C,將詞典V中的每個單詞都能映射成一個特徵向量C(i) ∈ Rm;二是計算條件概率分佈,通過函數g,將輸入的詞向量序列(C(wt−n+1),··· ,C(wt−1))轉化成一個概率分佈y ∈ R|V|,g的輸出是個向量,第i個元素表示詞序列第n個詞是Vi的概率。網絡輸出層採用softmax函數。

Word2vec

對於複雜的自然語言任務進行建模,概率模型應運而生成爲首選的方法,但在最開始的時候,學習語言模型的聯合概率函數存在致命的維數災難問題。假如語言模型的詞典大小爲100000,要表示10個連續詞的聯合分佈,模型參數可能就要有1050個。相應的,模型要具備足夠的置信度,需要的樣本量指數級增加。爲了解決這個問題,最早是1986年Hinton等[5]提出分佈式表示(Distributed Representation),基本思想是將詞表示成n維連續的實數向量。分佈式表示具備強大的特徵表示能力,n維向量,每維有k個值,便能表示 kn個特徵。

詞向量是NLP深度學習研究的基石,本質上遵循這樣的假設:語義相似的詞趨向於出現在相似的上下文。因此在學習過程中,這些向量會努力捕捉詞的鄰近特徵,從而學習到詞彙之間的相似性。有了詞向量,便能夠通過計算餘弦距離等方式來度量詞與詞之間的相似度。

Mikolov等[4]對詞向量的廣泛普及功不可沒,他們用CBOW和Skip-gram模型訓練出來的詞向量具有神奇的語意組合特效,詞向量的加減計算結果剛好是對應詞的語意組合,譬如v(King) - v(Man) + v(Woman) = v(Queen)。這種意外的特效使得Word2vec快速流行起來。至於爲什麼會有這種行爲呢?有意思的是Gittens等[10]做了研究,嘗試給出了理論假設:詞映射到低維分佈式空間必須是均勻分佈的,詞向量纔能有這個語意組合效果。

CBOW和Skip-gram是Word2vec的兩種不同訓練方式。CBOW指摳掉一個詞,通過上下文預測該詞;Skip-gram則與CBOW相反,通過一個詞預測其上下文。

以CBOW爲例。CBOW模型是一個簡單的只包含一個隱含層的全連接神經網絡,輸入層採用one-hot編碼方式,詞典大小爲V;隱含層大小是N;輸出層通過softmax函數得到詞典裏每個詞的概率分佈。層與層之間分別有兩個權重矩陣W ∈ RV ×N和W′ ∈ RH×V。詞典裏的每個單詞都會學習到兩個向量vc和vw,分別代表上下文向量和目標詞向量。因此,給予上下文c,出現目標詞w的概率是:p(w|c),該模型需要學習的網絡參數θ 。

詞向量是用概率模型訓練出來的產物,對訓練語料庫出現頻次很低甚至不曾出現的詞,詞向量很難準確地表示。詞向量是詞級別的特徵表示方式,單詞內的形態和形狀信息同樣有用,研究者提出了基於字級別的表徵方式,甚至更細粒度的基於Byte級別的表徵方式。2017年,Mikolov等[9]提出用字級別的信息豐富詞向量信息。此外,在機器翻譯相關任務裏,基於Byte級別的特徵表示方式BPE還被用來學習不同語言之間的共享信息,主要以拉丁語系爲主。2019年,Lample等[11]提出基於BERT優化的跨語言模型XLM,用BPE編碼方式來提升不同語言之間共享的詞彙量。

雖然通過詞向量,一個單詞能夠很容易找到語義相似的單詞,但單一詞向量,不可避免一詞多義問題。對於一詞多義問題,最常用有效的方式便是基於預訓練模型,結合上下文表示單詞,代表模型有EMLo、GPT和BERT,都能有效地解決這個問題。

詞,可以通過詞向量進行表徵,自然會有人思考分佈式表示這個概念是否可以延伸到句子、文章、主題等。詞袋模型Bag-of-Words忽略詞序以及詞語義,2014年Mikolov等[8]將分佈式向量的表示擴展到句子和文章,模型訓練類似word2vec。關於句子的向量表示,2015年Kiros等提出skip-thought,2018年Logeswaran等提出改進版quick-thought。

FastText

2016年,Mikolov等[7]提出一種簡單輕量、用於文本分類的深度學習模型,架構跟Mikolov等[4]提出的word2vec的CBOW模型相似,但有所不同:各個詞的embedding向量,補充字級別的n-gram特徵向量,然後將這些向量求和平均,用基於霍夫曼樹的分層softmax函數,輸出對應的類別標籤。FastText能夠做到效果好、速度快,優化的點有兩個:一是引入subword n-gram的概念解決詞態變化的問題,利用字級別的n-gram信息捕獲字符間的順序關係,依次豐富單詞內部更細微的語義;二是用基於霍夫曼樹的分層softmax函數,將計算複雜度從O(kh)降低到O(h log2(k)),其中,k是類別個數,h是文本表示的維數。相比char-CNN之類的深度學習模型需要小時或天的訓練時間,FastText只需要秒級的訓練時間。


CNN-based Model

詞向量通過低維分佈式空間能夠有效地表示詞,使其成爲NLP深度學習研究的基石。在詞向量的基礎上,需要有一種有效的特徵提取器從詞向量序列裏提取出更高層次的特徵,應用到NLP任務中去,譬如機器翻譯、情感分析、問答、摘要,等。鑑於卷積神經網絡CNN在機器視覺領域非常出色的特徵提取能力,自然而然被研究者嘗試用於自然語言處理領域。

回顧CNN應用於NLP領域的過去,好像一段民間皇子誤入宮廷的鬥爭史。CNN用於句子建模最早可以追溯到2008年Collobert等[12]的研究,使用的是查找表映射詞的表徵方式,這可以看作是一種原始的詞向量方法。2011年Collobert等[3]擴展了他的研究工作,提出一種基於CNN的通用框架用於各種NLP任務。Collobert[3]、Kalchbrenner[14]、Kim[13]等基於CNN的研究工作,推進了CNN應用在NLP研究的普及。

CNN擅長捕獲局部特徵,能夠將信息量豐富的潛在語義特徵用於下游任務,譬如TextCNN用於文本分類。但CNN卻有長距離依賴問題,研究者嘗試用動態卷積網絡DCNN來改善這個不足。跟RNN的競爭過程中,CNN不停地優化自身能力,現在CNN的研究趨勢是:加入GLU/GTU門機制來簡化梯度傳播,使用Dilated CNN增加覆蓋長度,基於一維卷積層疊加深度並用Residual Connections輔助優化,優秀代表:增加網絡深度的VDCNN和引進Gate機制的GCNN。

TextCNN

2014年,Kim[13]提出基於預訓練Word2vec的TextCNN模型用於句子分類任務。CNN,通過卷積操作做特徵檢測,得到多個特徵映射,然後通過池化操作對特徵進行篩選,過濾噪音,提取關鍵信息,用來分類。

TextCNN的詳細過程敘述如下:對輸入長度爲n、詞向量維度爲d的句子,有filter_size=(2, 3, 4)的一維卷積層,每個filter有2個channel,相當於分別提取兩個2-gram、3-gram和4-gram特徵。卷積操作ci = f(w · xi:i+h−1 + b),f是激活函數,ci表示卷積得到的特徵,通過滑動窗口w,跟句子所有詞進行卷積運算,得到特徵映射c = [c1,c2,…,cn−h+1]。然後通過1-max pooling最大池化操作提取特徵映射c中最大的值,不同的filter獲得不同的n-gram特徵。最後,通過softmax函數得到分類結果。這裏的channel,可以是兩個不同詞向量,譬如Word2vec和Glove,也可以是Frozen和Fine-tuning兩種不同處理預訓練詞向量的方式。CNN天生不是用於提取語言語法語義信息,channel採用不同特徵表示方式,就像雞蛋放多個籃子一樣,期待收益最大化。

DCNN

2014年,Kalchbrenner等[14]提出一種用於句子語義建模的動態卷積網絡DCNN,採用動態挑選K個最大特徵的池化策略。這種策略保留了特徵的順序但不包括具體位置,支持模型以較小的卷積層覆蓋較廣的範圍,有利於累計句子中的關鍵信息。

這個模型除了K最大池化,還有兩個關鍵的知識點:寬卷積Wide Convolution和摺疊Folding。寬卷積,指對句子左右進行補零再卷積操作,得到比原來更長的特徵映射表,句子中的詞與詞更多可能地組合。摺疊,在最後的K-Max Pooling之前,對特徵每兩行綜合疊加,降低特徵維數。這個結構不需要語法分析樹,便能基於句子生成特徵圖,捕捉短的和長的語義關係。

GCNN

2017年,Dauphin等[15]將Gate機制引進CNN。在此之前,語言模型主要方式還是基於RNN,特別是LSTM在NLP領域廣泛應用。GCNN引進一種Gate機制簡化梯度傳播,執行效果和效率比當時的LSTM好。GCNN的流程:輸入句子經過查找表獲取相應的詞向量,基於輸入的詞向量或上一層卷積輸出結果,進行卷積運算和門運算hl(X)=(X∗W+b)⊗σ(X∗V+c),輸出結果採用Adaptive Softmax加速預測。

VDCNN

2017年,Conneau等[16]提出了加大網絡深度的VDCNN用於文本分類任務。VDCNN架構由29個卷積層組成,包括8個卷積層Block、3個最大池化層、1個K-Max Pooling、3個全連接層。其中,卷積層的通道數分別是64、64、128、128、256、256、512、512;前3個池化層的步長設置爲2,最後1個K-Max池化層的k設置爲8;卷積核大小爲conv3。

每個卷積層Block包括兩個卷積層序列,每個卷積層都會連接1個Temporal BatchNorn層和1個ReLU激活函數。


RNN-based Model

CNN本質上通過卷積運算和池化操作提取關鍵信息,擅長捕獲局部特徵,而RNN則擅長處理時序信息和長距離依賴,兩者各有專長,沒有完勝的強者,只有什麼場景更適合誰。RNN更符合人類語言的特性,人的思考基於先知,理解文章中的每一個詞都是基於前面已經讀過的詞。所以,RNN被用到更多NLP任務場景,研究者基於RNN結合各種機制來滿足不同NLP任務場景的需求。

RNN模型可以用來做什麼呢?語言模型和文本生成,對一個文本序列,基於前面的單詞預測下一個詞的概率,同樣,基於輸出概率分佈進行採樣,用於生成文本;機器翻譯,跟語言模型相似,基於源語言的詞序列,輸出目標語言的詞序列,不同的是輸出前需要提前看到完整的輸入信息;語音識別,輸入聲音信號,基於概率預測語音片段序列;圖像描述生成,結合CNN提取特徵,作爲模型的一部分用來生成未標註圖像的描述信息。

RNN成長的過程中,有哪些有意思的模型呢?RNN有梯度消失的問題,LSTM/GRU採用Gate機制有效解決了這個問題。RNN是單向的基於上文或下文進行分析的模型,在很多NLP任務場景,基於上下文的雙層雙向語言模型相比更有優勢,能夠更好地捕獲變長且雙向的n-gram信息,優秀代表Bi-LSTM,前沿的上下文預訓練模型CoVe、ELMo、CVT等便是基於Bi-LSTM。RNN的模型特性使其很適合Seq2Seq場景,基於RNN/LSTM的Encoder-Decoder框架常用於機器翻譯等任務。此外,還有嘗試結合CNN和RNN的RCNN、基於RNN的文本生成模型VAE、結合LSTM和樹形結構的解析框架Tree-base LSTM,這裏就不作詳細介紹。

RNN

早在1990年,Elman[17]就提出使用時序信息的思想。RNN之所以被命名Recurrent這個詞,是因爲模型對句子每個元素都執行相同操作:當前時刻的計算依賴上一時刻計算的結果。換句話說,RNN模型是具有“記憶”能力的,它能捕獲之前已經被計算過的信息,用於當前的計算。

下圖展示的是沿時間軸展開整個序列的通用RNN網絡架構,詳細計算流程:xt是t時刻的輸入;st是t時刻的隱含層狀態,計算公式是st =f(Uxt +Wst−1),st的計算依賴上一時刻的隱含層狀態和當前時刻的輸入,函數f是非線性的tanh或ReLU;ot是t時刻的輸出。

LSTM

理論上,這種架構支持RNN捕獲無限長的上下文信息用於當前計算,但是,這些信息都是需要的嗎?不一定,看情況而定。譬如,預測句子“the clouds are in the sky”的最後一個詞sky,我們不需要額外的上下文信息就能預測,而預測句子“I grew up in France … I speak fluent French”的最後一個詞French,則需要前面France信息的參考。這便是原生RNN的長距離依賴問題。此外,在實際模型訓練過程中發現,RNN還有嚴重的梯度消失和梯度膨脹問題。LSTM和GRU加入門機制解決該問題。LSTM主要包括3個門:輸入門、遺忘門和輸出門,GRU主要包括2個門:重置門和更新門。

以LSTM爲例。x包括t時刻的輸入和上一時刻的隱含層狀態;ft通過sigmoid層決定上一個單元狀態ct−1是否被遺忘;it決定t時刻哪些數據被更新,tanh(Wc.X +bc)是待更新的候選數據;ot決定t時刻的輸出。換句話說,門機制就是讓LSTM學會上下文語境下哪些信息該丟棄,哪些需要繼續傳遞下去。LSTM和GRU相互之間沒有明顯優勢,但在很多NLP任務表現都比原生RNN好,具體選擇LSTM還是GRU,取決於其他因素,譬如計算資源等。

Bi-LSTM

Bi-LSTM是RNN的一種擴展。2016年,Lample等[19]採用Bi-LSTM做命名實體識別NER。模型採用雙層雙向LSTM做編碼器,能夠捕獲任意目標詞的無限長上下文信息。li代表目標詞i的上文,ri代表目標詞i的下文,ci負責把兩層信息向量綜合起來作爲目標詞i的上下文,最後送入CRF層。其中,CRF是常用於NER等序列標註任務的概率圖模型。

Seq2Seq

Seq2Seq,即Sequence to Sequence,通用的Encoder-Decoder框架,常用於機器翻譯、文本摘要、聊天機器人、閱讀理解、語音識別、圖像描述生成、圖像問答等場景。最早是2014年Bengio等[22]和Bowman等[21]分別提出基於RNN/LSTM的Seq2Seq模型用於機器翻譯。

Bengio等[22]提出一個新的神經網絡模型:RNN Encoder-Decoder,包括2個RNN分別負責Encoder和Decoder。具體流程:對輸入序列x,RNN編碼器依次讀取每個xt並更新隱含層狀態,當讀完序列的結束符號EOS,得到最後的隱含層狀態c,代表整個輸入序列;另一個RNN解碼器負責生成輸出序列,基於隱含層狀態h⟨t⟩預測下一個輸出yt,其中,t時刻的隱含層狀態h⟨t⟩和輸出yt都依賴上一時刻的輸出yt−1和以及輸入序列的c,t時刻解碼器隱含層狀態計算公式h⟨t⟩ ,輸出的概率分佈P(yt|yt−1,yt−2,…,y1,c) 。

Bowman等[21]提出的也是這種框架,只不過用是的多層LSTM。模型用多層LSTM將輸入序列映射成一個固定維數的向量,另外一個深層LSTM負責從這個向量解碼出目標序列。


Attention-based Model

不同於CNN、RNN,注意力機制是一種讓模型重點關注重要關鍵信息並將其特徵提取用於學習分析的策略。最早將注意力機制引進NLP領域的是機器翻譯等基於Encoder-Decoder框架的場景。傳統的Encoder-Decoder框架有個問題:一些跟當前任務無關的信息都會被編碼器強制編碼進去,尤其輸入很長或信息量很大時這個問題特別明顯,進行選擇性編碼不是框架所能做到的。所以,注意力機制剛好能解決這個痛點。

如何理解注意力機制?類比人類世界,當我們看到一個人走過來,爲了識別這個人的身份,眼睛注意力會關注在臉上,除了臉之後的其他區域信息會被暫時無視或不怎麼重視。對於語言模型,爲了模型能夠更加準確地判斷,需要對輸入的文本提取出關鍵且重要的信息。怎麼做?對輸入文本的每個單詞賦予不同的權重,攜帶關鍵重要信息的單詞偏向性地賦予更高的權重。抽象來說,即是:對於輸入Input,有相應的query向量和key-value向量集合,通過計算query和key關係的function,賦予每個value不同的權重,最終得到一個正確的向量輸出Output。

注意力機制最早是爲了解決Seq2Seq問題的,後來研究者嘗試將其應用到情感分析、句對關係判別等其他任務場景,譬如關注aspect的情感分析模型ATAE LSTM、分析句對關係的ABCNN。

AT Seq2Seq

最早將注意力機制用於機器翻譯模型NMT的是Bengio等[24],NMT是一個典型的Seq2Seq模型。跟原來的模型相似,i時刻的輸出yi和隱含層狀態si依賴上一時刻的輸出yi−1和輸入序列的上下文信息向量c。不同的是,上下文信息向量c的計算是基於輸入序列相應隱含層狀態的加權計算結果,而這個權值是由目標輸入跟輸入序列的相關性計算得來。模型使用一個雙向雙層RNN編碼器計算輸入序列x的隱含層狀態h,解碼器在解碼翻譯過程會對輸入序列進行仿真搜索,第i時刻會依次計算目標輸出si−1跟輸入序列隱含層狀態h的相關性,eij代表目標輸出si−1跟第j個值hj的相關性,權重αij用來更新第i時刻的上下文信息向量ci。

2015年,Luong等[25]針對Seq2Seq模型提出應用注意力機制的優化方案,主要包括Global Attention和Local Attention兩種機制。這兩種注意力機制跟Bengio等[24]的思路是相似的,不同的是Global機制對輸入序列的所有詞進行分析並提出幾種不同擴展方式,Local機制考慮的是節省應用注意力機制的計算資源消耗。對於Global機制的幾種擴展方式,作者的實驗結果是general方式最好。

Global機制的弊端就是目標輸出需要跟輸入的所有詞都計算,這種成本是很昂貴的,特別是段落、文章等長序列,要將其翻譯是不太實際的。Local機制採用的優化方案是增加一個2D+1長度的窗口,確定窗口命中位置pt,目標輸出只需要跟窗口內的輸入序列計算即可。位置pt的確定方式有兩種:local-m和local-p,local-m是直接根據時刻t簡單指定,local-p是根據t時刻的隱含層狀態ht預測輸入序列S的位置。最後,權值at(s)的計算在原來的align函數上增加一個高斯分佈。

ATAE-LSTM

Aspect級別的情感分類分析的是句子關於某個aspect的情感傾向,相比文檔級別分析粒度更細。2016年,Wang等[26]提出基於注意力機制的LSTM模型,用於aspect級別的情感分類。當分析不同aspect的情感傾向時,模型能夠關注到句子的不同部分。下圖是注意力機制的效果可視化。模型不僅能夠抓到跟aspect相關的重要詞,哪怕是多義詞,還有能注意到句子不同位置的重要信息。

模型不同於Seq2Seq,只有一個編碼器LSTM。輸入層和隱含層都加了aspect的向量𝑣𝑎,𝛼是注意力權重,r是基於aspect的句子表示,h𝑁是隱含層狀態的最後輸出,h*是最後句子的表示,模型最後經過softmax得到情感類別的概率分佈。

ABCNN

Yin等[28]探索了注意力機制在CNN模型的應用,提出了ABCNN模型,用於句對關係判別,包括答案選擇AS、釋義識別PI、文本蘊含TE。作者在論文中分析了三種不同的應用注意力機制的方法。

第一種ABCNN-1,在卷積前計算出s0和s1的注意力矩陣A,s0和s1的特徵映射表跟矩陣A進行計算得到注意力特徵映射表,特徵映射表和注意力特徵映射表一起輸入卷基層。

第二種ABCNN-2,在s0和s1卷積後計算兩者的注意力矩陣A,通過A進行計算再池化。

第三種ABCNN-3,將前面兩種結合起來,卷積前和池化前都進行注意力計算。


Transformer-based Model

在Seq2Seq場景,注意力機制的引入,顯著提升了模型的能力。但基於RNN的Seq2Seq框架有個很大的不足就是編碼階段必須按序列依次處理。爲了提升並行計算,研究者提出了基於CNN的ConvS2S[28]和ByteNet[29]。在這些模型裏,輸入或輸出任意兩個位置之間的關聯運算量跟位置有關,ConvS2S是線性,ByteNet是對數性,這對長距離學習很困難。因此,Google提出了Transformer[30],完全拋棄了CNN和RNN,只基於注意力機制捕捉輸入和輸出的全局關係,框架更容易並行計算,在諸如機器翻譯和解析等任務訓練時間減少,效果提升。Transformer的能力有目共睹,被應用到GPT、BERT、XLM等預訓練模型,刷新各種NLP任務的SOTA。

Transformer

Transformer由Encoder和Decoder組成。Encoder是由N個完全一樣的網絡層組成,每個網絡層都包含一個多頭自注意力子層和全連接前向神經網絡子層。Decoder相比Encoder多了一個多頭自注意力子層。爲了更好地優化深度網絡,每個子層都加了殘差連接並歸一化處理。

論文提到了兩個注意力機制:Scaled Dot-Product Attention和Multi-Head Attention。

Scaled Dot-Product Attention。Self-Attention機制是在該單元實現的。對於輸入Input,通過線性變換得到Q、K、V,然後將Q和K通過Dot-Product相乘計算,得到輸入Input中詞與詞之間的依賴關係,再通過尺度變換Scale、掩碼Mask和Softmax操作,得到Self-Attention矩陣,最後跟V進行點乘計算。

Multi-Head Attention。通過h個不同線性變換,將d_model維的Q、K、V分別映射成d_k、d_k、d_v維,並行應用Self-Attention機制,得到h個d_v維的輸出,進行拼接計算Concat、線性變換Linear操作。

GPT

2018年,Radford等[31]在OpenAI發表基於生成式預訓練的單向神經網絡語言模型GPT,成爲當年最火的預訓練模型之一。採用的是Fine-tuning方式,分成兩個階段:第一階段採用Transformer解碼器部分,基於無標註語料進行生成式預訓練;第二階段基於特定任務進行有區別地Fine-tuning訓練,譬如文本分類、句對關係判別、文本相似性、多選任務。

BERT

2018年,Devlin等[32]提出基於深度雙向Transformer的預訓練模型BERT,與GPT不同的是,BERT採用的特徵提取器是Transformer編碼器部分。同樣,BERT也分成預訓練和下游任務微調兩個階段。

BERT的輸入是一個線性序列,支持單句文本和句對文本,句首用符號[CLS]表示,句尾用符號[SEP]表示,如果是句對,句子之間添加符號[SEP]。輸入特徵,由Token向量、Segment向量和Position向量三個共同組成,分別代表單詞信息、句子信息、位置信息。

BERT採用了MLM和NSP兩種策略用於模型預訓練。

MLM,Masked LM。對輸入的單詞序列,隨機地掩蓋15%的單詞,然後對掩蓋的單詞做預測任務。相比傳統標準條件語言模型只能left-to-right或right-to-left單向預測目標函數,MLM可以從任意方向預測被掩蓋的單詞。不過這種做法會帶來兩個缺點:1.預訓練階段隨機用符號[MASK]替換掩蓋的單詞,而下游任務微調階段並沒有Mask操作,會造成預訓練跟微調階段的不匹配;2.預訓練階段只對15%被掩蓋的單詞進行預測,而不是整個句子,模型收斂需要花更多時間。對於第二點,作者們覺得效果提升明顯還是值得;而對於第一點,爲了緩和,15%隨機掩蓋的單詞並不是都用符號[MASK]替換,掩蓋單詞操作進行了以下改進,同時舉例:“my dog is hairy”挑中單詞“hairy”。

NSP,Next Sentence Prediction。許多重要的下游任務譬如QA、NLI需要語言模型理解兩個句子之間的關係,而傳統的語言模型在訓練的過程沒有考慮句對關係的學習。NSP,預測下一句模型,增加對句子A和B關係的預測任務,50%的時間裏B是A的下一句,分類標籤爲IsNext,另外50%的時間裏B是隨機挑選的句子,並不是A的下一句,分類標籤爲NotNext。

XLM

2019年,Lample等[33]在Facebook AI提出基於BERT優化的跨語言模型XLM。XLM的優秀,不僅在於它基於BERT優化後在句對關係判別和機器翻譯任務上的表現,作者處理低資源語言問題的做法給了我們很多思路,而低資源語言問題是目前NLP四大開放性問題之一。相比BERT,XLM做了幾點優化。首先,替換原來用單詞或字符作爲模型輸入的方式,XLM模型採用一種Byte-Pair Encoding(BPE)編碼方式,將文本輸入切分成所有語言最通用的子單詞,從而提升不同語言之間共享的詞彙量。其次,基於BERT架構,並做了兩點升級:XLM模型的每個訓練樣本由兩段內容一樣但語言不通的文本組成,而BERT模型的訓練樣本都是單一語言,BERT的目標是預測被掩蓋單詞,而XLM模型不僅僅如此,基於新架構,能夠利用一個語言的上下文去預測另一種語言的Token,此外,每一種語言都會被隨機掩蓋單詞;XLM模型還會分別輸入語言ID以及每一種語言的Token位置信息,這些新的元數據能夠幫助模型更好地學習不同語言相關聯Token之間的關係信息。

完整的XLM模型是通過MLM和TLM兩種策略進行訓練和交互。

3 應用

想起一句格言“All models are wrong, but some are useful.”發展到現在,NLP更迭了很多模型,有的甚至淡出了人們視野,但是,沒有無用的模型,只有適合它的地方,即便是規則方法,在現在很多NLP應用中依然發揮着作用。在這裏,筆者嘗試總結NLP不同任務場景一些有意思的模型,經驗有限,如有不全或不當地方,請予指正。

除了OCR、語音識別,自然語言處理有四大類常見的任務。第一類任務:序列標註,譬如命名實體識別、語義標註、詞性標註、分詞等;第二類任務:分類任務,譬如文本分類、情感分析等;第三類任務:句對關係判斷,譬如自然語言推理、問答QA、文本語義相似性等;第四類任務:生成式任務,譬如機器翻譯、文本摘要、寫詩造句、圖像描述生成等。

向量表示

詞、句子、文章的向量表示,包括基於上下文的方法。詞的向量表示,看任務對詞粒度的要求,一般場景用預訓練好的詞向量Word2vec和Glove,或者通過one-shot編碼再加一個Embedding層的方式。在序列標註、機器翻譯等場景,對詞內特徵要求比較高,可以採用字級別的,常用的有subword n-gram和BPE,也有結合詞級別向量的做法。遷移學習帶來的模型效果提升有目共睹,EMLo、GPT、BERT等預訓練模型,將上下文考慮進來,在具體下游任務微調適配,更恰當的表示詞的語義信息,特別是一詞多義場景。句子和文檔等序列的向量表示,大概分兩類:一種是用TextRank的方式提取序列的主要關鍵詞,基於關鍵詞的詞向量並賦予權重的方式表示序列,權重分配可以是平均也可以用tf-idf之類的算法;一種是將序列進行embedding,方法有很多種,譬如doc2vec、skip-thought、quick-thought、BERT等。

文本相似性

大家應該很熟悉谷歌提出的simhash算法,用來文本去重。深度學習用來處理文本語義相似性任務,簡單可以分成兩類:一種是用預訓練好的詞向量Word2vec或Glove來表示句子,計算向量之間的距離來區分相似性;一種是用預訓練模型來表示句子,譬如2018年穀歌[37]提出通用句子編碼器來獲取句子向量,然後用arccos來計算相似距離,作者在論文中介紹了兩種編碼器:DAN和Tansformer。

文本分類

文本分類,NLP工業化應用最廣泛的任務之一,譬如辨別垃圾信息或惡意評論、對文章進行政治傾向分類、對商品積極和消極的評論進行分類,等等。文本分類的方法有很多種,傳統機器學習的邏輯迴歸、SVM、貝葉斯分類模型、主題模型,深度學習的FastText、基於CNN/RNN的分類模型,以及最近很火的基於預訓練模型的BERT、ELMo、GPT、ULMFiT。如果是語料語義簡單的分類任務,用傳統機器學習方法即可,抑或FastText也是個不錯的選擇,成本低,如果是像社交數據之類語義豐富的場景,可以考慮深度學習模型,CNN擅長捕獲局部特徵,RNN擅長處理時序信息,預訓練模型的優點就不用多說,注意力機制在模型效果不滿足時可以考慮一試。

情感分析

情感分析,又叫觀點挖掘,該任務目的是從文本中研究人們對實體以及其屬性所表達的觀點、情緒、情感、評價和態度。這些實體可以是各種產品、機構、服務、個人、事件、問題或主題等。這一領域涉及的問題十分多樣,包括很多研究任務,譬如情感分析、觀點挖掘、觀點信息提取、情感挖掘、主觀性分析、傾向性分析、情緒分析以及評論挖掘等。基於所處理文本的顆粒度,情感分析研究可以分成三個級別:篇章級、句子級和屬性級。研究情感分析的方法有很多種,情感詞典匹配規則、傳統機器學習、深度學習,等。

機器翻譯

機器翻譯,非常具有挑戰性的NLP任務之一。從基於短語匹配概率的SMT框架,到基於CNN/RNN/Transformer的NMT框架,注意力機制在提升模型效果發揮重要的作用。機器翻譯任務裏,低資源語言的翻譯問題是個大難點,跨語言模型XLM在這塊進行了探索,利用富資源語言來學習低資源語言。

命名實體識別

命名實體識別(英語:Named Entity Recognition,簡稱NER)是NLP序列標註任務的一種,指從輸入文本中識別出有特定意義或指代性強的實體,是機器翻譯、知識圖譜、關係抽取、問答系統等的基礎。學術上NER的命名實體分3大類和7小類,3大類指實體類、時間類、數字類,7小類指人名、地名、組織機構名、時間、日期、貨幣、百分比。語言具有語法,語料遵循一定的語法結構,所以CRF、HMM和MEMM等概率圖模型被用來分析標籤轉移概率,包括深度學習模型一般會加上CRF層來負責句子級別的標籤預測。深度學習模型一般用ID-CNN和Bi-LSTM再加一個CRF層,遷移學習火起來後,CVT、ELMo和BERT在NER任務上的表現也是非常不錯。

4 未來

在由Deepmind主辦的Deep Learning Indaba 2018深度學習峯會上,20多位NLP研究者探討了NLP領域的四個主要開放性問題:自然語言理解,很難,現在很多模型和機制只是在提升系統模式匹配的能力;低資源場景的NLP,除了語言,在生活中還有很多場景碰到這種問題,譬如如何在缺乏用戶評論的前提下評價一家新開的餐廳;大型文本或多個文本的推理;數據集、問題和評估。

在接下來一兩年,NLP領域的研究和應用,可能會有這樣的趨勢或借鑑的地方:

  1. 預訓練+微調兩階段模型;
  2. 基於Transformer的特徵提取
  3. 基於BERT優化、在不同任務場景的應用探索
  4. 新語言模型的探索,Transformer給了我們很多思路

新模型在應用落地會經歷成本和收益的權衡過程,期待硬件技術的發展。

參考資料
[1]Tom Young, Devamanyu Hazarika, Soujanya Poria, Erik Cambria.Recent Trends 2018. in Deep Learning Based Natural Language Processing.
[2]Y. Bengio, R. Ducharme, P. Vincent, and C. Jauvin. 2003. A neural probabilistic language model.
[3]R. Collobert, J. Weston, L. Bottou, M. Karlen, K. Kavukcuoglu, and P. Kuksa. 2011. Natural language processing (almost) from scratch
[4]T. Mikolov, I. Sutskever, K. Chen, G. S. Corrado, and J. Dean. 2013. Distributed representations of words and phrases and their compositionality
[5]A.Paccanaro,G.Hinton. 1986. Learning Distributed Representations of Concepts using Linear Relational Embedding.
[6]H. Schutze. Word space. In S. J. Hanson, J. D. Cowan, and C. L. Giles. 1993. Advances in Neural Information Processing Systems.
[7]A. Joulin, E. Grave, P. Bojanowski, T. Mikolov. 2016. Bag of Tricks for Efficient Text Classification
[8]Q. Le, T. Mikolov. 2014. Distributed Representations of Sentences and Documents
[9]A. Joulin, E. Grave, P. Bojanowski, T. Mikolov. 2017. Enriching Word Vectors with Subword Information
[10]A. Gittens, D. Achlioptas, and M. W. Mahoney. 2017. Skip-gram-zipf+ uniform= vector additivity.
[11]G. Lample, A. Conneau. 2019. Cross-Lingual Language Model Pretraining.
[12]R. Collobert and J. Weston. 2008. A Unified Architecture for Natural Language Processing: Deep Neural Networks with Multitask Learning.
[13]Y. Kim. 2014. Convolutional Neural Networks for Sentence Classification
[14]N. Kalchbrenner, E. Grefenstette, P. Blunsom. 2014. A Convolutional Neural Network for Modelling Sentences.
[15]Y. Dauphin, A. Fan, M. Auli, D. Grangier. 2017. Language Modeling with Gated Convolutional Networks.
[16]A. Conneau, H. Schwenk, Y. Le Cun, L. Barrault. 2017. Very Deep Convolutional Networks for Text Classification.
[17]J. L. Elman. 1990. Finding structure in time.
[18]T. Mikolov, M. Karafia ́t, L. Burget, J. Cernocky`, and S. Khudanpur. 2010. Recurrent neural network based language model.
[19]G. Lample, M. Ballesteros, S. Subramanian, K. Kawakami, and C. Dyer. 2016. Neural architectures for named entity recognition.
[20]M. Malinowski, M. Rohrbach, and M. Fritz. 2015. Ask your neurons: A neural-based approach to answering questions about images.
[21]S. R. Bowman, L. Vilnis, O. Vinyals, A. M. Dai, R. Jozefowicz, and S. Bengio. 2015. Generating sentences from a continuous space.
[22]K.Cho,B.Merrienboer,C.Gulcehre,F.Bougares,H.Schwenk,andY.Bengio. 2014. Learningphraserepresen- tations using RNN encoder-decoder for statistical machine translation.
[23]I. Sutskever, O. Vinyals, and Q. V. Le. 2014. Sequence to sequence learning with neural networks
[24]D.Bahdanau,K.Cho,andY.Bengio. 2014. Neural machine translation by jointly learning to align and translate.
[25]M. Luong, H. Pham, C. Manning. 2015. Effective Approaches to Attention-based Neural Machine Translation.
[26]Y. Wang, M. Huang, X. Zhu, and L. Zhao. 2016. Attention-based lstm for aspect-level sentiment classification.
[27]W. Yin, H. Schuzte, B. Xiang, B. Zhou. 2018. ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs.
[28]Jonas Gehring, Michael Auli, David Grangier, Denis Yarats, and Yann N. Dauphin. 2017. Convolu- tional sequence to sequence learning.
[29]Nal Kalchbrenner, Lasse Espeholt, Karen Simonyan, Aaron van den Oord, Alex Graves, and Ko- ray Kavukcuoglu. 2017. Neural machine translation in linear time.
[30]A. Vaswani, N. Shazeer, N. Parmar, and J. Uszkoreit. 2017. Attention is all you need.
[31]Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. 2018. Improving language under- standing by Generative Pre-Training.
[32]Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Krisina Toutanova.2018.BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding.
[33]G. Lample, A. Conneau. 2019. Cross-Lingual Language Model Pretraining.
[34]Ryan Kiros, Yukun Zhu, Ruslan Salakhutdinov, Richard S. Zemel, Antonio Torralba, Raquel Urtasun, Sanja Fidler. 2015. Skip-Thought Vectors
[35]Lajanugen Logeswaran, Honglak Lee.2018. An Efficient Framework For Learning Sentence Representations.
[36]Alexis Conneau, Douwe Kiela, Holger Schwenk, Loic Barrault, and Antoine Bordes. 2017. Supervised learning of universal sentence representations from natural language inference data.
[37]Daniel Cer, Yinfei Yang, Sheng-yi Kong, Nan Hua, Nicole Limtiaco, Rhomni St. John, Noah Constant, Mario Guajardo-Ce ́spede, Steve Yuan, Chris Tar, Yun-Hsuan Sung, Brian Strope, Ray Kurzweil. 2018. Universal Sentence Encoder.
[38]Yinfei Yang, Steve Yuan, Daniel Cer, Sheng-yi Kong, Noah Constant, Petr Pilar, Heming Ge, Yun-Hsuan Sung, Brian Strope, Ray Kurzweil. 2018. Learning Semantic Textual Similarity from Conversations.

作者介紹:
陳桂敏(Derek),畢業於中山大學計算機系,現職騰訊,追求技術,方向大數據分析和自然語言處理領域。

轉載自 機器之心 原文地址

參考文獻:
https://www.yuque.com/weis/ai/wqiw8u

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章