最新自然語言處理(NLP)四步流程:Embed->Encode->Attend->Predict

最新自然語言處理(NLP)四步流程:Embed->Encode->Attend->Predict

2016-11-22 21:57


http://www.17bigdata.com/%E4%B8%80%E5%A4%A9%E6%90%9E%E6%87%82%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0.html

過去半年以來,自然語言處理領(lǐng)域進化出了一件神器。此神器乃是深度神經(jīng)網(wǎng)絡(luò)的一種新模式,該模式分為:embed、encode、attend、predict四部分。本文將對這四個部分娓娓道來,并且剖析它在兩個實例中的用法。

人們在談論機器學習帶來的提升時,往往只想到了機器在效率和準確率方面帶給人們的提升,然而最重要的一點卻是機器學習算法的通用性。如果你想寫一段程序來識別社交媒體平臺上的侮辱性帖子,就把問題泛化為“需要輸入一段文本,預測出文本的類別ID”。這種分類與識別侮辱性帖子或是標記電子郵件類別之類的具體任務無關(guān)。如果兩個問題的輸入和輸出類型都一致,那我們就應復用同一套模型的代碼,兩者的區(qū)別應該在于送入的訓練數(shù)據(jù)不同,就像我們使用同一個游戲引擎玩不同的游戲。

筆者用spaCy和Keras實現(xiàn)了自然語言推理的可分解注意力模型。代碼已經(jīng)上傳到github

假設(shè)你有一項強大的技術(shù),可以預測實數(shù)稠密向量的類別標簽。只要輸入輸出的格式相同,你就能用這項技術(shù)解決所有的問題。與此同時,你有另一項技術(shù),可以用一個向量和一個矩陣預測出另一個向量。那么,現(xiàn)在你手里就握著三類問題的解決方案了,而不是兩類。為什么是三類呢?因為如果第三類問題是通過矩陣和一個向量,得到一個類別標簽,顯然你可以組合利用前兩種技術(shù)來解決。大多數(shù)NLP問題可以退化成輸入一條或多條文本的機器學習問題。如果我們能將這些文本轉(zhuǎn)化為向量,我們就可以復用現(xiàn)有的深度學習框架。接下來就是具體的做法。

文本類深度學習的四部曲

嵌入式詞語表示,也被稱為“詞向量”,是現(xiàn)在最廣泛使用的自然語言處理技術(shù)之一。詞向量表示是一種既能表示詞本身又可以考慮語義距離的表示方法。然而,大多數(shù)NLP問題面對的不是單個詞語,而是需要分析更長的文本內(nèi)容?,F(xiàn)在有一個簡單而靈活的解決方案,它在許多任務上都表現(xiàn)出了卓越的性能,即RNN模型。將文本用一個向量的序列表示之后,使用雙向RNN模型將向量編碼為一個句子向量矩陣。這個矩陣的每一行可以理解為詞向量 —— 它們對句子的上下文敏感。最后一步被稱為注意力機制。這可以將句子矩陣壓縮成一個句子向量,用于預測。

第一步:詞向量

詞向量表將高維的稀疏二值向量映射成低維的稠密向量。舉個例子,假設(shè)我們收到的文本是一串ASCII字符,共有256種可能值,于是我們把每一種可能值表示為一個256維的二值向量。字符’a’的向量只有在第97維的值等于1,其它維度的值都等于0。字符’b’的向量只有在第98維的值等于1,其它維度的值都等于0。這種表示方法稱為’one hot’形式。不同字符的向量表示完全不一樣。

大部分神經(jīng)網(wǎng)絡(luò)模型首先都會把輸入文本切分成若干個詞語,然后將詞語都用詞向量表示。另一些模型用其它信息擴展了詞向量表示。比如,除了詞語的ID之外,還會輸入一串標簽。然后可以學習得到標簽向量,將標簽向量拼接為詞向量。這可以讓你將一些位置敏感的信息加入到詞向量表示中。然而,有一個更強大的方式來使詞語表示呈現(xiàn)出語境相關(guān)。

第二步:編碼

假設(shè)得到了詞向量的序列,編碼這一步是將其轉(zhuǎn)化為句子矩陣,矩陣的每一行表示每個詞在上下文中所表達的意思。

這一步用到了雙向RNN模型。LSTM和GRU結(jié)構(gòu)的模型效果都不錯。每一行向量通過兩部分計算得到:第一部分是正向計算,第二部分是逆向計算,然后拼接兩部分得到完整的向量。計算過程如下圖代碼所示:

我個人認為雙向RNN會是今后的主流。RNN的主要應用是讀入文本內(nèi)容,然后從中預測出一些信息。而我們是用它來計算一個中間表達狀態(tài)。最重要的一點是得到的表達能夠反映詞語在文中的意義。理論上應該學到“pick up”與“pick on”這兩個詞語的意義有區(qū)別。這一直是NLP模型的巨大弱點。現(xiàn)在我們有了一個解決方案。

第三步:注意力機制

這一步是將上一步的矩陣表示壓縮為一個向量表示,因此可以被送入標準的前饋神經(jīng)網(wǎng)絡(luò)進行預測。注意力機制對于其它壓縮方法的優(yōu)勢在于它輸入一個輔助的上下文向量

Yang等人在2016年發(fā)表的論文提出了一種注意力機制,輸入一個矩陣,輸出一個向量。區(qū)別于從輸入內(nèi)容中提取一個上下文向量,該機制的上下文向量是被當做模型的參數(shù)學習得到。這使得注意機制變成一個純粹的壓縮操作,可以替換任何的池化步驟。

第四步:預測

文本內(nèi)容被壓縮成一個向量之后,我們可以學習最終的目標表達 —— 一種類別標簽、一個實數(shù)值或是一個向量等等。我們也可以將網(wǎng)絡(luò)模型看做是狀態(tài)機的控制器,如一個基于轉(zhuǎn)移的解析器,來做結(jié)構(gòu)化預測。

有趣的是,大部分的NLP模型通常更青睞淺層的前饋網(wǎng)絡(luò)。這意味著近期在機器視覺領(lǐng)域取得的重要技術(shù)至今為止并沒有影響到NLP領(lǐng)域,比如residual connections 和 batch normalization。

實例1:自然語言推測的可分解注意力模型

自然語言推測是給一對句子預測類別標簽的問題,類別標簽則表示它們兩者的邏輯關(guān)系。斯坦福自然語言預測文本集使用三種類別標簽:

1.推演(Entailment):如果第一句話是真的,那么第二句話一定為真。

2.矛盾(Contradiction):如果第一句話是真的,那么第二句話一定為假。

3.中性(Neutral):上述兩者都不是。

Bowman等人在論文中給出了幾條例子:

文本內(nèi)容假設(shè)內(nèi)容標簽

某人正在檢查一位來自中亞國家人士的服裝此人正在睡覺矛盾

一位長者和一位青年在微笑兩個人在笑,嘲笑地板上玩耍的貓中性

一輛黑色賽車在人群前面啟動一個男人正沿著一條孤獨的路行駛矛盾

一種多個男性玩的足球游戲幾位男性正在進行體育運動推演

一位微笑盛裝打扮的女性拿著一把傘一位快樂的女性在一個童話服裝會上握著一把傘中性

這份語料庫的目的之一是為我們提供一個新的、規(guī)模合適的語料庫用于研發(fā)將句子編碼為向量的模型。例如,Bowman在2016年發(fā)表的論文介紹了一種基于轉(zhuǎn)移的模型,它依次讀入句子,構(gòu)建一種樹形結(jié)構(gòu)的內(nèi)部表達。

Bowman他們的準確率達到了83.2%,比之前的工作成果提升了一大截。過了不到半年,Parikh的論文提出的模型取得了86.8%的準確率,而使用的模型參數(shù)數(shù)量只有Bowman模型的10%。不久之后,Chen等人發(fā)表的論文提出了一種效果更好的系統(tǒng),準確率達到88.3%。當我第一次閱讀Parikh的論文時,我無法理解他們的模型如何取得這么好的效果。原因在于他們的模型用獨特的注意力機制融合了兩個句子矩陣:

關(guān)鍵的優(yōu)勢是他們講句子轉(zhuǎn)為向量的壓縮步驟合并完成,而Bowman他們則是分別將兩個句子轉(zhuǎn)為向量。請記住Vapnik的原則:

“當解決一個關(guān)鍵問題時,不要解決一個更一般的問題作為中間步驟”

—— VLADIMIR VAPNIK

Parikh的論文將自然語言推測任務當做是關(guān)鍵問題。他們想辦法直接解決這個問題,因此比單獨給句子編碼有巨大的優(yōu)勢。Bowman等人則更關(guān)注問題的泛化,也是針對此構(gòu)建模型。他們的模型適用的場景也就比Parikh的模型更廣泛。比如說,利用Bowman的模型,你可以緩存句子向量,使得計算句子相似度的效率更高。

實例2:文檔分類的分層注意力網(wǎng)絡(luò)

給文檔分類是我接觸到的第一個NLP項目。澳大利亞的類似證券交易所的機構(gòu)資助了一個項目,爬取澳大利亞的網(wǎng)站頁面,并且自動檢測金融詐騙。盡管這個項目已經(jīng)過去了一段時間,但是文檔分類的方法在之后的十年中幾乎沒有變化。這也是我看到Y(jié)ang等人發(fā)表的分層注意力網(wǎng)絡(luò)模型之后如此興奮的原因。這是繼詞袋模型之后,我看到的第一篇真正有通用性改進的論文。下面是它的原理。

該模型接收一篇文檔作為輸入,文檔由句子的序列組成,其中每個句子是一個詞語的序列。每句話的每個詞語分別編碼,生成兩個詞向量序列,每個序列表示一個句子。這兩個序列分別編碼成兩個句子矩陣。然后由注意力機制將句子矩陣壓縮為句子向量,多個句子向量又組成文本矩陣。最后一步注意力操作將文本矩陣壓縮為文本向量,然后送入最終的預測網(wǎng)絡(luò)來預測類別標簽。

該模型使用注意機制作為一個純粹的壓縮步驟:它學會了把矩陣作為輸入,然后將其概括成一個向量。這種學習過程是通過學習上下文向量的兩個注意力轉(zhuǎn)換,我們可以將這種轉(zhuǎn)換理解為表示模型認為相關(guān)的詞語或者句子,該模型會找到理想相關(guān)?;蛘撸阋部梢园颜麄€壓縮過程看做是特征提取的過程。按照這種觀點,上下文向量只是另一個不透明的參數(shù)。

作者方法YELP ‘13YELP ‘14YELP ‘15IMDB

Yang et al. (2016)HN-ATT68.270.57149.4

Yang et al. (2016)HN-AVE6769.369.947.8

Tang et al. (2015)Paragraph Vector57.759.260.534.1

Tang et al. (2015)SVM + Bigrams57.661.662.440.9

Tang et al. (2015)SVM + Unigrams58.96061.139.9

Tang et al. (2015)CNN-word59.76161.537.6

將yang等人的模型與卷積神經(jīng)網(wǎng)絡(luò)做比較,可以得到有意思的結(jié)果。兩個模型都能自動提取位置敏感特征。然而,CNN模型既不通用,效率也較低。而雙向RNN模型只需要對每個句子讀入兩次 ——正向一次,反向一次。LSTM編碼還能提取任意長度的特征,因為句子上下文的任何信息都有可能被揉入詞語的向量表示。將句子矩陣壓縮成向量的步驟簡單并且有效的。要構(gòu)建文檔向量,只需要對句子向量再進行一次同樣的操作。

提升模型準確率的主要因素是雙向LSTM編碼器,它創(chuàng)建了位置敏感的特點。作者通過將注意力機制替換為平均池化,證明了上述觀點。使用平均池化的方法,該模型在所有測試數(shù)據(jù)上仍然優(yōu)于以前的最好模型。然而,注意力機制進一步普遍地提高了性能。

后續(xù)內(nèi)容

我已經(jīng)用我們自己的NLP庫spaCy實現(xiàn)了第一個例子,我正在實現(xiàn)文本分類的系統(tǒng)。我們還計劃開發(fā)一個SpaCy版的通用雙向LSTM模型,能夠方便地將預訓練的詞向量用于實際問題中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容